私はiptablesにかなり慣れていないので、ルールセットを適切に構成したかどうかを調べようとしています。 -P INPUT ACCEPT私の質問の一部に関して、これが適用したいルールのコンテキストで有効かどうかを判断しようとしています。詳細については、以下をご覧ください。
次のルールを含むファイルでiptables-restoreを使用しました。基本的に、ループバックトラフィック、確立された/関連する接続、SSH、およびHTTPを許可しようとしています。他のすべてのトラフィックは拒否する必要があります。
*filter
:fail2ban-ssh - [0:0]
# Input chain rules
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
# Reject all other inbound traffic
-A INPUT -j REJECT
# Output chain rules
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# Forward chain rules
-A FORWARD -j REJECT
# fail2ban-ssh chain rules
-A fail2ban-ssh -s 146.0.77.33/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -s 62.75.236.76/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN
COMMIT
iptables -Sを実行すると、次の出力が表示されます。
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A fail2ban-ssh -s 146.0.77.33/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -s 62.75.236.76/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN
Iptablesについて少し読んだところ、最初の数行(例: "-P INPUT ACCEPT")は基本的に、他のルールが適用されない場合のデフォルトのアクションを意味することを理解していますトラフィックを受け入れることです(この場合、入力、転送、出力)。
この場合、次の行をルールファイルに明示的に記述して、iptablesを再度復元する必要がありますか
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
この質問全体を読んでくださった方、ありがとうございました!少し長いですが、シナリオを適切に説明するには、上記の詳細をすべて含める必要があると思いました。
実際に尋ねた質問に答えるために、ポリシーは通常のiptables-save
ファイルに表示されますが、-P
ルールの引数としては表示されません。
代わりに、次のように、カスタムチェーンの宣言とともに、ポリシーとともに最初に表示する必要があります。
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:fail2ban-ssh - [0:0]
ユーザー定義チェーンにはポリシーがないため、カスタムチェーンのハイフンにはポリシー引数がありません。
ファイアウォールが記述されている状態で、すべてのポリシーをDROP
に変更すると、サーバーでDNSルックアップを実行するのが困難になり、多くのことが予期せず失敗することに注意してください。
ちなみに、私はあなたのルール(INPUT
チェーン)を fff にダンプして、簡略化されたバージョンを抽出しました。誰が接続を確立できるかを示すだけです。
ACCEPT all -- 127.0.0.0/8 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 dports: 22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 dports: 80
DROP tcp -- 146.0.77.33/32 0.0.0.0/0 dports: 22
DROP tcp -- 62.75.236.76/32 0.0.0.0/0 dports: 22
DROP all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Fail2banアプローチが実際に壊れていることがわかります。2番目のルールはすべてのssh接続を受け入れます。ルール番号4と5(DROPルール)は隠されています(到達できません)。
デフォルトのポリシーはACCEPT
であると仮定します。これは、簡略化されたリストの最後のルールとして見ることができます。ご覧のとおり、ここではINPUT
のデフォルトのポリシーは重要ではありません。これは、最後から2番目のルールが、以前のルールに一致しなかったすべてのパケットをすでにドロップしているためです。これはあなたの-A INPUT -j REJECT
ルール。
基本的に、fail2banブロック以外の現在のルールは、ファイアウォールがないことを意味します。
次のシナリオでファイアウォールがどのように応答するかを検討してください:
ローカル接続のTCP接続をリッスンしているMySQLまたはその他のデータベースを実行していますが、リモート接続は必要ありません。
その後、悪意のあるリモートマシンがポート3306
でmysqlサーバーにアクセスしようとします。
fail2banがそれらをブロックしていないと仮定すると、問題は、既存のルールのいずれかが役立つかどうかです。どうですか:
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-いいえ-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-いいえ-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-いいえなど...何も一致せず、接続をドロップするため、INPUTポリシーが適用され、接続が受け入れられます。
次に、同じシナリオを検討しますマシンで実行されている他のすべてのサービスについて-fail2banがブロックされていない場合、サーバーはそれらを許可します。
そうです、iptables-restore
ルールに追加することをお勧めします
-P INPUT DROP
# Any unmatched packets on FORWARD chain will be dropped
-P FORWARD DROP
注:iptablesルールは通常、再起動後も存続しませんが、ポリシーは存続します。この場合、サーバーの再起動後にロードされた対応するACCEPTルールがない場合、上記のルールはSSHセッションをロックアウトします。つまり、このポリシーによってロックアウトされます。
個人的には引き続きドロップポリシーを使用しますが、-P INPUT ACCEPT
を保持して代わりに使用する人もいます。
-A INPUT DROP
原則として、「準」ポリシーとしてINPUTチェーンの最下部にあります。これに注意し、ファイルウォールを変更するときはルールを再読み取りし続ける必要がありますが、再起動時にルールを復元するようにiptablesを設定しなかった場合、この配置ではマシンに戻ることができます。