![我应该首先在“规则集”中添加哪些 iptables 规则?](https://linux22.com/image/733734/%E6%88%91%E5%BA%94%E8%AF%A5%E9%A6%96%E5%85%88%E5%9C%A8%E2%80%9C%E8%A7%84%E5%88%99%E9%9B%86%E2%80%9D%E4%B8%AD%E6%B7%BB%E5%8A%A0%E5%93%AA%E4%BA%9B%20iptables%20%E8%A7%84%E5%88%99%EF%BC%9F.png)
我正在按以下方式设置 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
类似,因为您将有双向流量穿越该链条。INPUT
OUTPUT
除非您正在为连接到您计算机的另一个子网上的机器进行任何路由。否则,该FORWARD
链将不会被使用。