我应该首先在“规则集”中添加哪些 iptables 规则?

我应该首先在“规则集”中添加哪些 iptables 规则?

我正在按以下方式设置 iptables:

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP

我想添加以下规则:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED,NEW -j ACCEPT

sudo iptables -A INPUT -m iprange --src-range 192.168.0.101-192.168.0.193 -j DROP
sudo iptables -A OUTPUT -m iprange --dst-range 192.168.0.101-192.168.0.193 -j DROP

我听说在设置 iptables 时,可能会考虑规则集中规则的位置,以确保一切按预期正常工作,所以我想知道我应该首先添加什么,-m conntrack是“个”还是-m iprange“个”?

我想使用上述规则来做的事情是:

- DROP every INPUT
- except the ones needed by the connections ESTABLISHED at OUTPUT, so I can access internet normally.
- but, additionally, I want to DROP EVERY CONNECTION incoming from (and outcoming to) my local network

我希望从不同的人那里获得有关此问题的答案,以便真正确定该怎么做。

答案1

取决于你想要什么。如果你已经与你的范围建立了连接,192.168.0.101-192.168.0.193你是否希望它在你激活规则后继续工作?还是你想让它断开?

如果您要无条件地丢弃到该范围的数据包,则请先添加该数据包。

答案2

我总是RELATED,ESTABLISHED先添加规则(对于您的情况,请参阅下一段)。这会告诉内核停止处理与已建立连接相关的数据包(为什么要浪费时间检查已通过防火墙的连接中的数据包?)。此外,它还可以防止在设置 ssh 规则时阻止您的连接;)

您需要允许设备,如果您要默认使用DROP。否则,您计算机上的应用程序的连接将无法访问其自身上运行的服务。出于性能原因(至少在理论上),我通常将其添加-A INPUT -i lo -j ACCEPT为链中的第一个规则。

如果您也要默认DROP使用OUTPUT链(出口过滤),那么您还需要考虑该链的lo接口和RELATED,ESTABLISHED规则。出口过滤会变得有点棘手,因为您需要考虑仅允许特定端口的流量,或者允许按 IP 或范围出口(如@Michael Hampton 所暗示的)。

同样的考虑也适用于链条,但它与和链条FORWARD类似,因为您将有双向流量穿越该链条。INPUTOUTPUT除非您正在为连接到您计算机的另一个子网上的机器进行任何路由。否则,该FORWARD链将不会被使用。

相关内容