现在,我们准备根据连接设置防火墙规则。在以下示例中,"-m conntrack" 选项表示我们正在使用 conntrack 模块。这是 iptables 中非常重要的模块,它用于追踪连接,iptables 依赖于追踪信息来构建有状态防火墙。 “--ctstate ESTABLISHED,RELATED” 表示数据包是否属于 ESTABLISHED 或 RELATED 连接。 此规则允许属于现有连接的 TCP 数据包通过。
iptables -A FORWARD -p tcp -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT
上面的规则不包括 SYN 数据包,因为这些数据包不属于任何已建立的连接。我们需要让创建连接的包通过。因此,我们需要添加一条规则来接受传入的 SYN 数据包:
iptables -A FORWARD -p tcp -i eth0 --dport 8080 --syn \
-m conntrack --ctstate NEW -j ACCEPT
最后,我们将 FORWARD 链的默认策略设置为丢弃所有数据包。这样,如果数据包未被上述两条规则接受,它们将被丢弃。
请重写任务 3 中的防火墙规则,但这次我们将添加一条允许内部主机访问任何外部服务器的规则(这是任务 3 中未允许的)。 在你使用连接追踪机制写出规则后,请思考如果不使用连接追踪机制该如何做(你不需要实际实现这些规则)。基于这两套规则,请比较这两种不同的方式,并解释每种方法的优缺点。完成此任务后,请记得清除所有规则。