web-dev-qa-db-ja.com

SMTPをブロックするIptables

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でも同じことを試しましたが、何も...

1
Alex

ファイアウォールルールはDNSトラフィック(UDPポート53)を許可していません。したがって、DjangoアプリはDNSルックアップを実行してsmtp.gmail.comを見つけることができません:

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

これを修正するには、発信DNSクエリと着信DNS応答を許可するファイアウォールルールを記述します。

3
Michael Hampton

--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
0
erny