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に上記と同じルールを追加しました。また、SMTPの--dport
/--sport
を切り替えてみました。 this および this の質問(ポート25と587の両方)のようにルールを設定しても、どちらも役に立ちませんでした。ドキュメントに記載されているという理由だけで、ポート1025でも同じことを試しましたが、何も...
ファイアウォールルールはDNSトラフィック(UDPポート53)を許可していません。したがって、DjangoアプリはDNSルックアップを実行してsmtp.gmail.com
を見つけることができません:
gaierror at /contact/mailto [Errno -2] Name or service not known
これを修正するには、発信DNSクエリと着信DNS応答を許可するファイアウォールルールを記述します。
--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