Ubuntu 14.04でTomcatインストールを最適化する方法

前書き

Tomcatは、JavaサーブレットおよびJavaServer Pagesテクノロジーの一般的な実装です。 これは、人気のあるApacheオープンソースライセンスの下でApache Software Foundationによってリリースされています。 その強力な機能、有利なライセンス、優れたコミュニティにより、Javaサーブレットは最適かつ最も好まれています。

Tomcatはほとんどの場合、インストール後に追加の微調整が必​​要です。 この記事を読んで、Tomcatインストールを最適化して安全かつ効率的に実行する方法を学習してください。

この記事では、Ubuntu 14.04でTomcatを実行するというテーマを継続します。以前にhttps://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-7-on-ubuntuを読んでいることを前提としています。 -14-04-via-apt-get [Apt-Get経由でUbuntu 14.04にApache Tomcat 7をインストールする方法]。

前提条件

このガイドはUbuntu 14.04でテストされています。 説明されているインストールと構成は、他のOSまたはOSバージョンでも同様ですが、構成ファイルのコマンドと場所は異なる場合があります。

このチュートリアルでは、次のものが必要です。

このチュートリアルのすべてのコマンドは、非rootユーザーとして実行する必要があります。 コマンドにルートアクセスが必要な場合は、先頭に「+ sudo +」が付きます。

標準HTTPポートでリクエストを処理する

既にお気づきのように、TomcatはデフォルトでTCPポート8080をリッスンします。 このデフォルトのポートは、Tomcatが特権のないユーザー `+ tomcat7 `の下で実行されるという事実が主な原因です。 Linuxでは、特に設定されていない限り、「 root +」などの特権ユーザーのみが1024未満のポートでリッスンできます。 したがって、Tomcatのリスナーポートを80(HTTP)に単純に変更することはできません。

そのため、Tomcatインストールを最適化する最初のタスクは、上記の問題を解決し、Tomcat Webアプリケーションが標準のHTTPポートで使用できるようにすることです。

これを解決する最も簡単な方法(必ずしも最適な方法とは限りません)は、ファイアウォール(iptables)を作成することです-TCPポート80からTCPポート8080への転送。 これは `+ iptables +`コマンドで実行できます:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

このiptablesルールを永続的にするには、記事https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-iptables-on-ubuntu-14-04 [設定方法]を確認してください。 Ubuntu 14.04でIPTablesを使用してファイアウォールを設定する]の* Iptables設定の保存*。

このiptablesルールを削除するには、ルールを追加するための `+ -A `フラグを、次のように上記のコマンドでルールを削除するための ` -D +`フラグに置き換えるだけです。

sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

このような単純なトラフィック転送は、セキュリティまたはパフォーマンスの観点から最適ではありません。 代わりに、Tomcatの前にNginxなどのWebサーバーを追加することをお勧めします。 これは、TomcatがWebサーバーの基本的な機能を備えた単なるJavaサーブレットであり、Nginxが典型的で強力かつ完全に機能するWebサーバーであるためです。 Nginxをフロントエンドサーバーとして使用することの重要な利点を次に示します。

  • NginxはTomcatよりも安全であり、さまざまな攻撃から効率的に保護できます。 緊急のセキュリティ更新の場合、Tomcatのアップグレードに関連するダウンタイムや互換性の問題を心配するよりも、フロントエンドのNginx Webサーバーを更新する方がはるかに簡単、迅速、安全です。

  • Nginxは、静的コンテンツ、キャッシュ、およびSSLのサポートを強化して、HTTPおよびHTTPSトラフィックをより効率的に処理します。

  • Nginxは、80および443を含む任意のポートでリッスンするように簡単に構成できます。

上記の利点を確信している場合は、最初に以前のiptablesルールを削除したことを確認してから、コマンドでNginxをインストールします。

sudo apt-get install nginx

その後、Nginxのデフォルトのサーバーブロック設定( + / etc / nginx / sites-enabled / default +)を次のようにお気に入りのエディターで編集します。

sudo nano /etc/nginx/sites-enabled/default

すべてのリクエストの処理方法を指定する `+ location / +`部分を探し、次のようになります。

/ etc / nginx / sites-enabled / default

location / {
   proxy_pass http://127.0.0.1:8080/;
}

上記の `+ proxy_pass +`ディレクティブは、TomcatがリッスンするTCPポート8080上のローカルIP 127.0.0.1にすべてのリクエストを転送することを意味します。 ファイルを閉じ、次のコマンドでNginxを再起動します。

sudo service nginx restart

その後、ブラウザの標準HTTPポートでDropletのIPに接続してTomcatにアクセスしてみてください。 URLは「+ http:// +」のようになります。 すべてが正常に機能する場合、Tomcatのデフォルトページを開く必要があります。 そうでない場合は、iptablesルールを削除し、この記事の前提条件に従ってTomcatが正しくインストールされていることを確認してください。

Tomcatの保護

Tomcatの保護はおそらく最も重要なタスクであり、しばしば無視されます。 幸いなことに、ほんの数ステップで、かなり安全なTomcatのセットアップを行うことができます。 記事のこの部分をフォローするには、前述のようにTomcatの前にNginxをインストールして構成する必要があります。

管理Webアプリケーションの削除

機能とセキュリティの通常のトレードオフは、Tomcatにも有効です。 セキュリティを強化するために、デフォルトのWebマネージャーおよびホストマネージャーアプリケーションを削除できます。 これは、Webアプリケーションのデプロイメントを含むすべての管理をコマンドラインから行う必要があるため、不便です。

TomcatのWeb管理ツールを削除すると、誰かがそれらを誤用することを心配する必要がないため、セキュリティに役立ちます。 この優れたセキュリティプラクティスは、通常、運用サイトに適用されます。

管理Webアプリケーションは、Ubuntuのパッケージ「+ tomcat7-admin」に含まれています。 したがって、それらを削除するには、次のコマンドを実行します。

sudo apt-get remove tomcat7-admin

管理Webアプリケーションへのアクセスを制限する

前のパートで推奨したように、管理Webアプリケーションを削除していない場合、少なくともそれらへのアクセスを制限できます。 それらのURLは `+ http:/// manager / `と ` http:/// host-manager / +`でなければなりません。 これらのURLで_404 Not Found_エラーが表示された場合、それらは既に削除されており、何もする必要はありません。 それでも、次の指示を読んで、保護する必要のある他の機密リソースを処理する方法を学ぶことができます。

この時点で、Nginxはポート80で接続を受け入れているため、どこからでも「+ http:// 」にあるすべてのWebアプリケーションにアクセスできます。 同様に、Tomcatはポート8080でグローバルにリッスンします。 ` http://:8080 +`。同じアプリケーションを見つけることができます。 セキュリティを向上させるために、Nginxを介してポート80で利用可能なリソースを制限します。 また、Tomcatとその公開ポート8080を、サーバーとNginxに対してローカルでのみ使用可能にします。

デフォルトのサーバーブロック設定ファイル `+ / etc / nginx / sites-enabled / default +`を開きます:

sudo nano /etc/nginx/sites-enabled/default

+ server_name +`ディレクティブの後、デフォルトのルートの場所( `+ location / +)の上に以下を追加し、 `++`をローカルコンピューターのIPアドレスに置き換えます。

/ etc / nginx / sites-enabled / default

...
location /manager/ {
   allow ;
   deny all;
   proxy_pass http://127.0.0.1:8080/manager/;
}
...

次のように、「+ manager 」が「 host-manager 」に置き換えられる別の設定ブロックを追加することにより、host-managerアプリケーションに同じ制限を適用する必要があります(再び、「+」をローカルIPアドレスに置き換えます)。

/ etc / nginx / sites-enabled / default

...
location /host-manager/ {
   allow ;
   deny all;
   proxy_pass http://127.0.0.1:8080/host-manager/;
}
...

Nginxを再起動すると、 + manager`および + host-manager` WebコンテキストへのアクセスはローカルIPアドレスのみに制限されます。

sudo service nginx restart

ブラウザで `+ http:/// manager / `と ` http:/// host-manager / +`を開いてテストできます。 アプリケーションは使用可能になっているはずですが、パブリックプロキシまたは別のコンピューターを使用して同じURLにアクセスしようとすると、403 Forbiddenエラーが表示されます。

さらに、追加の手段として、Tomcatのドキュメントと例をコマンドで削除することもできます。

sudo apt-get remove tomcat7-docs tomcat7-examples

Tomcatは引き続きTCPポート8080で外部接続をリッスンすることに注意してください。 したがって、Nginxとそのセキュリティ対策は簡単にバイパスできます。 この問題を解決するには、ローカルインターフェイス127.0.0.1のみでリッスンするようにTomcatを構成します。 この目的のために、お気に入りのエディターでファイル「+ / etc / tomcat7 / server.xml」を開きます。

sudo nano /etc/tomcat7/server.xml

次のように、 `+ Connector `設定部分に ` address =" 127.0.0.1 "+`を追加します。

/etc/tomcat7/server.xml

...
<Connector  port="8080" protocol="HTTP/1.1"
   connectionTimeout="20000"
   URIEncoding="UTF-8"
   redirectPort="8443" />
...

その後、新しい設定を有効にするためにTomcatを再起動します。

sudo service tomcat7 restart

上記の手順に従うことで、Tomcatの基本レベルのセキュリティを確保できます。

JVM設定の微調整

当然、ユニバーサルJava仮想マシン(JVM)の微調整の原則はTomcatにも適用できます。 JVMのチューニングはそれ自体が科学全体ですが、誰でも簡単に適用できる基本的な優れたプラクティスがいくつかあります。

  • 最大ヒープサイズ `+ Xmx `は、Tomcatが使用できる最大メモリです。 Droplet自体とDropletにある他のサービスを実行するのに十分な空きメモリを残す値に設定する必要があります。 たとえば、Dropletに2 GBのRAMがある場合、1 GBのRAMをxmxに安全に割り当てることができます。 ただし、Tomcatが使用する実際のメモリは、 ` Xmx +`のサイズよりも少し大きくなることに注意してください。

  • 最小ヒープサイズ「+ Xms +」は、起動時に割り当てられるメモリの量です。 ほとんどの場合、xmx値に等しくなければなりません。 したがって、割り当てられたメモリのサイズは常に一定であるため、高価なメモリ割り当てプロセスの実行を避けることができます。

  • クラスが永続的に保存されるメモリである「+ MaxPermSize 」は、Tomcatがアプリケーションのクラスをロードできるようにし、これらのクラスのインスタンス化のために「 Xmx 」値から予備のメモリを残す必要があります。 アプリケーションのクラスがどれだけのメモリを必要とするかわからない場合は、 ` MaxPermSize `を開始時の ` Xmx +`の半分のサイズ(この例では512 MB)に設定できます。

Ubuntu 14.04では、ファイル `+ / etc / default / tomcat7 +`を編集して、TomcatのJVMオプションをカスタマイズできます。 したがって、上記のヒントを適用するには、このファイルをお気に入りのエディターで開いてください。

sudo nano /etc/default/tomcat7

前提条件からTomcatのインストール手順に従っている場合、次の行を見つける必要があります。

/ etc / default / tomcat7

...
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"
...

ドロップレットに2 GBのRAMがあり、約1 GBをTomcatに割り当てる場合、この行を次のように変更する必要があります。

/ etc / default / tomcat7

...
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true  -Xmx -XX:MaxPermSize= -XX:+UseConcMarkSweepGC"
...

この設定を有効にするには、Tomcatを再起動する必要があります。

sudo service tomcat7 restart

上記のJVM設定は良いスタートですが、Tomcatのログ( + / var / log / tomcat7 / catalina.out +)の問題を監視する必要があります。特に、Tomcatの再起動後またはデプロイ後です。 ログを監視するには、次のような `+ tail +`コマンドを使用します。

sudo tail -f /var/log/tomcat7/catalina.out

`+ tail `を初めて使用する場合は、キーボードの ` Ctrl-C +`キーの組み合わせを押してログの末尾を停止する必要があります。

`+ OutOfMemoryError `のようなエラーを検索します。 このようなエラーは、JVM設定を調整し、具体的には「 Xmx +」サイズを大きくする必要があることを示します。

結論

それでおしまい! これで、いくつかの簡単な手順でTomcatを保護および最適化できました。 これらの基本的な最適化は、実稼働環境だけでなく、インターネットに公開されるテストおよび開発環境でも推奨されます。