Ubuntu20.04でApacheまたはNginxを使用してTomcat10を保護する方法

提供:Dev Guides
移動先:案内検索

著者は、 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の公式ドキュメントにアクセスしてください。