使用 iptables 来阻止除一个主机之外的 SMTP?

使用 iptables 来阻止除一个主机之外的 SMTP?

我有一台服务器,既用作邮件服务器,又用作 Web 服务器。我想使用 iptables 允许除传入端口 25 之外的所有传入和传出连接。我只希望一个远程主机能够连接到端口 25(以便中继邮件)。

本质上,我想要一个开放的服务器,但不想把它变成垃圾邮件中继站。有什么建议吗?谢谢!

答案1

这听起来像是一个相当简单的要求。话虽如此,我仍然不太愿意告诉某人将他们的 SMTP 服务器配置为完全开放的中继。即使你限制了机器的传入连接,你也应该使用某种身份验证来控制中继。即使是消费者 ISP 也不再允许从其网络内部进行未经身份验证的中继。

假设您的 INPUT 链设置为“ACCEPT”策略,并且当前允许新传入的数据包从链的末尾掉下来,只需执行以下操作:

iptables -A INPUT -p tcp --dport 25 -s ! x.x.x.x -j DROP

为了完整起见,我最初的答案如下:

iptables -A INPUT -p tcp --dport 25 -s x.x.x.x -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j DROP

第一种方法经济实惠,只需使用一条规则,而且非常容易进行可视化解析,因为所有规则都是独立的。第二种方法更容易添加其他地址。

将源地址替换为“xxxx”。我怀疑您确实需要不止一个源,但您可以弄清楚。(您可能在 LAN 上有一些机器或其他想要与之通信的客户端 - 但也可能没有。)

(希望您在 INPUT 链的顶部有规则,以允许已建立的连接快捷方式访问链的其余部分并仅接受。除了初始握手符合上述规则之外,您真的不想要任何东西。)

显然,无论您的发行版使用什么 iptables 状态持久装置,都请将这些规则保存起来。

编辑:谢谢,womble。

答案2

如果您需要允许更多地址,这样的事情更具未来性。

iptables -A INPUT -p tcp --dport 25 -s x.x.x.x -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j DROP

从该策略过渡到默认 DENY 策略也更容易,这始终是一件好事。

此外,大多数邮件服务器都允许您定义允许中继的地址列表,这可以增加另一层保护。您没有说明您使用的是哪个邮件服务器,但它们都应该具有此功能。

相关内容