Ubuntu20.04でApacheまたはNginxを使用してTomcat10を保護する方法
著者は、 Write for DOnations プログラムの一環として、 Free and Open SourceFundを選択して寄付を受け取りました。
序章
Apache Tomcat は、Javaアプリケーションを提供するために使用されるWebサーバーおよびサーブレットコンテナです。 これは、ジャカルタサーブレット、ジャカルタサーバーページ、およびジャカルタEEプラットフォームの他のテクノロジーのオープンソース実装です。
インストール時に、Tomcatは、パスワードやその他の機密データを含む、デフォルトで暗号化されていないトラフィックを処理します。 Tomcatのインストールを保護するために、 Let's EncryptTLS証明書をすべてのHTTP接続に統合します。 TLSを組み込むために、構成された証明書を使用してリバースプロキシを設定できます。これにより、クライアントと安全にネゴシエートし、Tomcatに要求を渡します。
TLS接続はTomcat自体で構成できますが、Tomcatには最新のTLS標準とセキュリティ更新プログラムがないため、お勧めしません。 このチュートリアルでは、ApacheまたはNginxのいずれかを使用してこの接続を構成します。 これらは広く普及しており、十分にテストされていますが、certbot
などのLet'sEncrypt証明書のプロビジョニングを自動化するソフトウェアは、Tomcatをサポートしていません。 ApacheとNginxの両方を試したい場合は、それぞれに個別のサーバーが必要になります。
前提条件
- sudo非rootユーザーとファイアウォールを備えたUbuntu20.04サーバー。これは、Ubuntu20.04初期サーバーセットアップガイドに従ってセットアップできます。
- サーバーにインストールされているTomcat10。Ubuntu20.04にApacheTomcat10をインストールする方法に従ってセットアップできます。
- 登録されたドメイン名。 このチュートリアルでは、全体を通して例として
your_domain
を使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 - サーバーのパブリックIPアドレスを指すDNSレコード。 追加の詳細については、このDigitalOceanDNSの概要をフォローしてください。
オプション1-リバースプロキシとしてのApacheの使用
セクションの前提条件
- Ubuntu20.04にApacheをインストールする方法に従ってApacheをインストールします。 ドメインに仮想ホストファイルがあることを確認してください。
- ドメインのサーバーにインストールされているTLS証明書を暗号化しましょう。 Let's Encrypt Guide forApacheで概説されている手順に従います。 プロンプトが表示されたら、セキュアドメインへのリダイレクトを有効にします。
ステップ1-Apacheで仮想ホストを構成する
ドメインに基本的な仮想ホストを設定し、前提条件のセクションでLet's Encryptを使用して保護したため、2つの仮想ホストを使用できます。 HTTPSトラフィックを構成するものだけを編集する必要があります。 それらを一覧表示するには、次のコマンドを実行してApacheconfigを表示します。
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
をドメイン名に置き換えて、次のコマンドを実行して編集用に開きます。
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構成のテスト
このステップでは、接続プロキシを容易にするApacheモジュールであるmod_proxy
およびmod_proxy_http
を有効にします。 次のコマンドを実行して、それらを有効にします。
sudo a2enmod proxy sudo a2enmod proxy_http
次に、次のように入力して構成を確認します。
sudo apache2ctl configtest
出力はSyntax OK
で終了する必要があります。 エラーがある場合は、変更した構成を確認してください。
最後に、ApacheWebサーバープロセスを再起動します。
sudo systemctl restart apache2
Webブラウザからyour_domain
にアクセスすると、TLS証明書で保護されたTomcatインストールが表示されます。 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を認識できるようにします。
次のコマンドを使用して、編集用の構成ファイルを開きます。
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; }
upstream
ブロックは、Tomcatへの接続方法を定義します。これにより、NginxはTomcatの場所を知ることができます。
次に、ポート443用に定義されたserver
ブロック内で、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行は、すべてのトラフィックが、定義したtomcat
というupstream
ブロックに送られることを指定しています。 また、プロキシプロセス中に保持されるすべてのHTTPパラメータを注文します。 終了したら、ファイルを保存して閉じます。
ドメインでTomcatにアクセスして、この構成をテストします。
ステップ2–新しいNginx構成のテスト
構成の変更によって構文エラーが発生しなかったことをテストするには、次のコマンドを実行します。
sudo nginx -t
出力は次のようになります。
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
エラーが表示された場合は、前の手順に戻って、変更した構成を確認してください。
次に、Nginxを再起動して、構成を再読み込みします。
sudo systemctl restart nginx
WebブラウザでドメインのTLSで保護されたバリアントにアクセスすると、Tomcatのインストールを確認できるようになりました。
https://your_domain
ApacheまたはNginxのいずれかでTomcatへのアクセスを制限する
TLS証明書を使用してプロキシサーバーを介してドメインでTomcatインストールを公開したので、Tomcatインストールへのアクセスを制限することでTomcatインストールを強化できます。
TomcatへのすべてのHTTP要求はプロキシを介して送信される必要がありますが、ローカルループバックインターフェイスでの接続のみをリッスンするようにTomcatを構成できます。 この構成により、外部の関係者がTomcatに直接要求を行うことができなくなります。
server.xml
ファイルを編集用に開きます(Tomcat構成ディレクトリ内にあります)。
sudo nano /opt/tomcat/conf/server.xml
Catalina
という名前のService
の下にあるConnector
の定義を見つけます。次のようになります。
/opt/tomcat/conf/server.xml
... <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ...
ローカルループバックインターフェイスへのアクセスを制限するには、address
パラメータとして127.0.0.1
を指定します。
/opt/tomcat/conf/server.xml
... <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" address="127.0.0.1" redirectPort="8443" /> ...
終了したら、ファイルを保存して閉じます。
変更を行うには、次のコマンドを実行してTomcatを再起動します。
sudo systemctl restart tomcat
これで、Tomcatのインストールには、ApacheまたはNginxWebサーバープロキシを介してのみアクセスできるようになります。 ApacheまたはNginxはTomcatをインターネットから保護するため、ドメインの8080
ポートからはアクセスできません。
結論
このチュートリアルでは、無料のLet'sEncryptTLS証明書で保護されたプロキシサーバーの背後にTomcatをセットアップします。 また、ローカルループバックインターフェイス(localhost
)を介したTomcatへの接続を制限することにより、直接外部アクセスを禁止しました。これは、ApacheやNginxなどのローカルアプリケーションのみが接続できることを意味します。
別のWebサーバープロセスを構成すると、アプリケーションの提供に関連するソフトウェアが増える可能性がありますが、Tomcatトラフィックを保護するプロセスが簡素化されます。 トラフィックのプロキシプロセスの詳細については、ApacheおよびNginxの公式ドキュメントにアクセスしてください。