我设置 IP 表规则时只允许来自特定 IP 范围的输入流量。
-A INPUT -i eth0 -m iprange --src-range x.y.0.0-x.y.255.255 -j ACCEPT
-A INPUT -i eth0 -m iprange --src-range 0.0.0.0-255.255.255.255 -j DROP
在这条规则之后,对于不在我允许的范围内的IP,对我的机器的访问将被阻止。这很好。
但现在我想要这个规则的一个例外,如果我想从我的机器访问一些http web 链接,那么我希望继续进行。但没有其他办法解决这个问题,如果被阻止的 IP 尝试访问我的计算机上托管的 http Web 链接,则不应允许这种情况。
我尝试添加以下规则以及前面提到的规则
iptables -A INPUT -i eth0 -p tcp -m tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
但这不起作用,如果我在上面的状态列表中添加 NEW,那么我的机器可以从被阻止的 ip 访问 Web 链接,但这两种方式都有效,并且被阻止的 ip 也可以访问我不想要的 Web 链接。
答案1
iptables -A INPUT -i eth0 -p tcp -m tcp -m state --state 相关,已建立 -j 接受
你添加这个了吗后
-A 输入 -i eth0 -m iprange --src-range 0.0.0.0-255.255.255.255 -j DROP
?
如果是这样,规则就永远不会被触发。确保相关的、已建立的规则位于链的顶部。
答案2
我认为您在这里误解了常见的防火墙概念。您正在使用无状态传入防火墙规则来阻止和取消阻止传出连接。这并非不可能,但不合逻辑。使用 CIDR 网络比范围更简单,并且还应该使用出站过滤表。
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -s x.y.0.0/16 -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -o eth0 -d a.b.0.0/16 -j ACCEPT
iptables -A OUTPUT -j DROP
有了这些规则:
- xy0.0/16 网络块,应该可以访问您的计算机。
- 您的机器应该可以访问 ab0.0/16 网络块。
- 所有其他访问,无论是出站还是入站,都应该是不可能的。