Apache Tomcat 強化およびセキュリティ ガイド
公開: 2015-02-14ベスト プラクティスを使用して Apache Tomcat サーバーを強化および保護するための実用的なガイド。
Tomcat は、最も人気のあるサーブレットおよび JSP コンテナー サーバーの 1 つです。 次のトラフィックの多い Web サイトの一部で使用されています。
- LinkedIn.com
- Dailymail.co.uk
- コムキャストネット
- ウォールマート.com
- Reuters.com
- Meetup.com
- Webs.com
以下のグラフは、Java アプリケーション サーバーにおける Tomcat の市場位置を示しています。
技術的には、Tomcat をフロントエンド サーバーとして使用して、サイト リクエストを直接処理できます。 ただし、実稼働環境では、Apache や Nginx などの Web サーバーをフロントエンドとして使用して、リクエストを Tomcat にルーティングしたい場合があります。
Web サーバーを使用して要求を処理すると、パフォーマンスとセキュリティ上の利点が得られます。 Apache HTTP をフロントエンド Web サーバーとして使用している場合は、それも保護することを検討する必要があります。
デフォルトの Tomcat 構成を使用すると、ハッカーがアプリケーションへの攻撃に備えるのに役立つ機密情報が公開される可能性があります。
以下は、Tomcat 7.x、UNIX 環境でテストされています。
観客
これは、ミドルウェア管理者、アプリケーション サポート、システム アナリスト、または Tomcat の強化とセキュリティを学習するために働いている、または熱心に学習しているすべての人を対象としています。
Tomcat および UNIX コマンドの十分な知識が必須です。
ノート
検証のために HTTP ヘッダーを調べるためのツールが必要です。 これを行うには 2 つの方法があります。
インターネットに接続するアプリケーションをテストする場合は、次の HTTP ヘッダー ツールを使用して実装を確認できます。
- HTTP ヘッダー チェッカー
- ハッカーの標的
また、イントラネット アプリケーションの場合は、Google Chrome、Firefox 開発者ツールを使用できます。
ベスト プラクティスとして、変更しようとしているファイルのバックアップを取る必要があります。
このガイドラインでは、Tomcat のインストール フォルダーを$tomcatと呼びます。
硬化と固定の手順を見てみましょう。
サーバーバナーを削除
HTTP ヘッダーからサーバー バナーを削除することは、強化として最初に行うことの 1 つです。
サーバー バナーを使用すると、使用している製品とバージョンが公開され、情報漏えいの脆弱性につながります。
デフォルトでは、Tomcat によって提供されるページは次のように表示されます。
製品とバージョンの詳細をサーバー ヘッダーから非表示にしましょう。
- $tomcat/conf フォルダーに移動します
- vi を使用して server.xml を変更する
Connector port
に以下を追加
Server =” “
元: -
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
- ファイルを保存し、Tomcat を再起動します。 これで、アプリケーションにアクセスすると、サーバー ヘッダーに空白の値が表示されるはずです。
Security Manager を使用して Tomcat を起動する
Security Manager は、ブラウザで実行されている信頼できないアプレットからユーザーを保護します。
セキュリティ マネージャを使用して Tomcat を実行すると、セキュリティ マネージャを使用せずに実行するよりも優れています。 Tomcat には、Tomcat Security Manager に関する優れたドキュメントがあります。
これの良いところは、構成ファイルを変更する必要がないことです。 これは、 startup.sh
ファイルを実行する方法にすぎません。
–security
引数を指定して tomcat を起動するだけです。
[root@geekflare bin]# ./startup.sh -security Using CATALINA_BASE: /opt/tomcat Using CATALINA_HOME: /opt/tomcat Using CATALINA_TMPDIR: /opt/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar Using Security Manager Tomcat started. [root@geekflare bin]#
SSL/TLS を有効にする
クライアントと Tomcat の間のデータを保護するには、HTTPS 経由で Web 要求を処理することが不可欠です。 HTTPS 経由で Web アプリケーションにアクセスできるようにするには、SSL 証明書を実装する必要があります。
証明書を備えたキーストアがすでに用意されていると仮定すると、 server.
Connector port
セクションの下の xml ファイル。
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
キーストアのファイル名とパスワードを自分のものに変更します。
キーストアと CSR プロセスについてサポートが必要な場合は、このガイドを参照してください。
HTTPS を強制する
これは、SSL が有効になっている場合にのみ適用されます。 そうしないと、アプリケーションが壊れます。
SSL を有効にしたら、すべての HTTP リクエストを強制的に HTTPS にリダイレクトして、ユーザーと Tomcat アプリケーション サーバー間の安全な通信を確保することをお勧めします。
- $tomcat/conf フォルダーに移動します
vi
を使用してweb.xml
を変更する</web-app>
構文の前に以下を追加
<security-constraint> <web-resource-collection> <web-resource-name>Protected Context</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
- ファイルを保存し、Tomcat を再起動します。
Secure & HttpOnly フラグを Cookie に追加
安全な Cookie がなくても、Web アプリケーションのセッションと Cookie を盗んだり操作したりすることができます。 これは、応答ヘッダーに挿入されるフラグです。
これは、web.xml ファイルのsession-config
セクションの行の下に追加することによって行われます。
<cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>
構成のスクリーンショット:
ファイルを保存し、Tomcat を再起動して HTTP 応答ヘッダーを調べます。
非特権アカウントから Tomcat を実行する
Tomcat には別の非特権ユーザーを使用することをお勧めします。 ここでの考え方は、いずれかのアカウントが危険にさらされた場合に実行中の他のサービスを保護することです。
- UNIXユーザーを作成します。たとえば、tomcatとしましょう
useradd tomcat
- 実行中の場合はTomcatを停止します
- $tomcat の所有権をユーザー tomcat に変更します
chown -R tomcat:tomcat tomcat/
Tomcat を起動し、Tomcat ユーザーで実行されていることを確認します
デフォルト/不要なアプリケーションを削除する
デフォルトでは、Tomcat には次の Web アプリケーションが付属しています。これらは、実稼働環境で必要な場合とそうでない場合があります。
それらを削除してクリーンな状態に保ち、Tomcat のデフォルト アプリケーションでの既知のセキュリティ リスクを回避できます。
- ROOT – デフォルトのウェルカム ページ
- ドキュメント – Tomcat ドキュメント
- 例 – デモンストレーション用の JSP とサーブレット
- マネージャー、ホストマネージャー – Tomcat の管理
これらは $tomcat/webapps フォルダーの下にあります。
[root@geekflare webapps]# ls -lt drwxr-xr-x 14 tomcat tomcat 4096 Sep 29 15:26 docs drwxr-xr-x 7 tomcat tomcat 4096 Sep 29 15:26 examples drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 host-manager drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 manager drwxr-xr-x 3 tomcat tomcat 4096 Sep 29 15:26 ROOT [root@geekflare webapps]#
SHUTDOWN ポートとコマンドの変更
デフォルトでは、Tomcat は 8005 ポートでシャットダウンするように構成されています。
IP:ポートにtelnetを実行し、SHUTDOWNコマンドを発行することで、Tomcatインスタンスをシャットダウンできることを知っていますか?
Chandans # telnet localhost 8005 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SHUTDOWN Connection closed by foreign host. Chandans #
危険!
ご覧のとおり、既定の構成を使用すると、セキュリティ リスクが高くなります。
tomcat のシャットダウン ポートとデフォルト コマンドを予測できないものに変更することをお勧めします。
- server.xml で以下を変更します。
<Server port="8005" shutdown="SHUTDOWN">
8005 – 他の未使用のポートに変更します
SHUTDOWN – 複雑なものに変更
元-
<Server port="8867" shutdown="NOTGONNAGUESS">
デフォルトの 404、403、500 ページを置き換える
見つからない、禁止されている、サーバー エラーのデフォルト ページがあると、バージョンの詳細が表示されます。
デフォルトの 404 ページを見てみましょう。
軽減するには、最初に一般的なエラー ページを作成し、一般的なエラー ページにリダイレクトするように web.xml を構成します。
- $tomcat/webapps/$application に移動します
vi
エディターを使用して error.jsp ファイルを作成する
<html> <頭> <title>エラーページ</title> </head> <本文> それはエラーです! </body> </html>
- $tomcat/conf フォルダーに移動します
- web.xml ファイルに以下を追加します。
</web-app>
構文の前に必ず追加してください
<エラーページ> <エラーコード>404</エラーコード> <場所>/error.jsp</場所> </エラーページ> <エラーページ> <エラーコード>403</エラーコード> <場所>/error.jsp</場所> </エラーページ> <エラーページ> <エラーコード>500</エラーコード> <場所>/error.jsp</場所> </エラーページ>
- Tomcat サーバーを再起動してテストします
ずっといい!
これは、 java.lang.Exception
に対しても実行できます。 これは、Java 言語の例外が発生した場合に Tomcat のバージョン情報を公開しないようにするのに役立ちます。
web.xml
に以下を追加して、Tomcat サーバーを再起動するだけです。
<エラーページ> <exception-type>java.lang.Exception</exception-type> <場所>/error.jsp</場所> </エラーページ>
上記のガイドで、Tomcat を保護するためのアイデアが得られることを願っています。 Tomcat の管理について詳しく知りたい場合は、このオンライン コースをチェックしてください。
また、シャットダウン中にパスワードを要求しないように WAS を構成する方法については、こちらを参照してください。