ポート 443 から 8443 へのリダイレクトが Tomcat インスタンスで機能しません

ポート 443 から 8443 へのリダイレクトが Tomcat インスタンスで機能しません

専用ホスト サーバーで Ubuntu ヘッドレス サーバー 18.04 を使用しています。ホストには外部ファイアウォールがあり、ポート 8443、443 (tcp) を開きました。Ubuntu サーバーでは iptables を使用しており、テーブル nat でポート 443 を 8443 にリダイレクトしました。

iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-ports 8443

また、受信ポート 443 と送信ポート 8443 を開きました。

私はまだ example.com:8443 で tomcat インスタンスにアクセスでき、問題はありませんが、example.com は応答しません。iptables で調べても、ドロップ パケットは見当たりません。私の tomcat インスタンスでは、server.xml を変更していません。コネクタは 8443 を listen します。どこに問題があるのか​​わかりません。専門家が問題を解決してくれることを願っています。

敬具

黒ひげ

答え1

ここで本当に必要なのは、ポート 443 で SSL ターミネーションを実行し、ポート 8443 で Tomcat にリクエストを渡すことができるリバース プロキシ (Nginx など) です。

SSL/TLS は複雑なので、SSL ハンドシェイクを処理して Tomcat アプリケーションにリクエストを送信するために IPTABLES に依存するのは良い考えではないと私は考えています。

実際に IPTABLES を使用する必要がある場合は、サービスに接続してopenssl、何が起こっているかを正確に調べてください。ここで出力を報告すると、さらに詳しいヘルプが利用できる場合があります。

openssl s_client -connect www.example.com:443

テーブルを使用していることが問題である可能性もありますnat。私の理解では、このテーブルのルールはリクエストがルーティングされている場合にのみ適用されます。を通して同じ IP アドレス上の別のポートにルーティングされるのではなく、サーバーにルーティングされます。

リバース プロキシを使用すると、このような複雑さが大幅に軽減され、さらに多くの機能 (レート制限、アクセス制御など) が提供されます。

答え2

これは、Tomcat がどのインターフェースにバインドされているかによって異なります。ループバック インターフェースにバインドされている場合、これはまったく機能しません。

ほとんどの場合、REDIRECT ターゲットは、次のように指定されたインターフェースで使用されます。

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 8443

(eth1 を Tomcat が実際に実行されているネットワーク インターフェイスに置き換えます)

REDIRECT は DNAT ターゲットの便利な方法なので、上記が機能しない場合は次のような方法を試してください。

iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.0.0.1:8443

(10.0.0.1 をマシンの IP アドレスに置き換えます)

関連情報