iptables由4表、5链和用户在链内写入的各种规则所组成。(iptables(/etc/sysconfig/iptables /sbin/iptables))
1、表:容纳各种规则链;表是按照功能分的类,具体功能如下:
(1)raw表:用来决定是否对数据包进行状态跟踪。(不常用)
(2)mangle表:为数据包设置标记,有ACK、SYN、FIN、RST、PSH、URG等标记。(不常用)
(3)nat表:修改数据包的IP地址、端口等信息。(网关型防火墙常用)
(4)filter表:确定是否放行数据包。(常用)
2、链:容纳各种防火墙规则;链是按照时机分的类。
(1)input:处理入站请求包
(2)output:处理出站包(就是响应、应答包)
(3)forward:处理转发数据包,实现不同网段间的通信
(4)prerouting:在包做路由选择之前应用此链的规则
(5)postrouting:在数据包做路由选择之后应用此链的规则
3、LOG:在/var/log/messages文件中记录日志信息,然后将包传给下一条规则,防火墙规则的"匹配即停止"对于log操作来说是一个特例,因为log只是一种辅助动作,并没有真正处理包。
4、查询规则
iptables -nL INPUT --line-number(以数字形式查看filter表INPUT链中的所有规则,并显示规则序号)
iptables -t filter -L INPUT -vn (以数字形式详细显示filter表INPUT链的规则)
iptables -p icmp -h (查看ICMP类型)
5、例子
iptables -t filter -A INPUT -p tcp -j ACCEPT(在filter表的INPUT链中最后一个规则后面添加一个新的规则)
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT (在filter表INPUT链第二行插入规则,允许tcp的80端口通过)
iptables -D INPUT 3(删除filter表中INPUT链的第三条规则)
iptables -t raw -F(清空raw表中所有链内的规则)
iptables -F OUTPUT(清空filter表output链内所有规则)
iptables -A FORWARD ! -p icmp -j ACCEPT(除了icmp协议的数据包,别的协议的包都能转发)
iptables -A INPUT -p tcp --dport 20:23 -j ACCEPT(一般是主机型防火墙设置的,我们电脑的20到23端口可以被访问)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP (别人ping我主机的请求被丢弃,8代表请求)
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT (我ping别人时,回来的包被允许(一去一回才知道ping没ping通),0带表回来的icmp包)
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT(3也是代表请求,主机不可达,不常用)
iptables -A INPUT -s 0/0 -m state --state NEW -p tcp -m multiport --dport 123,110 -j DROP (这句意思为源地址是0/0的
NEW状态的的TCP数据包都禁止访问我的123和110端口)
iptables -A INPUT -s ! 172.20.89.0/24 -m state --state NEW -p tcp -m multiport --dport 1230,110 -j DROP ("!"号的意思 取反。就是除了172.20.89.0这个IP段的地址都DROP)
iptables -t nat -A PREROUTING -d 192.168.102.55 -p tcp --dport 90 -j DNAT --to 172.20.11.1:800 (-A PREROUTING 指定在路由前做的。完整的意思是在 NAT TABLE 的路由前处理,目的地为192.168.102.55 的 目的端口为90的我们做DNAT处理,给他转向到172.20.11.1:800那里去)
iptables -t nat -A POSTROUTING -d 172.20.11.1 -j SNAT --to 192.168.102.55 (-A POSTROUTING 路由后。意思为在 NAT TABLE 的路由后处理,凡是目的地为 172.20.11.1 的,我们都给他做SNAT转换,把源地址改写成 192.168.102.55 )
iptables -A INPUT -p tcp -s ip1/32 --dport 22 -j ACCEPT (允许SSH)
生效:
service iptables restart