iptables防火墙


1.实现防火墙功能需要软件来调用内核中的netfilter模块
2.linux.2.6的内核中使用的软件是iptables



iptables实现的功能有过滤,地址转换.


1.iptables中对于同一服务的不同规则的匹配顺序是至上往下,一旦匹配到规则则不再往下匹配,若都没有匹配上,则匹配默认规则.
2.iptables中有3张表和5条链路。其中filter用于过滤,其链有INPUT,OUTPUT,FORWARD.其中nat表用于地址转换,对应的链路是
   POSTROUTING PREPOSTROUTING.
  


为了说明表和链路的作用,用网络拓扑图讲解。


     10.0.0.1  
          |                                                                                                 
       主机A                                                                                                 
                                10.0.0.1<-|  fw   |->192.168.1.1            192.168.1.2<-|主机C      
       主机B                        |                            |
          |                         eth0                      eth1  
     10.0.0.3
    
注*
1.主机A和B模拟的是内网,fw为防火墙,存在俩张网卡,其中eth0与内网相连,eth1是公网地址,主机C模拟外网。


iptables实现的功能
1.主机C向fw发送数据包,判断其是否能够进入,运用的是filter表中的INPUT链
2.fw向外网的主机C发送数据包,判断是否能够出去,运用的是filter表中的OUTPUT链路.
3.内网中的主机A想访问外网,(fw开启路由转发)发送的数据包由FORWARD链过滤.
4.内网中的主机B想ping通外外网中的主机C,需要运用nat表中的POSTROUTING链通过SNAT动作将私有地址转换为公网地址.
   10.0.0.3->|nat-postrouting-snat|->192.168.1.1
5.外网中的主机C想访问内网中的主机B私有地址,需要运用nat表中的PREPOSTROUTING链通过DNAT动作将公网地址转换为私有地址.
   10.0.0.3<-|nat-preposrouting-dnat|<-192.168.1.2
6.防火墙不能给自己做DNAT,此时需要nat表中的OUTPUT链,这条链为防火墙自身做DNAT.



iptables语法及常用的命令


filter表


iptabls -t filter -[A|D|I] [INPUT|OUTPUT|FORWARD] {n} -P [udp|tcp|icmp] {!} -s 192.168.30.0/24 --sport m:n --dport x:y -j \
[ACCEPT|REJECT|DROP|LOG]


注*
1.A->追加 I->插入 D->删除
2.n为条目数且仅选项为I时可用,!为取反,动作为LOG时意为将匹配到的项记录到日志中.


iptables -L -n --line-numbers  不做反解的按序号显示默认的filter表规则


demo:为sshd服务配置iptables策略


iptables -t filter -I INPUT 1 -p tcp  -s 192.168.30.1 --dport 22 -j REJECT


此时ip为192.168.30.1的主机将不能远程此主机.



通过MAC地址设置iptables策略


iptables -I INPUT 1 -p tcp -m mac --mac=00:0C:29:03:0C:10 --dport 22 -j REJECT


此时mac地址为00:0C:29:03:0C:10将不能远程该主机


更改默认规则
iptables -t filter -P [ACCEPT|REJECT|DROP]



为保证安全我们需要确保俩条
1.服务端不能主动向客户端发送请求.
2.当客户端向服务端建立连接时,服务器可以向客户端发送数据.


iptables -t filter -I OUTPUT 1 -p tcp -m state --state=RELATED,ESTABLISHED --sport 22 -j ACCEPT


此时服务端不能远程客户端,而客户端可以远程服务端


iptables策略备份与恢复


iptables-save     >xx
iptables-restore <xx



为了说明nat表中的各种策略,借用上面的网络拓扑图.


      10.0.0.1  
          |                                                                                                 
       主机A                                                                                                 
                                10.0.0.1<-|  fw   |->192.168.1.1            192.168.1.2<-|主机C      
       主机B                        |                            |
          |                         eth0                      eth1  
     10.0.0.3
    
注*
防火墙fw需要开启路由转发功能.
echo 1 >/proc/sys/net/ipv4/ip_forward
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p


利用nat表及其链路实现以下功能


1.内网中的主机A ping通 外网中的主机C


iptables -t nat -I POSTROUTING 1 -s 10.0.0.3/24 -j SNAT  --to-source 192.168.1.1


此时fw为主机A转换地址,但是主机A向fw发送数据包时,fw中的filter表中的INPUT链可能阻止.
a.我们可清空策略
b.设置可以通过.


注*
此时内网中的主机访问外网中的主机,我们都是讲内网主机地址转换为fw上固定的公网地址,当此公网地址为动态获取时,为了
SNAT功能实现我们可以利用MASQUERADE.


iptables -t nat -I POSTROUTING 1 -s 10.0.0.0/24 -j MASQUERADE


当我们改变fw的公网地址,此时用tcpdump -i eth0 在主机C上抓的包访问地址会发生改变.




2.外网中的主机C访问内网中主机A的web服务.


为主机A配置web服务.
#yum -y install http\*
...


iptables -t nat -I PREPOSTROUTING -p tcp --dport 80 -j DNAT --to dest 10.0.0.2


此时fw为主机C做了DNAT,使其可以访问内网中的主机A的web服务,但是它自己却不能访问。


为了让其也能访问web服务


iptables -t nat -I OUTPUT -p tcp --dport 80 -j DNAT --to dest 10.0.0.2