Tomcatは、JavaServletおよびJavaServerPagesテクノロジーの一般的な実装です。これは、人気のあるApacheオープンソースライセンスの下でApache SoftwareFoundationによってリリースされています。その強力な機能、有利なライセンス、優れたコミュニティにより、Javaサーブレットの中で最も人気のあるものの1つになっています。
Tomcatをインストールした後、ほとんどの場合、追加の微調整が必要になります。安全で効果的な操作のためにTomcatのインストールを最適化する方法については、この記事をお読みください。
このガイドはUbuntu14.04でテストされています。説明されているインストールと構成は、他のOSまたはOSバージョンでも同様ですが、構成ファイルのコマンドと場所が異なる場合があります。
このチュートリアルでは、次のものが必要になります。
sudo
コマンドを使用できる非rootアカウントを持つUbuntu サーバーがセットアップされ、ファイアウォールがオンになっています。サーバーをお持ちでない学生は、[こちら](https://cloud.tencent.com/product/cvm?from=10680)から購入できますが、個人的には、無料のTencent Cloud [Developer Lab](https://cloud.tencent.com/developer/labs?from=10680)を使用して実験し、[サーバーを購入]( https://cloud.tencent.com/product/cvm?from=10680)。このチュートリアルのすべてのコマンドは、root以外のユーザーとして実行する必要があります。コマンドでルートアクセスが必要な場合は、先頭に「sudo」が表示されます。
TomcatがデフォルトでTCPポート8080でリッスンしていることに気付いたかもしれません。このデフォルトのポートは主に、Tomcatが非特権ユーザーの下で tomcat7
を実行するためです。 Linuxでは、特に設定されていない限り、「root」などの特権ユーザーのみが1024未満のポートを監視できます。したがって、Tomcatのリスナーポートを80(HTTP)に単純に変更することはできません。
したがって、Tomcatのインストールを最適化する最初のタスクは、上記の問題を解決し、TomcatWebアプリケーションが標準のHTTPポートで使用できるようにすることです。
この問題を解決する最も簡単な方法(必ずしも最良の方法ではありません)は、ファイアウォール(iptables)を作成することです-TCPポート80からTCPポート8080に転送します。これは次の iptables
コマンドで実行できます。
sudo iptables -t nat -A PREROUTING -p tcp --dport 80-j REDIRECT --to-ports 8080
この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をフロントエンドサーバーとして使用することのいくつかの重要な利点は次のとおりです。
上記の利点を確信している場合は、最初に以前のiptablesルールが削除されていることを確認してから、次のコマンドを使用してNginxをインストールします。
sudo apt-get install nginx
その後、お気に入りのエディターを使用して、Nginxのデフォルトのサーバーブロック構成( / etc / nginx / sites-enabled / default
)を次のように編集します。
sudo nano /etc/nginx/sites-enabled/default
すべてのリクエストの処理方法を指定する location /
セクションを探し、次のようになっていることを確認します。
location /{
proxy_pass http://127.0.0.1:8080/;}
上記の proxy_pass
ディレクティブは、TomcatがリッスンするTCPポート8080上のローカルIP127.0.0.1にすべての要求を転送する必要があることを意味します。ファイルを閉じて、次のコマンドでNginxを再起動します。
sudo service nginx restart
その後、ブラウザの標準HTTPポートを介してドロップレットのIPに接続してTomcatにアクセスしてみてください。 URLは http:// your_droplet's_ip
である必要があります。すべて問題がなければ、Tomcatのデフォルトページを開く必要があります。そうでない場合は、iptablesルールが削除され、Tomcatがこの記事の前提条件に従って正しくインストールされていることを確認してください。
Tomcatの保護は、おそらく見過ごされがちな最も重要なタスクです。幸いなことに、かなり安全なTomcatセットアップを取得するには、ほんの数ステップしかかかりません。記事のこの部分に従うには、前述のように、Tomcatの前にNginxをインストールして構成する必要があります。
機能とセキュリティの間の通常のトレードオフは、Tomcatにも当てはまります。セキュリティを向上させるために、デフォルトのWebマネージャーおよびホストマネージャーアプリケーションを削除できます。 Webアプリケーションの展開を含め、すべての管理をコマンドラインから実行する必要があるため、これは不便です。
TomcatのWeb管理ツールを削除すると、誰かがそれらを悪用する可能性があることを心配する必要がないため、セキュリティを向上させるのに役立ちます。このような優れた安全対策は、通常、生産現場に適用されます。
管理Webアプリケーションは、Ubuntuの tomcat7-admin
パッケージに含まれています。したがって、それらを削除するには、次のコマンドを実行します。
sudo apt-get remove tomcat7-admin
前のセクションで提案したように管理Webアプリケーションを削除しなかった場合は、少なくともそれらへのアクセスを制限できます。それらのURLは http:// your_servlet_ip / manager /
と http:// your_servlet_ip / host-manager /
でなければなりません。これらのURLに* 404 Not Found *エラーが表示された場合は、それらが削除されていることを意味し、何もする必要はありません。以下の手順を読んで、保護したい他の機密リソースを引き続き使用する方法を学ぶことができます。
この時点で、Nginxはポート80で接続を受け入れているため、どこからでもすべてのWebアプリケーション http:// your_servlet_ip
にアクセスできます。同様に、Tomcatはポート8080でグローバルにリッスンし、同じアプリケーションは http:// your_servlet_ip:8080
にあります。セキュリティを向上させるために、Nginxを介してポート80で使用可能なリソースを制限します。また、Tomcatとその公開ポート8080を、サーバーとNginxがローカルでのみ使用できるようにします。
デフォルトのサーバーブロック構成ファイル / etc / nginx / sites-enabled / default
を開きます。
sudo nano /etc/nginx/sites-enabled/default
server_name
命令の後、デフォルトのルートロケーション(location /
)の上に次のコンテンツを追加し、 your_local_ip
をローカルコンピューターのIPアドレスに置き換えます。
...
location /manager/{
allow your_local_ip;
deny all;
proxy_pass http://127.0.0.1:8080/manager/;}...
次のように manager
が host-manager
に置き換えられる別の構成ブロックを追加して、ホストマネージャーアプリケーションに同じ制限を適用する必要があります(ここでも、 your_local_ip
をローカルIPアドレスに置き換えます)。
...
location /host-manager/{
allow your_local_ip;
deny all;
proxy_pass http://127.0.0.1:8080/host-manager/;}...
Nginxを再起動すると、 manager
および host-manager
ネットワーク環境へのアクセスはローカルIPアドレスに制限されます。
sudo service nginx restart
ブラウザで http:// your_servlet_ip / manager /
と http:// your_servlet_ip / host-manager /
をテストできます。アプリケーションは使用可能である必要がありますが、パブリックプロキシまたは別のコンピューターを使用して同じURLにアクセスしようとすると、403Forbiddenエラーが表示されます。
さらに、追加の手段として、次のコマンドを使用して、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"
を追加します。
...< Connector address="127.0.0.1" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443"/>...
次に、Tomcatを再起動して、新しい設定を有効にします。
sudo service tomcat7 restart
上記の手順を実行すると、基本的なセキュリティレベルが高くなります。
もちろん、一般的なJava仮想マシン(JVM)の微調整の原則はTomcatにも適用されます。 JVMチューニングはそれ自体が科学ですが、誰でも簡単に適用できる基本的な優れたプラクティスがいくつかあります。
Xmx
は、Tomcatが使用できる最大メモリです。ドロップレット自体およびドロップレット上にある可能性のあるその他のサービスを実行するのに十分な空きメモリを残す値に設定する必要があります。たとえば、ドロップレットに2 GBのRAMがある場合、xmxに1GBのRAMを割り当てても安全な場合があります。ただし、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のインストール手順に従っている場合は、次の行が見つかります。
...
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"...
ドロップレットに2GBのRAMがあり、Tomcatに約1 GBを割り当てる場合は、次の行に変更する必要があります。
...
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xms1024m -Xmx1024m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC"...
この設定を有効にするには、Tomcatを再起動する必要があります。
sudo service tomcat7 restart
上記のJVM構成は良いスタートですが、特にTomcatを再起動した後、またはデプロイした後は、Tomcatのログ( / var / log / tomcat7 / catalina.out
)で問題がないか監視する必要があります。ログを監視するには、次の tail
コマンドを使用します。
sudo tail -f /var/log/tomcat7/catalina.out
tail
を初めて使用する場合は、キーボードの Ctrl-C
のキーの組み合わせを押して、末尾のログを停止する必要があります。
OutOfMemoryError
などのエラーを検索します。このようなエラーは、JVM設定を調整する必要があることを示しています。具体的には、 Xmx
のサイズを大きくします。
それでおしまい!これで、Tomcatを保護し、簡単な手順で最適化できます。これらの基本的な最適化は、本番環境だけでなく、インターネットに公開されているテストおよび開発環境にも推奨されます。
その他のUbuntuチュートリアルについては、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。
参照:「Ubuntu14.04でTomcatのインストールを最適化する方法」
Recommended Posts