序章

Apache Tomcat は、Javaアプリケーションを提供するために使用されるWebサーバーおよびサーブレットコンテナです。 これは、ジャカルタサーブレットジャカルタサーバーページ、およびジャカルタEEプラットフォームの他のテクノロジーのオープンソース実装です。

インストール時に、Tomcatは、パスワードやその他の機密データを含む、デフォルトで暗号化されていないトラフィックを処理します。 Tomcatのインストールを保護するために、 Let’s EncryptTLS証明書をすべてのHTTP接続に統合します。 TLSを組み込むために、構成された証明書を使用してリバースプロキシを設定できます。これにより、クライアントと安全にネゴシエートし、Tomcatに要求を渡します。

TLS接続はTomcat自体で構成できますが、Tomcatには最新のTLS標準とセキュリティ更新プログラムがないため、お勧めしません。 このチュートリアルでは、ApacheまたはNginxのいずれかを使用してこの接続を構成します。 これらは広く普及しており、十分にテストされていますが、Let’sEncryptの証明書の提供を自動化するソフトウェアは次のようになります。 certbot、Tomcatのサポートは提供していません。 ApacheとNginxの両方を試したい場合は、それぞれに個別のサーバーが必要になります。

前提条件

オプション1-リバースプロキシとしてのApacheの使用

セクションの前提条件

  • Ubuntu20.04にApacheをインストールする方法に従ってApacheをインストールします。 ドメインに仮想ホストファイルがあることを確認してください。
  • ドメインのサーバーにインストールされているTLS証明書を暗号化しましょう。 Let’s Encrypt Guide forApacheで概説されている手順に従います。 プロンプトが表示されたら、セキュアドメインへのリダイレクトを有効にします。

ステップ1-Apacheで仮想ホストを構成する

ドメインに基本的な仮想ホストを設定し、前提条件のセクションでLet’s Encryptを使用して保護したため、2つの仮想ホストを使用できます。 HTTPSトラフィックを構成するものだけを編集する必要があります。 それらを一覧表示するには、次のコマンドを実行してApacheconfigを表示します。

  1. sudo apache2ctl -S

出力は次のようになります。

Output
... VirtualHost configuration: *:443 your_domain (/etc/apache2/sites-enabled/your_domain-le-ssl.conf:2) *:80 your_domain (/etc/apache2/sites-enabled/your_domain.conf:1) ServerRoot: "/etc/apache2" Main DocumentRoot: "/var/www/html" Main ErrorLog: "/var/log/apache2/error.log" Mutex watchdog-callback: using_defaults Mutex rewrite-map: using_defaults Mutex ssl-stapling-refresh: using_defaults Mutex ssl-stapling: using_defaults Mutex ssl-cache: using_defaults Mutex default: dir="/var/run/apache2/" mechanism=default PidFile: "/var/run/apache2/apache2.pid" Define: DUMP_VHOSTS Define: DUMP_RUN_CFG User: name="www-data" id=33 Group: name="www-data" id=33

HTTPS構成を提供するファイルは /etc/apache2/sites-enabled/your_domain-le-ssl.conf. 次のコマンドを実行して編集するために開きます。 your_domain あなたのドメイン名で:

  1. sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf

ファイルは次のようになります。

/etc/apache2/sites-enabled/your_domain-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain.conf
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

強調表示された行をに追加します VirtualHost:

/etc/apache2/sites-enabled/your_domain-le-ssl.conf
...
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/
...

強調表示された3つのディレクティブは、HTTPヘッダー値を保持しながらTomcatと外部との間の双方向トラフィックを有効にするようにApacheに指示します。 終了したら、ファイルを保存して閉じます。

これで、トラフィックをTomcatインストールにプロキシするようにApacheに指示しましたが、その機能はデフォルトでは有効になっていません。

ステップ2–新しいApache構成のテスト

このステップでは、有効にします mod_proxymod_proxy_http、接続プロキシを容易にするApacheモジュールです。 次のコマンドを実行して、それらを有効にします。

  1. sudo a2enmod proxy
  2. sudo a2enmod proxy_http

次に、次のように入力して構成を確認します。

  1. sudo apache2ctl configtest

出力はで終わる必要があります Syntax OK. エラーがある場合は、変更した構成を確認してください。

最後に、ApacheWebサーバープロセスを再起動します。

  1. sudo systemctl restart apache2

これで、アクセス時にTLS証明書で保護されたTomcatインストールが表示されます。 your_domain Webブラウザから。 Nginxセクションをスキップして、Tomcatへのアクセスを制限する手順に従うことができます。

オプション2–リバースプロキシとしてのNginxの使用

セクションの前提条件

  • ドメインにサーバーブロックがインストールされたNginx。 このセクションでは /etc/nginx/sites-available/your_domain 例として。 Ubuntu 20.04にNginxをインストールする方法に従って、Nginxをセットアップできます。
  • ドメインのサーバーにインストールされているTLS証明書を暗号化しましょう。 Let’s Encrypt Guide forNginxで概説されている手順に従います。 プロンプトが表示されたら、セキュアドメインへのリダイレクトを有効にします。

ステップ1-Nginxサーバーブロック構成の調整

このステップでは、「前提条件」セクションで作成したドメインのサーバーブロック構成を変更して、NginxがTomcatを認識できるようにします。

次のコマンドを使用して、編集用の構成ファイルを開きます。

  1. sudo nano /etc/nginx/sites-available/your_domain

ファイルの先頭に次の行を追加します。

/ etc / nginx / sites-available / your_domain
upstream tomcat {
    server 127.0.0.1:8080 fail_timeout=0;
}

The upstream ブロックはTomcatに接続する方法を定義します。これにより、NginxはTomcatの場所を知ることができます。

次に、 server ポート443に定義されたブロック、の内容を置き換えます location / 強調表示されたディレクティブでブロックします。

/ etc / nginx / sites-available / your_domain
upstream tomcat {
    server 127.0.0.1:8080 fail_timeout=0;
}

server {
...
    location / {
        include proxy_params;
        proxy_pass http://tomcat/;
    }
...

これらの2行は、すべてのトラフィックが upstream と呼ばれるブロック tomcat、定義したばかりです。 また、プロキシプロセス中に保持されるすべてのHTTPパラメータを注文します。 終了したら、ファイルを保存して閉じます。

ドメインでTomcatにアクセスして、この構成をテストします。

ステップ2–新しいNginx構成のテスト

構成の変更によって構文エラーが発生しなかったことをテストするには、次のコマンドを実行します。

  1. sudo nginx -t

出力は次のようになります。

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

エラーが表示された場合は、前の手順に戻って、変更した構成を確認してください。

次に、Nginxを再起動して、構成を再読み込みします。

  1. sudo systemctl restart nginx

WebブラウザでドメインのTLSで保護されたバリアントにアクセスすると、Tomcatのインストールを確認できるようになりました。

https://your_domain

ApacheまたはNginxのいずれかでTomcatへのアクセスを制限する

TLS証明書を使用してプロキシサーバーを介してドメインでTomcatインストールを公開したので、Tomcatインストールへのアクセスを制限することでTomcatインストールを強化できます。

TomcatへのすべてのHTTP要求はプロキシを介して送信される必要がありますが、ローカルループバックインターフェイスでの接続のみをリッスンするようにTomcatを構成できます。 この構成により、外部の関係者がTomcatに直接要求を行うことができなくなります。

を開きます server.xml 編集用のファイル(Tomcat構成ディレクトリ内にあります):

  1. sudo nano /opt/tomcat/conf/server.xml

を見つける Connector 下の定義 Service 名前付き Catalina、次のようになります。

/opt/tomcat/conf/server.xml
...
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
...

ローカルループバックインターフェイスへのアクセスを制限するには、次のように指定します。 127.0.0.1 として address パラメータ:

/opt/tomcat/conf/server.xml
...
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               address="127.0.0.1"
               redirectPort="8443" />
...

終了したら、ファイルを保存して閉じます。

変更を行うには、次のコマンドを実行してTomcatを再起動します。

  1. sudo systemctl restart tomcat

これで、Tomcatのインストールには、ApacheまたはNginxWebサーバープロキシを介してのみアクセスできるようになります。 ApacheまたはNginxはTomcatをインターネットから保護するため、 8080 ドメインのポート。

結論

このチュートリアルでは、無料のLet’sEncryptTLS証明書で保護されたプロキシサーバーの背後にTomcatをセットアップします。 また、ローカルループバックインターフェイスを介したTomcatへの接続を制限することにより、外部からの直接アクセスを禁止しました(localhost)。これは、ApacheやNginxなどのローカルアプリケーションのみが接続できることを意味します。

別のWebサーバープロセスを構成すると、アプリケーションの提供に関連するソフトウェアが増える可能性がありますが、Tomcatトラフィックを保護するプロセスが簡素化されます。 トラフィックのプロキシプロセスの詳細については、ApacheおよびNginxの公式ドキュメントにアクセスしてください。