Ubuntu20.04でApacheまたはNginxを使用してTomcat10を保護する方法
序章
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の両方を試したい場合は、それぞれに個別のサーバーが必要になります。
前提条件
- 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
ファイルは次のようになります。
<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
:
...
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_proxy
と mod_proxy_http
、接続プロキシを容易にするApacheモジュールです。 次のコマンドを実行して、それらを有効にします。
- sudo a2enmod proxy
- sudo a2enmod proxy_http
次に、次のように入力して構成を確認します。
- sudo apache2ctl configtest
出力はで終わる必要があります Syntax OK
. エラーがある場合は、変更した構成を確認してください。
最後に、ApacheWebサーバープロセスを再起動します。
- 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を認識できるようにします。
次のコマンドを使用して、編集用の構成ファイルを開きます。
- sudo nano /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 /
強調表示されたディレクティブでブロックします。
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構成のテスト
構成の変更によって構文エラーが発生しなかったことをテストするには、次のコマンドを実行します。
- 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
を見つける Connector
下の定義 Service
名前付き Catalina
、次のようになります。
...
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
...
ローカルループバックインターフェイスへのアクセスを制限するには、次のように指定します。 127.0.0.1
として address
パラメータ:
...
<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をセットアップします。 また、ローカルループバックインターフェイスを介したTomcatへの接続を制限することにより、外部からの直接アクセスを禁止しました(localhost
)。これは、ApacheやNginxなどのローカルアプリケーションのみが接続できることを意味します。
別のWebサーバープロセスを構成すると、アプリケーションの提供に関連するソフトウェアが増える可能性がありますが、Tomcatトラフィックを保護するプロセスが簡素化されます。 トラフィックのプロキシプロセスの詳細については、ApacheおよびNginxの公式ドキュメントにアクセスしてください。