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

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

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

如果他们要访问 gmail 的 SMTP 服务器(所有 IP 都在后面smtp.gmail.com),我只想允许在端口 587 上进行访问。有什么方法可以实现吗?

答案1

您可以使用-diptables 规则开关,使规则仅适用于提供的地址,然后阻止其他所有内容,例如

iptables -I OUTPUT -p tcp --dport 587 -j DROP
iptables -I OUTPUT -d smtp.gmail.com -p tcp -m tcp --dport 587 -j ACCEPT

应该可以满足您的要求。这首先会在 OUTPUT 链的开头插入一条 DROP all outgoing connections on port 587 规则。然后,它会在 OUTPUT 链的开头插入一条允许 smtp.gmail.com 端口 587 的规则。这可以允许连接到 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

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

答案2

您需要先允许 Gmail,然后才能拒绝访问。否则您将无法获得允许规则。

Google 可以使用其澳大利亚标准协会对于 Gmail 服务器,您需要允许所有阻止。您可能希望使用 来ipset处理所涉及的阻止。您还可能会发现他们的 SPF 记录为您的要求提供了不错的网络阻止列表。如果您reject,而不是drop传出请求,您的用户可能不会注意到一些缺失的阻止。

像这样的工具岸墙将允许您更轻松地实施策略。对于您的情况,我将采用传出 REJECT 策略,并且仅允许所需的流量传出。在这种情况下,您不需要特定规则来阻止对提交端口的访问。Shorewall 还可以轻松配置防火墙的日志记录。

答案3

我建议将这整个过程自动化,这样你就不必继续担心它了。

iptables -I OUTPUT -p tcp --dport 587 -j DROP应该包含在您的基本系统配置中,该配置可能位于您机器上的 /etc/sysconfig/iptables 中。

将此脚本放入编辑器并保存到某个位置,然后使用 chmod 将其标记为可执行。作为示例,我将其放在 /opt/sysadminscripts/iptables.smtp.gmail.sh 中

/bin/bash #!/bin/bash

IPLIST=$(主机 smtp.gmail.com | grep'有地址'| awk'{打印 $4}')

对于 $IPLIST 中的 x
        $(iptables -L -nv | grep“$x”>> /dev/null)
        如果 [[ “$?” -ne '0' ]]; 那么
                $(iptables -I OUTPUT -p tcp -m tcp -d“$x”--dport 587 -j 接受)
完毕

然后在系统 crontab 中添加类似这样的条目:

*/10 * * * * 根/opt/sysadminscripts/iptables.smtp.gmail.sh

确保该行不是 /etc/crontab 中的最后一行。如果该行没有终止换行符,它将不会运行。(我建议将注释保留为 /etc/crontab 的最后一行。)

答案4

你需要制定如下规则:

iptables -A FORWARD -p tcp -d smtp.gmail.com --dport 587 -j ACCEPT
iptables -A FORWARD -p tcp --dport 587 -j DROP

问题是您需要找到可能的 IP smtp.gmail.com。不建议在 iptables 中使用该名称。这是因为 iptables 不会识别 IP 名称映射更改。您可能需要不断检查 IP 更改并相应地更新规则。

FORWARD您需要根据要控制的流量在上面的示例中选择正确的链。

相关内容