Ubuntu14.04でTomcatのインストールを最適化する方法

前書き

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

Tomcatをインストールした後、ほとんどの場合、追加の微調整が必要になります。安全で効果的な操作のためにTomcatのインストールを最適化する方法については、この記事をお読みください。

準備 ##

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

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

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

標準のHTTPポートでリクエストを提供します

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セットアップを取得するには、ほんの数ステップしかかかりません。記事のこの部分に従うには、前述のように、Tomcatの前にNginxをインストールして構成する必要があります。

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

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

TomcatのWeb管理ツールを削除すると、誰かがそれらを悪用する可能性があることを心配する必要がないため、セキュリティを向上させるのに役立ちます。このような優れた安全対策は、通常、生産現場に適用されます。

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

sudo apt-get remove tomcat7-admin

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

前のセクションで提案したように管理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

上記の手順を実行すると、基本的なセキュリティレベルが高くなります。

JVM設定を微調整する

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

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

Ubuntu14.04でTomcatのインストールを最適化する方法
Ubuntu14.04でRedisのインストールを保護する方法
Ubuntu16.04にApacheTomcat8をインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuにProtobuf3をインストールするための詳細なチュートリアル
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVagrantをインストールする方法
Ubuntu14.04にBacula-Webをインストールする方法
Ubuntu16.04にPostgreSQLをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu18.04にAnaconda3をインストールする方法
Ubuntu18.04にMemcachedをインストールする方法
Ubuntu16.04にJenkinsをインストールする方法
Ubuntu14.04にMemSQLをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu16.04にMongoDBをインストールする方法
Ubuntu14.04にMailpileをインストールする方法
Ubuntu16.04にPrestaShopをインストールする方法
Ubuntu14.04でPHP7にアップグレードする方法
Ubuntu20.04にSkypeをインストールする方法
Ubuntu20.04にJenkinsをインストールする方法
CentOS8にTomcat9をインストールする方法
Ubuntu18.04にPython3.8をインストールする方法
Ubuntu18.04にKVMをインストールする方法
Ubuntu20.04にKVMをインストールする方法
ubuntu14.04にopencv3.0.0をインストールする方法
Ubuntu20.04にAnacondaをインストールする方法
Ubuntu16.04にPrometheusをインストールする方法
Ubuntu18.04にJenkinsをインストールする方法
Ubuntu14.04にDjangoをデプロイする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にRをインストールする方法
Ubuntu16.04にMoodleをインストールする方法
Ubuntu14.04にSolr5.2.1をインストールする方法
Ubuntu16.04にTeamviewerをインストールする方法
Ubuntu14.04でNginxを保護する方法
Ubuntu20.04にMariaDBをインストールする方法
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にMonoをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu20.04にZoomをインストールする方法
Ubuntuでソフトウェアをアンインストールする方法
Ubuntu16.04にNginxをインストールする方法
Ubuntu20.04にOpenCVをインストールする方法
Ubuntu20.04にSpotifyをインストールする方法
Ubuntu18.04にPostmanをインストールする方法
Ubuntu16.04にGo1.6をインストールする方法
Ubuntu18.04にGoをインストールする方法
Ubuntu14.04にMySQLをインストールする方法
Ubuntu20.04にPostgreSQLをインストールする方法
Ubuntu18.04にVLCをインストールする方法
Ubuntu20.04にTeamViewerをインストールする方法
Ubuntu20.04にWebminをインストールする方法
Ubuntu20.04にスワップスペースを追加する方法