iptables Debian Linuxで送信SMTPを許可する方法


13

OUTPUTチェーン(iptables -P OUTPUT ACCEPT)上のすべてのトラフィックを許可することを選択した場合、メールは正常に送信されます。これらのルールでサーバーをロックダウンすると、送信メールが機能しなくなります。しかし、他のすべては動作しますが、これは奇妙です。

私の送信メールが送信されないようにする何かがここにありますか?私は困惑し、これらのルールを何度も見て、多くの異なるバージョンを試しました。

 iptables -F
 iptables -P INPUT DROP
 iptables -P FORWARD DROP
 iptables -P OUTPUT DROP


 iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT

 iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT  -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT

 iptables -A OUTPUT -p udp  --dport 53 -j ACCEPT
 iptables -A INPUT -p udp  --sport 53 -j ACCEPT

 iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
 iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT


 iptables -N LOGGING
 iptables -A INPUT -j LOGGING
 iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
 iptables -A LOGGING -j DROP

回答:


18

トラフィックを許可するルールはありますが、リターントラフィックを許可するルールはありません。

私はあなたがこれらの2つのルールが-A INPUT代わりになることを意図していたと推測しています:

iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

ただし、リターントラフィックを許可する方法として送信元ポートを使用することは、システムを保護するための悪い方法です。誰かがしなければならないのは、これらのソースポートの1つを使用するだけで、ファイアウォールルールセットは役に立たなくなります。

より良いアイデアは、すべての-A INPUT ... --sportルールを削除し、代わりにこの単一のルールのみを使用することです。

iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

このルールが機能する方法は、システムがアウトバウンド接続を作成するときに、カーネルが接続を追跡テーブルに記録することです。次に、リモートシステムからのパケットが戻ってくると、それらのパケットが追跡テーブルの接続に関連付けられているかどうかを確認します。ビットは直接セッションに関連するトラフィックを可能にするものです。これは、ストリームに戻ってくるTCPパケットになります。 の
ESTABLISHED
RELATEDビットは、接続に関連しているが、接続自体の一部ではないトラフィックを通過させます。これは、「ICMPがフラグメント化できない」などのICMPパケットのようなものです。これらのパケットはTCPストリームの一部ではありませんが、ストリームを存続させるために非常に重要です(ルールセットがカバーしていない別の問題であり、これがないと奇妙な接続の問題や損失が発生します)。

このルールはUDPトラフィックに対しても機能しますが、UDPはステートレスであるため、まったく同じではありません。代わりに、カーネルは出て行くUDPパケットを追跡する必要があり、UDPパケットが同じホスト/ポートの組み合わせに戻ってきて、短い時間枠内にある場合、それらは関連していると仮定します。


返信いただきありがとうございます。送信SMTP接続のみを行うため、トラフィックを戻そうとは思わないでしょうか?INPUTチェーンにルールを追加すると、SMTPバックを許可することになると考えていました。これは、メールを送信するために外部SMTPホストに接続するだけで必要なWebサーバーです。...thx!
916ネットワーク

リターントラフィックを戻さない場合、システムはTCPおよびSMTPプロトコルが使用するすべての「データを取得しました」メッセージをどのように受信しますか?
パトリック

それは理にかなっている。私はあなたのルールを追加しましたが、完全に機能しました。答えに感謝します!投票しようとしたが、評判が足りないと言う(Unix StackExchangeの新機能)
916ネットワーク

そのルールがどのように機能するかの説明を追加しました。
パトリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.