iptables:只允许端口上的连接到“安全”主机

Wan*_*tIt 5 iptables

我有一台 centos 机器,并且希望只允许到某些远程机器的端口 587 的出站连接,并丢弃试图连接到所有其他主机的数据包。

如果他们要访问 gmail 的 SMTP 服务器(后面的所有 IP smtp.gmail.com),我只想允许访问端口 587 。有没有办法实现这个?

use*_*517 7

您可以使用-d切换到 iptables 规则,这使规则仅适用于提供的地址,然后阻止其他所有内容,例如

iptables -I OUTPUT -p tcp --dport 587 -j DROP
iptables -I OUTPUT -d smtp.gmail.com -p tcp -m tcp --dport 587 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

应该做你想做的。这最初将 DROP 端口 587 规则上的所有传出连接插入到 OUTPUT 链的开头。然后它将 smtp.gmail.com 端口 587 的允许规则插入到 OUTPUT 链的开头。这具有允许连接到 smtp.gmail.com:587 并阻止端口 587 上的所有其他内容的效果,例如

iptables -L OUTPUT -n
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            173.194.66.109      tcp dpt:587
ACCEPT     tcp  --  0.0.0.0/0            173.194.66.108      tcp dpt:587
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:587
Run Code Online (Sandbox Code Playgroud)

请注意, smtp.gmail.com 解析为两个 IP 地址,这就是上面有两个 ACCEPT 规则的原因。该名称仅在规则添加到内核时解析一次,因此如果地址发生更改,则与 gmail 的连接也将被阻止,您需要重新加载规则。