iptables动作总结


ACCEPT动作:

将数据包放行,进行完此处理动作后,将不再比对当前链的其它规则,直接跳往下一个规则链。

范例如下:

#新增自定义链TEST_ACCEPT
iptables -t filter -N TEST_ACCEPT
#新增自定义链TEST_ACCEPT2
iptables -t filter -N TEST_ACCEPT2
#在INPUT链中引用TEST_ACCEPT,在TEST_ACCEPT链中引用TEST_ACCEPT2
iptables -t filter -I INPUT -j TEST_ACCEPT
iptables -t filter -I TEST_ACCEPT -j TEST_ACCEPT2
#在TEST_ACCEPT2增加如下规则
iptables -t filter -A TEST_ACCEPT2 -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j ACCEPT
#在TEST_ACCEPT增加如下规则
iptables -t filter -A TEST_ACCEPT -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j REJECT

 测试:未加上面规则前,http://192.168.249.149:30180服务能够正常访问,加上上面规则后经测试还是能正常访问,效果入下图所示:

总结:这就说明自定义链TEST_ACCEPT2匹配规则 192.168.249.149 -p tcp -m tcp --dport 30180后执行ACCEPT动作,执行完ACCET动作后将不再比对当前链的(INPUT->TEST_ACCEPT->TEST_ACCEPT2)其它规则,直接跳往下一个规则链,TEST_ACCEPT链的第二条规则没机会匹配。  

REJECT动作:

拦阻该数据包,并传送数据包通知对方,可以传送的数据包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个数据包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

范例如下:

iptables -t filter -I INPUT -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j REJECT

 测试:

DROP动作:

丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

范例如下:

iptables -t filter -I INPUT -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j DROP

 测试:

 总结:

DROP表示丢弃,REJECT表示拒绝,REJECT和DROP动作效果类似,只不过REJECT拦阻该数据包后会传送数据包通知对方,REJECT表达的意思好像更坚决一点。

REDIRECT动作:

将包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。 这个功能可以用来实作通透式porxy 或用来保护 web 服务器。例如:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

MASQUERADE动作:

改写数据包来源 IP为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则链(和ACCEPT动作一致)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨号连接时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。范例如下:linux基础

iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000 

总结:使用MASQUERADE动作可以不指定网卡,它可以自动根据目标地址选择出口网卡地址作为伪装的源地址,另外,使用MASQUERADE动作和ACCEPT、SNAT、DNAT动作的效果一致,都是进行完此处理动作后,直接跳往下一个规则链。

参考:https://serverfault.com/questions/869751/how-does-masquerade-choose-an-ip-address-if-there-are-multiple

另外可以使用ip route get 命令来确定伪装后将用作源地址的地址。

SNAT动作 

改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则链。范例如下:

iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000

DNAT动作 

改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规链。范例如下:

iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination
192.168.1.1-192.168.1.10:80-100

测试:自定义链C匹配规则后执行DNAT动作,执行完DNAT动作后将不再比对当前链的(A->B->C)其它规则,直接跳往下一个规则链,B链的第二条规则没机会匹配。  

RETURN动作

结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定义规则链看成是一个子程序,那么这个动作,就相当提早结束子程序并返回到主程序中。

测试:TEST_ACCEPT链第一条规则匹配后,将返回后INPUT链继续执行INPUT链剩下未比对的规则,即INPUT链的第2条规则到第四条规则直到匹配规则成功执行对应动作。 

MARK动作

将数据包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。范例如下:

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2

LOG动作

将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 配置文件,进行完此处理动作后,将会继续比对其规则。例如:

iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"

MIRROR动作

镜像数据包,也就是将来源 IP 与目的地 IP 对调后,将数据包送回,进行完此处理动作后,将会中断过滤程序。

QUEUE动作

中断过滤程序,将数据包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用,例如:计算联机费.......等。