Iptables 应用解析I-FILTER
http://blog.sina.com.cn/s/blog_417b97470100a816.html
至于iptables是什么,干什么用的,这里就不介绍了.感兴趣的朋友可以Google一下.下面这张图是我在互联网CP过来的基本可以描述iptables防火墙的工作流程!
数据从网卡穿过IP层必经过链PREROUTING,再经过路由选择接收还是转发,分别走INPUT FORWARD不同的链.
从INPUT链经过的数据包进入本地系统进行处理,从本地系统出来经OUTPUT的数据和转发FORWARD出来的数据经由POSTROUTING链发出穿越IP数据层.
iptables主要功能就是在数据穿越IP层时在各链上对数据包进行规则限制.根据规则的不同的功能形成三种不同功能的表nat mangle filter,三个表常作用的链图已标明,通过这三个表可以很方便的对数据包进行管理过滤.
以下以实例形式对Filter进行讲解:
Filter 包过滤功能
filter表是专门过滤包的,内建三个链,可以对包进行DROP、LOG、ACCEPT和REJECT等操作。FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤所有本地生成的包的。
#iptables -t filter -A INPUT -s 10.0.0.5 -j DROP 凡是来自10.0.0.5包丢弃
#iptables -t filter -nL INPUT -V 查看INPUT链的filter详细(-V)规则 并显示IP不做解析(-n)
#iptables -t filter -F INPUT 清空INPUT中filter规则
#iptables -I INPUT 1 -s 10.0.0.4 -j DROP 丢弃来自10.0.0.4的包并成为规则的第一项 缺省filter
#iptables -A FORWARD -m iprange --src-range 192.168.1.5-192.168.1.124 -j ACCEPT
#iptables -A FORWARD -m iprange --dst-range 10.0.0.0-10.255.255.255 -j ACCEPT
以上二例是允许目标ip/源ip地址范围的包通过
#iptables -t filter -D INPUT 2 删除第二条规则
#iptables -t filter -P FORWARD DROP 修改FORWARD链的缺省策略
注: -I 指所有规则前插入(优先起作用) -A表插入到表末(iptables -nL可看出)
#iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
#iptables -A FORWARD -i eth0 -o eth1 -p udp -j DROP 凡是从外网(eth0)去DMZ(eth1)的udp包丢弃
注:当条件中有-p 协议号时 后可有更详细的匹配
A: -p icmp icmp扩展即被装入 可指定icmp类型(类型详见#iptables -p icmp -h)
例:iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j DROP 不允许ping主机
B: -p udp udp扩展装入 --sport/dport [!] port[:port] 单个端口或一端口范围
例:#iptables -A FORWARD -p tcp -d 198.168.80.11 --dport www -i eth0 -j ACCEPT 开放www
C: -p tcp 同上格式 重点匹配 --tcp-flags [!] mask comp mask关第状态位 comp为1的状态位
例:#iptables -t filter -A FORWORD -i eth0 -o eth1 -p tcp
--tcp-flags SYN,ACK,FIN,RST SYN -j DROP 此行可改为 --syn -j DROP 即第二次握手匹配
另有些功能需安装模块(不常用)
1.#...-p tcp --tcp-flags SYN,ACK,FIN,RST ACK -m length --length 40:60
选出数据包长在40--60 byte的纯ACK包(打上标记QD处优先发出)
2.#iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 2/sec -j ACCEPT
#iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j DROP
此二句顺序使用表示只接收每秒2次的ping请求,超过丢弃(一个ping每秒发一ping包,可用多个ping 命令实现).
3.#iptables -t filter -A INPUT -m mac --mac-source 00:5E:3C:4B:28:E4 (PR FO IN三链可用)
4.# -m owner --uid/gid -owner userid/groupid 由哪个用户/用户组发出的包
# -m owner --cmd-owner squid 由squid命令发出的包
5.# -m physdev --physdev -in 具体指定网桥内的哪块物理网卡
6.#iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
常用于链的首位表若此数据包属于已知流或相关流则匹配常用于NAT网关FORWARD链第一条..
需要打补丁的功能(当然需要安装模块)
7.控制并发连接应用
#iptables -A FORWARD -i * -o * -p tcp --syn -m connlimit --connlimit-abve 5 -j DROP
限制并发数为5 默认-t filter 此处省略
注:-j REJECT 亦丢弃 但发ICMP给发包方通知 公网不用
#iptables -I FORWARD -s 192.168.1.189 -p tcp --syn --dport 80
-m connlimit --connlimit-above 3 --connlimit-mask 24 -j DROP
8.匹配限额
#iptables -t filter -A FORWORD -d 10.0.0.5 -m quota --quota 100000000 -j ACCEPT
#iptables -t filter -A FORWORD -d 10.0.0.5 -j DROP
此二句顺序使用限制单个IP下载量
#iptables -I FORWARD -s 192.168.1.189 -p tcp --dport 80 -m quota --quota 500 -j DROP
#iptables -I FORWARD -s 192.168.1.189 -p tcp --dport 80 -m quota --quota 500 -j ACCEPT
9.#iptables -t filter -A FORWORD -d 10.0.0.9 -m random --average 1 -j DROP
去往10.0.0.9的包丢率为1% linux模拟网络延迟功能
10.封杀BT类P2P软件
#iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
#iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP
#iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
11.CDN对下载的限制示例
#iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 5 -j DROP
#iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS
-update --seconds 60 --hitcount 30 -j REJECT
同一IP允许5个并发链接 60秒内限制30次
自定义子链
子链的应用平常工作中尚未用到,以下培训时针对子链应用的一脚本.
#iptables -t filter -N/-X 链名(自定) 新链的创建/删除
#!/bin/sh
mychain=BLACK_IP
conf=/root/black_list
if ! iptables -t filter -L $mychain >/dev/null 2>&1;then
iptables -t filter -N $mychain 新建子链
iptables -t filter -I INPUT -j $mychain 在INPUT链中加子链
iptables -t filter -I FORWARD -j $mychain
iptables -t filter -F $mychain
for ip in `cat $conf`;do 此循环定义子链中的规则
iptables -t filter -A $mychain -s $ip -j DROP
done
fi
由于篇幅问题,对于表NAT Mangle的解析只能留到下一篇再作介绍.