即使允许使用 smtp 和 dns,Sendmail 也不能与 iptables 一起使用

tom*_*tom 4 linux iptables sendmail

我在 Ubuntu 10.04 上安装了 sendmail,仅用于 phpmail()功能。这工作正常,除非 iptables 正在运行(我一直在sendmail myemailaddress@domain.com用来测试这个)。

我认为我已经允许 SMTP 和 DNS(我用来测试 iptables 规则的脚本如下,在我的版本中是我的主机名称服务器的实际 IP),但无济于事!

iptables --flush

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Postgres
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT

# Webmin
iptables -A INPUT -p tcp --dport 10000 -j ACCEPT

# Ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

# sendmail
iptables -A INPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

# DNS
iptables -A INPUT -p udp --sport 53 -s <nameserver1> -j ACCEPT
iptables -A INPUT -p udp --sport 53 -s <nameserver2> -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -s <nameserver1> -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -s <nameserver2> -j ACCEPT

iptables -A OUTPUT -p udp --dport 53 -d <nameserver1> -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -d <nameserver2> -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -d <nameserver1> -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -d <nameserver2> -j ACCEPT


iptables -A INPUT -j DROP

# Add loopback
iptables -I INPUT 1 -i lo -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

Pie*_*ier 9

目前你有:

iptables -A INPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

这使得:

  • 数据包到你的sendmail中,
  • 数据包从您的端口​​ 25 输出,但仅适用于已建立的连接(因此只有来自外部的连接)。

对于外发电子邮件,您需要发送邮件才能连接到外部世界。

所以你还需要这样的东西:

iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

请确保你不会成为一个开放的中继。

  • 很高兴我能帮助你!`postfix` 应该有相当合理的默认设置,所以我们的想法是不要打开太多。但是如果您的主机只需要能够发送电子邮件,而不需要接收电子邮件,您可以完全删除此规则以在防火墙级别进行保护:`iptables -A INPUT -p tcp --dport 25 -m状态 --state NEW,ESTABLISHED -j ACCEPT`。 (2认同)