私は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
トラブルシューティング手順:
マルチポートiptablesモジュールがロードされていることを確認してください。
lsmod | grep multiport # Should see something like xt_multiport or ipt_multiport in the output
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)に適用され、自分自身が禁止されます。
INPUT
Dockerコンテナへのアクセスをブロックしようとすると、チェーンにルールを追加できません。- 呼び出しチェーンは
DOCKER
Dockerコンテンツでのみ機能します。何も入れないでください。