専用ホスト サーバーで 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 アドレスに置き換えます)