2015
11.08

iptables的使用

iptables
如上图所示,iptables会检查设定的规则,如果满足条件则执行对应的action,如果所有规则都不满足,则会执行默认policy。可能的policy有:accept, drop, reject。
只所以叫iptables,是因为在这个防火墙的链路(chain)里会涉及很多tables,常用的有filter,nat。如果只针对本机设定防火墙,一般只涉及filter。
通过对filter设置一系列规则,可以达到对进出的包进行限制的目的,比如drop或reject来自某个ip的包,还可以再进一步,drop或reject目标是本机某个端口的包。
(1)查看现有iptables设置:iptables -L -n
-n的意思是不要进行反查,如果不加则会列出端口对应的服务
结果:
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
上面显示目前还没有设定规则,3条是默认policy,分别针对input(进入本机的包),forward,output(从本机出去的包)。如果只针对本机,一般只常用input和output。
(2)清除现有规则
iptables -F
会清除掉所有规则,但默认policy不会变。
清除规则前要特别注意,必须查清楚目前的默认policy。比如,如果INPUT的默认policy是drop或reject,那么清除后将无法远程连接这台机器!所以这时候必须先将INPUT的默认policy改成ACCEPT,再做清除操作。
(3)设定默认policy
语法:iptables -P [INPUT, OUTPUT, FORWARD] [ACCEPT, DROP]
例如,将INPUT默认policy改成drop:iptables -P INPUT DROP
(4)设置规则
语法:iptables -AI [INPUT, OUTPUT, FORWARD] -i [lo, eth0, eth1] -o [lo, eth0, eth1] -p [tcp, udp, icmp, all] -s 来源IP -d 目标ip –dport 目标端口 –sport 来源端口 -j [ACCEPT, REJECT, DROP]
-A表示在现有的规则后添加一条新的,假如现在有4条规则,那么新的一条将会是第5条
-I表示插入一条规则在最前面,假如现在有4条规则,那么新的一条将会是第1条,原来的4条变成现在的第2-5条
来源ip和目标ip可以是单个ip(如192.168.1.1),也可以是子网(如192.168.1.1/24)
如果使用–dport 或 –sport,必须要有-p参数,且必须是tcp或udp。
例如,reject所有来自192.168.1.1的TCP包: iptables -A INPUT -p tcp -s 192.168.1.1 -j REJECT
(5)规则的顺序
规则顺序非常重要。因为iptables会按照顺序检查规则,如果顺序不当,会造成意外的结果。
比如: 我的80端口只想接收来自192.168.1.1的tcp包,不接收192.168.1.1/24子网里的其它机器的tcp包,来自其余机器的请求都接收。
假如INPUT的默认规则是ACCEPT。
正确的规则顺序是:
iptables -A INPUT -p tcp -s 192.168.1.1 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.1/24 -j REJECT
如果将以上2条规则颠倒,假设192.168.1.1给我的80端口发1个tcp包,由于满足颠倒后的第1条规则,它被reject掉,跟期望不符。
(6)保存
如果不保存,机器重启后规则会消失。
在ubuntu下使用iptables-persistent来保存。
安装:sudo apt-get install iptables-persistent
编辑完规则后保存规则:sudo dpkg-reconfigure iptables-persistent


Hit Counter by http://yizhantech.com/