Iptables - 面临允许特定端口和阻止其他端口的问题

Iptables - 面临允许特定端口和阻止其他端口的问题

我尝试阻止除 22(ssh)、80(http)、443(https) 之外的所有端口。我当前的输入规则是这些。

> iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
DROP       all  --  anywhere             anywhere            

它应该接受 http 和 https 端口,然后阻止其他所有内容。但它阻止了一切。例如,当我尝试访问使用端口 80 和 443 的 facebook 时,它不起作用。我无法访问脸书。我现在应该怎么做?

我也这样尝试过。允许提到的端口并进行政策下降,虽然我不确定。同样的情况也会发生。

> iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

答案1

您创建的策略规则将允许外部要连接的主机你的TCP 端口 22、80 和 443,但不允许任何其他流量,包括您自己的流量!如果您确实想阻止该主机访问这三个端口以外的任何端口,并且不希望外部主机访问您的主机根本不,您可以将规则放在您的OUTPUT规则链上,而不是您的规则链上INPUT,然后在您的输入链上添加一条 CONNTRACK 规则,以防止您未启动的连接:

-P INPUT DROP
-P OUTPUT DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m udp -p udp --sport 53 -j ACCEPT
-A OUTPUT -i lo -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A OUTPUT -m udp -p udp --dport 53 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 443 -j ACCEPT

我通常允许环回适配器正常工作,因为某些内部程序可能需要它;另外,我会允许 DNS 流量,否则您将无法解析域名。

答案2

正如其他人在评论中指出的那样,您不需要像访问网站那样的 INPUT 规则。仅当您在本地这些端口上运行服务时才需要这些规则。如果您确实想限制出站流量,则需要将这些规则放入 OUTPUT 链中。

此外,您将失去所有连接,因为您正在删除所有入站流量。当您与网络服务器建立连接时,返回的数据(特别是 TCP 3 次握手)将由于您的包罗万象的丢弃而被丢弃在 INPUT 链中。要解决此问题,您需要添加一条规则以允许这些返回连接:

iptables -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

答案3

尝试update-alternatives --config iptables选择旧版本。暂时为我工作。

相关内容