iptables常用使用场景分析
0x 01 前言
iptables功能丰富,应用场景多样,本文介绍5种常用场景。
0x 02 准备工作
1.删除旧表和规则
在配置新的iptables规则前,最好先将旧的配置和规则清除:
iptables -F
清除filter表规则
iptables -X
清除自定义链
2.设置默认的chain策略
默认ACCEPT
iptables默认的chain策略为ACCEPT,放通所有流量,如果需要限制某些路径,再按需设置策略。
之前我一直觉得这样与ACL精神相违背,后来发现iptables的规则比我想象还要灵活很多,安全和易用可以兼得。下面的配置既可以保证安全,也可以避免起初在设置DROP策略时候,可能会由于人为失误等产生的无法连接的情况,维护起来也更为方便,删除策略不会对连通性产生风险。
具体策略如下:
如果是远程连接,需要先保证远程的shell的正常通信,在此默认使用ssh,且端口为22号,使用stateful防火墙特有的状态监测:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
放通ping的流量和本地回环流量
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
禁止其他的流量和流量转发
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
默认DROP
这种设计与ACL的deny all 精神相符合,不过用起来确实会麻烦一点,为了完成基础通信,需要更多的配置。具体配置如下。
如果是远程连接,需要先保证远程的shell的正常通信,在此默认使用ssh,且端口为22号:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
为了保证yum或者apt的正常使用,正常连接各个镜像源,需要将DNS服务端口53和HTTP的默认80端口打开:
iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
关闭filter三条默认链的所有流量,包括接收、转发和发出。
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
另外,在chain中要特别注意每条规则的上下顺序,默认是由上往下匹配。而且如果你的tar