Iptables 阻止 smtp

Iptables 阻止 smtp

Iptables 阻止了我的服务器上的出站和入站 smtp,尽管我指定它不阻止。我的策略是删除除指定内容之外的所有内容。将策略更改为接受所有内容“解决”了该问题,但我不想在此服务器上无限制地进行流量。规则设置如下(smtp 部分是最后一项):

# Flush all rules
iptables -F
iptables -X

# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow incoming and outgoing SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# Allow incoming HTTP/HTTPS
# HTTP
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
# HTTPS
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

# Allow outgoing SMTP
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state NEW,ESTABLISHED -j ACCEPT

# Finally, change policy to DROP ALL
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

它是一个网络服务器。Django 的send_mail功能是用来发送邮件的。设置如下:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587

我假设 587 用于电子邮件,所以我为端口 587 添加了与端口 25 相同的规则。我还尝试切换--dport/--sport以用于 smtp,但没有任何效果。设置规则如下问题(针对端口 25 和 587)也无济于事。我甚至尝试对端口 1025 进行同样的操作,只是因为文档中提到了这一点,但什么也没发生……

答案1

您的防火墙规则不允许 DNS 流量(UDP 端口 53)。因此,您的 Django 应用无法执行 DNS 查找来定位smtp.gmail.com

gaierror at /contact/mailto [Errno -2] Name or service not known

为了解决此问题,请编写允许传出 DNS 查询和传入 DNS 响应的防火墙规则。

答案2

难道 --sport 和 --dsport 应该反过来吗?

# Allow outgoing SMTP
iptables -A OUTPUT -o eth0 -p tcp --dport 587 -m state --state NEW,ESTABLISHED -j A
iptables -A INPUT -i eth0 -p tcp --sport 587 -m state --state ESTABLISHED -j ACCEPT

相关内容