Linux- Iptables防火墙

引言:kernel2.4以后用的防火墙


1  组成

用户空间:用iptables命令编写策略和规则以控制服务的使用

内核空间:netfilter用于存储规则,并根据规则对数据包进行过滤。简而言之就是,用netfilter处理用户空间传过来的命令并返回一个结果。

2  iptables的表和链

1)链(chains):是数据包传播的路径。每一条链中可以有若干规则。当一个数据包到达一个链时,iptables就会从链中的第一条规则开始检查,看该数据包是否满足规则所定义的条件,如果满足,系统就会根据该条规则所定义的方法处理该数据包,否则iptables将继续检查下一条规则;如果该数据包不符合链中的任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

2)表(tables):提供特定的功能,iptables内置了3个表,filter表(用于实现数据包过滤),NAT表(用于实现网络地址转换)和mangle表(用于修改数据包的服务类型、TTL、且可以配置路由实现QOS)。

filter表——3个链:INPUT链(流入自己的数据包走这个链中的规则), OUTPUT链(从自己这里流出的数据包走这个链中的规则), FORWARD链(转发链,数据包通过自己转发出去就走这个链中的规则,自己既不是起点也不是终点)。

NAT表——4个链:PREROUTING(路由前链,对数据包作路由选择前应用这个链中的规则。用NAT技术由内网访问外网时应用这个链中的规则),POSTROUTING链(路由后链,对数据包作路由选择后应用这个链中的规则。利用端口转发,由外网访问内网时应用这个链的规则),OUTPUT,INPUT

mangle表(了解)——5个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。

3)iptables中的状态说明

ESTABLISHED: 这个状态是指出这个信息包属于已经建立的连接 . 这个连接一直用于发送很接收信息包并且完全有效。

INVALID: 这个状态指出该信息包与任何已经知道的流或者连接都不相关联,它可能饱含错误的数据或者头

NEW: 这个状态指出该信息包已经或者准备启动新的连接,或者它与尚未用于发送和接受的信息包的连接相关联

RELATED: 这个状态指出该信息包正在启动新的连接 , 以及它与已经建立的连接相关联 。

accept 允许     reject 拒绝    drop 拒绝

3  配置iptables服务

3.1 网络拓扑图

A(外网web server)-------(e0)Router(e1)--------B(内网客户端)

其中,A的IP地址——202.0.0.1/24     B的IP地址——192.168.1.2/24

R  e0的IP——202.0.0.2/24     R  e1的IP——192.168.1.1/24

注:使用iptables务必关掉其他防火墙,除了firewalld外默认都是关闭的,所以一般只需关闭firewalld—— #systemctl   mask   firewalld

3.2 配置服务器端

第一步 安装iptables软件   #yum  install  iptables-services   -y

第二步 查看所有规则集:           #iptables   -L

       重启iptables服务:             #systemctl    restart   iptables

       设置iptables服务开机自启:#systemctl    enable     iptables

第三步 在编写iptables策略规则前先执行以下操作:

iptables  -F :清除预设表 (filter) 中的所有规则链中的规则 

iptables  -X :清除预设表 (filter) 中的所有使用者定义的链 

iptables  -Z :将指定链中所有规则的包字节计数器清零

第四步 设定链和规则

    命令格式: #iptables  表名  参数  链名  规则   动作

    表    名: filter   nat   mangle

    参    数:-L 列出指定链的规则     -F 清除指定链/表中的规则

           -N自定义链                    -X 删除自定义链

           -P 设定默认策略            -Z 清空指定链中的所有计数

           -t 指定表名

    链    名: PREROUTING  INPUT  FORWARD  OUTPUT  POSTROUTING

    匹配规则: -p  protocol 指定匹配的协议(tcp/udp/icmp……)

           -s  address [/mask] 指定匹配的源地址

           -i  interface_name[+] 指定入流的网卡接口或类型,如eth+

           -d  address[/mask] 指定配置的目的地址

          --dport  端口号[:port] 指定目的端口或端口范围

          --sport   端口号[:port] 指定源端口或端口范围

          --icmp-type  类型名  指定icmp的类型,可以用#iptables  –p  tcmp  –h来查看icmp的类型

    动    作: ACCEPT 允许通过             DROP 拒绝, 并不告知对方

                  REJECT 拒绝, 告知对反      MASQUERAD 伪装                        LOG 将匹配的信息记录到日志

            SNAT (Source NAT,源NAT),指修改包中源地址(POSTROUTING)

                 DNAT (Destination NAT,目的NAT) ,指修改包中目的地址(PREROUTING) 。对于端口转发, 负载均衡, 透明代理都 是DNAT。

 

举例1:FORWARD相关的设置是在具有转发功能的设备上进行

1)修改链的默认规则  #iptables  -P  FORWARD  DROP/ACCEPT

2)拒绝一切通信    #iptables  -A  FORWARD  -i/-o  eno16777736  -j   DROP

//-A 指attach,添加;-i  指input流入接口;-o 指output流出接口

3)只拒绝某一个IP  

#iptables  -A  FORWARD  -i  eno16777736  -s  202.0.0.1  -j   DROP

4)拒绝来自202.0.0.0/24子网的通信

#iptables  -A  FORWARD  -i  eno16777736  -s  202.0.0.0/24  -j  DROP

5)拒绝与192.168.1.2的通信

#iptables  -A  FORWARD  -i  eno16777736  -d  192.168.1.2  -j   DROP

6)拒绝0.1和1.2之间的通信

#iptables  -A  FORWARD  -i  eth0  -s  202.0.0.1  -d  192.168.1.2  -j  DROP

7)只允许0.1和1.2之间的通信

#iptables  -A   FORWARD   -i    eno16777736   -s   202.0.0.1  -d  192.168.1.2   -j   ACCEPT

8)在指定位置插入规则

#iptables   -I   FORWARD  1   -i   eno16777736   -s   202.0.0.1   -d    192.168.1.2    -j    ACCEPT

//-I是大写的i,FORWARD后面的1表示是第一位;-j 指定动作

9)删除指定位置的规则    #iptables   -D   FORWARD  2(第二条)

 

举例2:控制协议和端口(指的是第3、4层的)

1)拒绝所有的tcp通讯

#iptables   -A   FORWARD   -i   eno16777736   -p   tcp   -j   DROP

2)只拒绝tcp 80号端口通讯

#iptables   -A    FORWARD   -i/o   eno16777736   -p    tcp  --dport   80   -j    DROP

 

举例3:

1)审核标记位——syn(请求);ack(确认回复)

#iptables  -A   FORWARD  -i/o   eno16777736  -p   tcp  --syn  -j   DROP

2)控制icmp(ping)

#iptables    -A    FORWARD    -o     eno16777736    -p    icmp    --icmp  -type     8     -j    DROP

3)nat网络地址转换(内访问外)A:外网 B:内网

#iptables   -t   nat   -A   POSTROUTING   -p   tcp   -o    eno16777736   -j    SNAT    --to   202.0.0.2:1024-1025

//在nat表中的POSTROUTING链中添加一条规则,将数据包的包头改为192.168.1.2,并且将数据包的源端口改为1024 1025中的任何一个可用端口

测试:第二台未配置iptables前,使用第三台主机连接第一台机器 httpd服务,在第一台主机上使用命令netstat -lantu|grep 80 可见源IP地址为192.168.1.2:随机端口;在第二台上配置iptables 后,使用第三台主机访问第一台的httpd服务,在第一台上使 用命令netstat -lantu|grep 80,可见源IP地址变为 202.0.0.2:1024(1024端口未被占用时)

注意:查看nat的iptables规则策略用  #iptables   -L   -t   nat

4)端口映射(外访内)

#iptables   -t    nat   -A   PREROUTING   -i   eno16777736   -d   202.0.0.2   -p   tcp   --dport   8000   -j   DNAT  --to   -destination   192.168.1.2:80

//-i  指定r的外网卡;--dport   8000  指定路由上开的映射口;-destination 192.168.1.2:80  指定B的IP和服务端口。

//用 #natstat   -lantu | grep  80 是看不出来有端口映射的。这个叫透明代理。

4  iptables规则的保存与恢复

1)保存  #iptables-save     //保存到了/etc/sysconfig/iptables这个文件中

2)恢复  #iptables-restore

5   NAT与端口映射的工作原理

网络拓扑图:

A(外网web server)-------(e0)Router(e1)--------B(内网客户端)

5.1 NAT的工作原理

1)当B访问外网web serverA时,B会用自己的子网掩码与A的IP进行与运算,判断后得知是外网,然后发送一个广播包(里面是询问谁能到达A),所有客户端以及router接收到广播包后会查看,如果自己不能到达A就会丢弃广播包,如果能到达就给B一个反馈。

2)然后B开始封装数据包,源IP是B自己的IP,目的IP是A的IP,源MAC就是B的MAC,目的MAC就是router的e1端口的MAC。然后B发送封装好的数据包。

3)数据包被router接收后,router进行解封,判断是不是给自己的,解封时发现MAC地址与自己相符,进而查看3层封装,发现要去外网A。这时router会开启Nat功能,Nat会让router开启自己的某个外网卡IP代替B去访问外网,同时Nat会将router的哪个外网卡的哪个端口代理了B的哪个网卡的哪个端口进行外网访问记录在自己的Nat表中。

4)当A反馈给B时,是首先反馈给router的那个Nat代理网卡,然后由Nat根据Nat表的记录,用代理网卡反馈给B。从而实现了B访问外网的过程。

注:如果A不是外网,那么就是内网通讯,根据之前讲的路由器工作原理进行数据传输。

5.2 端口映射工作原理

A访问B时,会将数据包传给R的e0端,e0端接收到数据包后,R会开启一个随机端口并将该端口映射到B的某个端口上,然后数据包根据该逻辑映射所指通过物理通道传输到B

6 代理的概念

1)正向代理:代理服务器替代访问方去访问目标服务器

2)反向代理:与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。

3)透明代理:透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。

iptables  -t  nat  -A  POSTROUTING  -s  192.168.1.0/24  -j  MASQUERADE

//-A是attached,-s指定源地址,-j 指定动作


转载请注明出处,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬼刺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值