![](https://habrastorage.org/getpro/habr/post_images/183/a58/8ac/183a588ac6c726317f52eea75c55d3ca.png)
このノートでは、iptablesでのREDIRECTの効果、その制限、および範囲について説明します。
iptablesとリダイレクト
REDIRECTアクションは、ホストを離れることなく 、同じシステム内で1セットのポートから別のポートにパケットをリダイレクトするように設計されています 。
REDIRECTは、natテーブルのPREROUTINGおよびOUTPUTチェーンでのみ機能します。 したがって、スコープは1つのポートから別のポートへのリダイレクトにのみ縮小されます。 ほとんどの場合、これは、ローカルネットワークのクライアントがポート80に接続し、ゲートウェイがパケットをローカルプロキシポートにリダイレクトするときに、透過プロキシに使用されます。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
ケース
デーモンの設定を変更せずに、iptablesを使用してリダイレクトすることによってのみアプリケーションポートを変更する必要があるとします。 新しいポートを5555、アプリケーションポート22とします。したがって、ポート5555から22にリダイレクトする必要があります。
リダイレクトおよびリモートクライアント
最初のステップは明白であり、上記の例と同じです。
iptables -t nat -A PREROUTING -p tcp --dport 5555 -j REDIRECT --to-port 22
ただし、ルールは外部クライアントに対してのみ機能し、アプリケーションポートが開いている場合にのみ機能します。
リダイレクトおよびローカルクライアント
iptablesを使用したホスト自体の以前のルールは機能しません。 localhostを含むパケットは、natテーブルに分類されません。 ケースをローカルマシンで動作させるには、natテーブルのOUTPUTチェーンにリダイレクトを追加する必要があります。
iptables -t nat -A OUTPUT -p tcp -s 127.0.0.1 --dport 5555 -j REDIRECT --to-ports 22
これで、ローカルクライアントもポート5555経由で接続できます。
リダイレクトおよびプライベートポート
この場合の意味は、左ポートを使用し、アプリケーションポートを閉じたままにすることですが、ポート22のINPUTチェーンでDROPルールを実行すると、5555も応答を停止します。 実際、トリックはINPUTチェーンでアプリケーションポートを開き、マングルでドロップすることです。
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j DROP
ルールの完全なセット
アプリケーションポートが閉じられている場合、ネットワークおよびローカルアクセスでリダイレクトします。
iptables -t nat -A PREROUTING -p tcp --dport 5555 -j REDIRECT --to-port 22 iptables -t nat -A OUTPUT -p tcp -s 127.0.0.1 --dport 5555 -j REDIRECT --to-ports 22 iptables -A INPUT -p tcp --dport 5555 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -t mangle -A PREROUTING -p tcp --dport 22 -j DROP iptables -P INPUT DROP