Apache Tomcatをインストールしたらすぐに設定したいセキュリティ対策

投稿者 : OSCA

[PR] "東野・岡村の旅猿"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 本稿では 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 独自のエラー画面は変更しておいた方が良いでしょう。

Apache 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 をインストールしたあとに設定しておきたいセキュリティ対策について解説しました。 新しいことに気づいた際には、随時本ページを更新したいと思います。 皆様のお仕事のお役に立てれば幸いです。

Apache Tomcat 環境構築へ戻る

Apache Tomcatのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca