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
トラフィックを許可するルールはありますが、戻りトラフィックを許可するルールはありません。
代わりに、これらの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
ルールを削除し、代わりにこの1つのルールのみを使用することです。
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
このルールが機能する方法は、システムがアウトバウンド接続を確立すると、カーネルがその接続をトラッキングテーブルに記録することです。次に、リモートシステムからのパケットが戻ってくると、それらのパケットがトラッキングテーブル内の接続に関連付けられているかどうかを調べます。ESTABLISHED
ビットは、セッションに直接関連するトラフィックを許可するビットです。これは、TCPパケットがストリームに戻ってくることになります。RELATED
ビットは、接続に関連しているが、接続自体の一部ではないトラフィックを通過させます。これは、「ICMPがフラグメント化できない」などのICMPパケットのようなものです。これらのパケットはTCPストリームの一部ではありませんが、ストリームを存続させるために非常に重要です(これもルールセットではカバーされていないことであり、これがないと奇妙な接続が表示されません)問題と損失)。
このルールはUDPトラフィックでも機能しますが、UDPはステートレスであるため、まったく同じではありません。代わりに、カーネルは発信されるUDPパケットを追跡する必要があり、UDPパケットが同じホスト/ポートの組み合わせで戻ってきたときに、それらが関連していると短時間で判断します。