いくつかのテストを実行しており、データベースにエラーが発生した場合はどうなるかをテストしたいと思います。私のテストと同じボックスで実行されており、次の内容がトリックを実行していないようです。
iptables -A INPUT -p tcp --dport 25262 -j DROP
iptables -A INPUT -p tcp --sport 25262 -j DROP
iptables -A INPUT -p tcp --dport 25262 -i lo -j DROP
iptables -A INPUT -p tcp --dport 25262 -s 127.0.0.1 -j DROP
私はデータベースプロセスを終了し、ファイルを移動し(データベースがクラッシュしたときに自動的に回復するため)、このようにテストを続行しようとしますが、これは悪いアプローチのようです。
ループバックポートをブロックする正しい方法は何ですか?
答え1
すべてのループバックトラフィックを削除するコマンドラインコマンド(lo0)
$ [sudo] iptables -I INPUT --dport 25262 -i lo -j DROP
説明する
-i lo DROP
iptablesは上から下にルールを評価し、「最初の一致勝利」の方法で動作するため、ルールが正しいことを確認する必要があります。-I
入れる代わりにトップに戻る-A
追加他のルールがループバックトラフィックを許可する前に一致するようにルールの一番下に追加します。たとえば、データベースがMySQLの場合、このルールも一致する可能性があります。
INPUT -p tcp --dport 3306 ACCEPT
したがって、次のコマンドを実行すると:
$ [sudo] iptables -A INPUT --dport 25262 -i lo -j DROP
^^^ Notice the difference
ルールは次のとおりです。
INPUT -p tcp --dport 3306 ACCEPT ---> this "wins" and request is accepted
INPUT --dport 25262 -i lo -j DROP
以下を実行して:
$ [sudo] iptables -I INPUT --dport 25262 -i lo -j DROP
最終ルールは次のとおりです。
INPUT --dport 25262 -i lo -j DROP ---> this "wins" and request is DROP'ed
INPUT -p tcp --dport 3306 ACCEPT
... all your other rules