Q1:なぜブロックされていないのですか?

Q1:なぜブロックされていないのですか?

私はiptablesの専門家ではなく、修正する必要がある2つの奇妙な動作があります!

Q1:なぜブロックされていないのですか?

f2b-nginx-naxsi次のようなiptableルールを持つカスタムチェーンがあります。

$ sudo iptables -S f2b-nginx-naxsi
-N f2b-nginx-naxsi
-A f2b-nginx-naxsi -s 81.250.100.81/32 -j REJECT --reject-with icmp-port-unreachable #<== Here
-A f2b-nginx-naxsi -j RETURN

81.250.100.81私はパブリックIPなのでブロックする必要があります。

動作しません。ルールが間違っています!

チェーンからチェーンをロードする方法はINPUT次のとおりです。

sudo iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -p tcp -m multiport --dports 80,443 -j f2b-nginx-naxsi    #<== Here
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct
-A INPUT -j INPUT_ZONES_SOURCE
-A INPUT -j INPUT_ZONES
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Q2::80の代わりにSSHを使用するのがブロックされるのはなぜですか?

修理するため質問1私は前のルールを取り、INPUTチェーンの中に設定しました。
-I INPUT -s 81.250.100.81/32 -j REJECT --reject-with icmp-port-unreachable

Enterを押した後、機械の接続が切断されました。ハハ。
しかし、何らかの理由でブラウザでnginxをpingすることができます。
SSH(22)は終了しますが、標準のhttp接続(80)は終了しません。

よろしくお願いします。
;-)

答え1

トラブルシューティング手順:

  1. マルチポートiptablesモジュールがロードされていることを確認してください。

     lsmod | grep multiport
     # Should see something like xt_multiport or ipt_multiport in the output
    
  2. nginxサーバーが実際にポート80および/または443でリッスンしていることを確認してください。これはプロキシの背後に設定できます。

     sudo ss -tlnp | grep nginx
     # Should see nginx listed listening on one of those two ports
    

(修正済み)

2b。 Dockerホストのどのポートがnginxコンテナにマップされていることを確認してください。

    docker port <container_name>

This command should show which port(s) you need to use in your custom IPtables chain running on the container host.

答え2

いよいよ謎を解きました!

問題は私のiptableルールを無視するdockerで発生します。

Dockerコンテナに着信接続を削除するには、名前付きチェーンにルールを配置する必要がありますDOCKER-USER
チェーンはDocker自体によって生成され、これらのルールはDockerエンジンのルールよりも優先されます。

たとえば、特定のIPを禁止します。(例:Fail2banから)ポート443から:

sudo iptables -I DOCKER-USER -i eth0 -s <SPECIFIC_IP> -p tcp --dport 443 -j DROP

eth0外部インターフェースに変更)

  • ポートを設定することを忘れないでください。それ以外の場合、ルールはSSHポート(22)に適用され、自分自身が禁止されます。
  • INPUTDockerコンテナへのアクセスをブロックしようとすると、チェーンにルールを追加できません。
  • 呼び出しチェーンはDOCKERDockerコンテンツでのみ機能します。何も入れないでください。

関連情報