如何仅允许对机器发出的请求进行传入响应

如何仅允许对机器发出的请求进行传入响应

我设置 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 网络块。
  • 所有其他访问,无论是出站还是入站,都应该是不可能的。

相关内容