iptables是一种静态的基于三层过滤的工具,主要实现IP 信息包过滤,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。
iptables包含4个表,5个链。其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度。
filter:一般的过滤功能
nat:用于nat功能(端口映射,地址映射等)
mangle:用于对特定数据包的修改
raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARDING:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外转发
POSTROUTIONG:发送到网卡接口之前。如下图:
iptables 的使用规则
iptables 的规则应用:
1. 接收来自制定ip地址的所有流入的数据包
Iptables -A INPUT -s 203.25.55.10 –j ACCEP
2. 只接受来自指点端口(服务)的数据包
Iptables -A INPUT --dport 80 –j ACCEPT
3. 允许转发所有到本地smtp服务器的数据包
Iptables -A FORWARD -p tcp -d 192.168.1.1 --dpot smtp -i eth0 -j ACCEPT
4. 允许转发所有到本地的udp数据包
Iptables –A FORWARD –p udp –d 192.136.31.1 -i eth0 -j ACCEPT
5. 拒绝发往www服务器的客户端的请求数据包
Iptables -A -p tcp -d 192.168.1.1 --dport www -I eth0 -j REJECT
6. 允许来源为指定端口的tcp数据包进入
Iptables –A INPUT –p tcp –m multiport --source-port 21,53,80,25,110 ACCEPT
8.丢掉syn和ack标志位置位的数据包
Iptables –A INPUT –p tcp --tcp-flags ALL syn,ack DROP
2)碎片的检测和流量的控制
因为在tcp/ip的网络中,链路层有最大传输单元MTU这个特性,它限制了数据帧的最大长度,大于这个数的时候就会对数据包进行分片操作,分片后悔被防火墙所阻止,进而影响到接收端对这些碎片的还原,影响到信息的完整性和可用性问题,所以防火墙的允许碎片通过的规则:
#iptables -A FORWARD -p tcp -f -s 172.168.96.0/24 -d 172.168.97.18 -j ACCEPT
其中-f参数指定了第二个及以后的ip碎片将有防火墙处理通过,如不加,则可能造成对第二个及其以后的ip碎片进行拦截,
速率限制
提供了健全的速率控制机制,主要用来限制由外向内的单位时间内通过数据包个数,这样做可以尽可能的抑制拒绝服务***或是分布式拒绝***,进而保护网络中数据包的个数。
Iptables -A INPUT -m limit --limit 200/second
Iptables –A INPUT –m limit --limit 10000/minute
设定速率后,还可以设定将超过该限制所触发的一些处理事件直接丢弃,比如如果速率超过200限制后,直接对后续数据包进行丢弃。
Iptables -A INPUT –m limit --limit-burst 200