我在 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