iptables 配置详解
常用命令:
iptables -A 将一个规则添加到链末尾
iptables -D 将指定的链中删除规则
iptables -F 将指定的链中删除所有规则
iptables -I 将在指定链的指定编号位置插入一个规则
iptables -L 列出指定链中所有规则
iptables -t nat -L 列出所有NAT链中所有规则
iptables -N 建立用户定义链
iptables -X 删除用户定义链
iptables -P 修改链的默认设置,如将iptables -P INPUT DROP (将INPUT链设置为DROP)
|
常见设置参数介绍:
--dport 指定目标TCP/IP端口 如 –dport 80
--sport 指定源TCP/IP端口 如 –sport 80
-p tcp 指定协议为tcp
-p icmp 指定协议为ICMP
-p udp 指定协议为UDP
-j DROP 拒绝
-j ACCEPT 允许
-j REJECT 拒绝并向发出消息的计算机发一个消息
-j LOG 在/var/log/messages中登记分组匹配的记录
-m mac –mac 绑定MAC地址
-m limit –limit 1/s 1/m 设置时间策列
-s 10.10.0.0或10.10.0.0/16 指定源地址或地址段
-d 10.10.0.0或10.10.0.0/16 指定目标地址或地址段
-s ! 10.10.0.0 指定源地址以外的
|
配置Filter表防火墙
1.查看防火墙的当前配置:
$ iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination
Chain FORWARD (policy ACCEPT) target prot opt source destination
Chain OUTPUT (policy ACCEPT) target prot opt source destination
|
如果没有指定对数据包使用特定规则,防火墙会执行默认设置。从上述查询结果中可以看出,三个链的默认匹配规则都是ACCEPT,即允许数据包通过。DROP为放弃数据包。
修改链的策略
$ iptables -P FORWARD DROP
|
2.添加防火墙规则
对某个IP进行过滤
$ iptables -A INPUT -s 10.108.13.2 -j DROP
$ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 10.108.13.2 anywhere
|
对部分子网的特定协议过滤
$ iptables -A INPUT -s 10.108.13.0/24 -p tcp -j DROP
$ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 10.108.13.2 anywhere DROP tcp -- 10.108.13.0/24 anywhere
|
对特定服务进行过滤
$ iptables -A INPUT -s 10.108.14.0/24 -p tcp --dport 25 -j DROP
$ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 10.108.13.2 anywhere DROP tcp -- 10.108.13.0/24 anywhere DROP tcp -- 10.108.14.0/24 anywhere tcp dpt:smtp
|
链式匹配
这时如果10.108.13.3用户想访问SMTP服务,因为防火墙的规则无法访问。这是添加一个允许过滤的规则
$ iptables -A INPUT -s 10.108.13.3 -j ACCEPT
$ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 10.108.13.2 anywhere DROP tcp -- 10.108.13.0/24 anywhere DROP tcp -- 10.108.14.0/24 anywhere tcp dpt:smtp ACCEPT all -- 10.108.13.3 anywhere
|
虽然进行了如上配置,但是10.108.13.2依旧无法访问服务器的SMTP服务。这是因为内核是从顶到底顺序读取链配置的,并且对第一条匹配的配置执行。第一条规则不匹配10.108.13.3。顺序匹配第二条规则,匹配成功,丢弃数据包(这时还未匹配到第四条规则)。
解决方案:将第四条规则加到第二条规则的前。
$ iptables -D INPUT 4
$ iptables -I INPUT 2 -s 10.108.13.3 -j ACCEPT
$ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 10.108.13.2 anywhere ACCEPT all -- 10.108.13.3 anywhere DROP tcp -- 10.108.13.0/24 anywhere DROP tcp -- 10.108.14.0/24 anywhere tcp dpt:smtp
|
不允许ICMP通信
$ iptables -I INPUT -p icmp -j DROP
$ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP icmp -- anywhere anywhere DROP all -- 10.108.13.2 anywhere ACCEPT all -- 10.108.13.3 anywhere DROP tcp -- 10.108.13.0/24 anywhere DROP tcp -- 10.108.14.0/24 anywhere tcp dpt:smtp
|
3.清除现有的防火墙规则:
清除预设表filter中的所有规则链的规则
清除预设表filter中使用者自定链中的原则
保存防火墙设置
$ /etc/init.d/iptables save 或 $ service iptables save
|