MySqlサーバーに「小さな」セキュリティを追加したいと思います。
ポート330を開いたいのですが、内部目的(localhost)としてのみ使用し、3306にリダイレクトされている別のポート(12345など)を開きたいです。
したがって、「12345からのすべての着信トラフィックは3306にリダイレクトされますが、3306の外部からの着信トラフィックはオフになります」というeth1インターフェイスにのみiptableパスを追加する必要があります。
3306で外部着信トラフィックをオフにする方法は?
答え1
あなたのすべての要件をよく理解したら、次のことを行います。
# assuming your network interface is named `eth1` as per your OP example
iptables -t raw -A PREROUTING -i eth1 -p tcp --dport 3306 -j DROP
iptables -t nat -A PREROUTING -p tcp --dport 12345 -j REDIRECT --to-port 3306
最初のコマンドはeth1
TCP ポート 3306 からの着信接続をディセーブルにします。
2番目のコマンドは、ローカルポート12345に着信するすべての接続をローカルポート3306にリダイレクトします。
eth0
、、、eth1
などと呼ばれる複数のインタフェースがあり、eth2
それらをすべてブロックしたい場合は、上記eth+
の最初のコマンドで指定すると(プラス記号を参照)、インタフェースを取得します。それ以外の場合は、オプションで特定のインターフェイスのみをブロックできます。各インターフェイスは、最初のコマンドを一度使用してブロックする必要があります。
上記の2つのコマンドは要求された動作を達成するために必要なコマンドであり、全体的な要件に応じて十分です。
ただし、より一貫した経験を得るには、追加のオプション構成を使用することをお勧めします。
iptables -t nat -A OUTPUT -o lo -p tcp --dport 12345 -j REDIRECT --to-port 3306
これはリダイレクトされます。地元の同じローカルコンピュータからポート12345を介してmysqlに接続できるように、ローカルポート12345からローカルポート3306への接続を開始します。
最後に、重要な注意-A
、コマンドオプションの記憶iptables
追加したがって、追加された新しいルールよりも優先してルールを妨げるルールのルールはすでに存在します。
したがって、iptablesコマンドを使用しようとすると、ある時点で関連テーブルを消去する必要があり、-F
オプションを使用して次のようにこれを実行できます。
iptables -t raw -F PREROUTING
iptables -t nat -F PREROUTING
# and possibly also
iptables -t nat -F OUTPUT
# if you also used the additional advised commmand
一方、次のコマンドを明確に覚えておいてください。みんなこのテーブルに存在するルールには、他のファイアウォールによって存在する可能性があるルールが含まれています。特定のルールを選択的に削除するより細かいコマンドがありますが、これはiptablesの設定全体によって異なります(ここに示されている2つの単純なルールよりも複雑な場合)。
したがって、常に初期設定が何であるかを最初に確認する必要があります。次のように、-L
ieオプションを使用してこれを実行できます。iptables
iptables -t raw -nL PREROUTING
iptables -t nat -nL PREROUTING
# and possibly also
iptables -t nat -nL OUTPUT
# if you also used the additional advised commmand
もちろん、ルールを追加するときはいつでもそれを使用してテーブルの現在の状態を確認できます。次に、v
オプション(図を参照)を追加して、-nvL
時間の経過とともにネットワークトラフィックと一致する(または一致しない)ルールカウンタを表示できます。