除一台主机外,使用 iptables 阻止 SMTP?

jam*_*ieb 5 iptables

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

本质上,我想要一个完全开放的服务器,而不会将它变成垃圾邮件中继。有什么建议?谢谢!

Eva*_*son 12

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

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

iptables -A INPUT -p tcp --dport 25 -s ! x.x.x.x -j DROP
Run Code Online (Sandbox Code Playgroud)

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

iptables -A INPUT -p tcp --dport 25 -s x.x.x.x -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j DROP
Run Code Online (Sandbox Code Playgroud)

第一种方法具有使用单一规则的经济性,并且很容易在视觉上解析,因为它都是独立的。第二个更容易添加额外的地址。

将源地址替换为“xxxx”。我怀疑你真的想要不止一次的来源,但你可以弄清楚。(您的 LAN 上可能有机器或您想与之交谈的其他客户端——但也许不是。)

(希望您在 INPUT 链的顶部有规则,以允许建立的连接缩短链的其余部分并且只是 ACCEPT。除了初始握手符合上述规则之外,您真的什么都不想要。)

显然,将这​​些规则保存在您的发行版使用的任何 iptables 状态持久设计中。

编辑:谢谢,womble。

  • 上面的单行语法已被弃用,以支持将否定 (!) 移动到整个参数的前面,而不仅仅是像这样的参数值: iptables -A INPUT -p tcp --dport 25 !-s xxxx -j 删除 (2认同)