尽管允许使用 smtp 和 dns,但 Sendmail 无法与 iptables 配合使用

尽管允许使用 smtp 和 dns,但 Sendmail 无法与 iptables 配合使用

我在 Ubuntu 10.04 上安装了 sendmail,仅用于使用 phpmail()函数。除非 iptables 正在运行(我一直在使用它来测试它),否则它工作正常。sendmail [email protected]

我认为我已经允许了 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

答案1

目前您有:

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

这使得:

  • 数据包发送到您的 sendmail,
  • 从端口 25 发出的数据包,但仅限于已经建立的连接(因此仅限来自外部的连接)。

对于发送电子邮件,您需要您的 sendmail 能够连接到外界。

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

iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

请确保您不会成为开放中继。

答案2

我假设您将连接到中继(智能主机)来发送邮件,并且不需要任何传入邮件。如果不是,则需要做更多工作。自动化系统往往没有配置良好的电子邮件服务,这可能导致其邮件被丢弃或发送到垃圾邮件桶。

您可能希望使用 conntrack 来处理已建立的连接。这可以简化其余规则,因为您只需要在其余规则中担心新连接。

iptable -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptable -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

您的 ping 条目之前的规则看起来不错。

您的规则需要涵盖传出流量

iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

您的 ICMP 规则似乎不完整

iptables -A INPUT -p icmp --icmp-type 3/4 -j ACCEPT 
iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT 
iptables -A OUTPUT -p icmp --icmp-type 3/4 -j ACCEPT 
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT 
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT 

相关内容