本稿では Apache Tomcat をインストール後に、まずは設定しておきたいセキュリティ対策について解説します。
HTTPメソッドの制限
HTTPには GET, POST, PUT, DELETE などの様々なアクセスメソッドがあります。 Tomcat においてもそれらのメソッドのリクエストを受け付けることができますが、一般的なWEBサイトの構築にTomcatを利用しているのであれば、ほとんどの場合、必要なメソッドは GET と POST の2つのメソッドに限られるのではないでしょうか。 普段利用しないアクセスメソッドについてはリクエストを受けつけておく必要はありませんので、万が一の脆弱性に備えて制限しておくことに越したことはありません。
Tomcatのホームディレクトリ配下の conf/web.xml (特定のアプリケーションだけ設定したい場合は、アプリケーション内のweb.xml)に次のように設定を加えることで、記述したアクセスメソッドを拒否することができます。 つぎの例は、GET と POST 以外のメソッドを拒否する設定です。 <http-method>タグで拒否したいメソッドを列挙します。
<security-constraint>
<web-resource-collection>
<web-resource-name>deny method</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>CONNECT</http-method>
<http-method>PATCH</http-method>
<http-method>PROPFIND</http-method>
<http-method>PROPPATCH</http-method>
<http-method>MKCOL</http-method>
<http-method>COPY</http-method>
<http-method>MOVE</http-method>
<http-method>LOCK</http-method>
<http-method>UNLOCK</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
参考 : HTTP/1.1までに定義されている主なメソッド
メソッド | 説明 | 対応バージョン |
---|---|---|
GET | クライアントが指定したURLリソースを取得する | 1.0~ |
POST | クライアントからデータを送信する | 1.0~ |
PUT | 指定したURLにリソースを保存・更新する | 1.1~ |
HEAD | ヘッダ情報のみ表示する | 1.0~ |
OPTION | 利用可能なメソッドなどのサーバ情報を取得する | 1.1~ |
DELETE | 指定したURLのリソースを削除する | 1.1~ |
TRACE | リクエストのループバックを要求する | 1.1~ |
CONNECT | プロキシへのトンネルを要求する | 予約されたメソッドであり、実装はされていない |
PATCH | リソースを更新する | ~1.0 (1.1で廃止) |
LINK | 他の文章と関連付ける | ~1.0 (1.1で廃止) |
UNLINK | 他の文章との関連を解除する | ~1.0 (1.1で廃止) |
※Servlet 2.4 までは GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE しか指定できません。
エラーページの設定
Tomcat の初期状態では、存在しないURLにアクセスがした場合や認証エラー、アプリケーションでエラーが発生した場合などに、つぎのような Tomcat のエラー画面を表示します。 しかし、この画面の下部には Tomcat のバージョンが表示されてしまいますし、何よりもアクセスユーザに Tomcat を利用していることが分かってしまいます。 悪意のあるユーザーに攻撃のヒントとなる情報を提供しないためにも、この Tomcat 独自のエラー画面は変更しておいた方が良いでしょう。
Tomcat では応答HTTPステータスコードに表示したい画面を指定することができます。 次の例のように <error-page> で囲い、 <error-code> でステータスコードを、<location> で表示する画面を指定します。
<error-page>
<error-code>404</error-code>
<location>/notfound.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.html</location>
</error-page>
<location> には、上の例のようにアプリケーション内の画面のパスを指定することもできますし、URLを指定することもできます。
上の例のように1つずつステータスコードを指定するわけですが、どの範囲まで設定したら良いのかと悩むかと思います。 300番台, 400番台, 500番台 と全てのステータスコードに対して設定すべきでしょうか? 全てのステータスコードに対して設定できるのであれば越したことはありませんが、運用中に起こりえるステータスコードだけ対応すれば良いでしょう。 例えば 404 と 500 だけ最低限設定する対応でも良いと思います。 それに加えて認証を Tomcat で行う要件があるのであれば、401 (認証失敗) などを加えます。
おわりに
本稿では Apache Tomcat をインストールしたあとに設定しておきたいセキュリティ対策について解説しました。 新しいことに気づいた際には、随時本ページを更新したいと思います。 皆様のお仕事のお役に立てれば幸いです。