「効果的な簡単のWebサーバセキュリティ対策」の第2弾です。今回の主人公はApache Tomcatです。
Apache Tomcatは、Java ServletやJSPを実行するためのWebコンテナです。
しかし、今Javaで新しい開発されたウェブアプリケーションの多くはSpringに使用している、Spring自分はWebServerがあるので、だからすべてのJavaウェブアプリケーションがTomcatを使用しているわけではありません。正直、もしSpringを使っての開発しているのウェブアプリケーションは、そのセキュリティ対策と我々はインフラエンジニア何も関係ない。我々インフラエンジニアはただの正しい権限ユーザーに実行することだけだ。
でも、Tomcatを使ってのJava Webアプリケーションを実行するの場合は、サービス安全のために、ある程度のセキュリティ対策をしなければなりません。これは、確かに我々インフラエンジニアの役割です。
正直に言えば、Tomcatのセキュリティ問題はとでも厳しいです。ここまで数年間、Tomcatは非常に深刻なCVEセキュリティ脆弱性をたくさん確認されました。
ですから、セキュリティ対策を講じることが何よりも重要だ。
セキュリティ対策前提条件
root
ユーザーとしてTomcatを実行することはいけません。
これは基本的な常識です。
一般的に、新しいログインできないのノーマルユーザーを作成して、そしてそのユーザーでTomcatを実行します。
最新バージョンのTomcatを使用する
最新バージョンのTomcatを使用しなければならない。
先にも話しましたが、この数年間、Tomcatは非常に深刻なCVEセキュリティ脆弱性をたくさん確認されました。
最新バージョンのTomcatを使用すれば、これらの脆弱性が悪い人を悪用されるのを防ぐことができます。
別のTomcatセキュリティ設定
それでは、Tomcat別のセキュリティ設定を始めましょう。
Nginxを使ってTomcatをリバースプロキシします
近年發見したのTomcat CVEの脆弱性のうち、TomcatのWebServerモジュールにいくつかの脆弱性が發見しました。
ほとんどの悪用攻撃は、標準外のHTTPパケットを構築してTomcatをに攻撃します。
そのためには、Tomcatの設定を変更して外部からのアクセスを禁止するが必要だ。すべての外部からのアクセスはNginxに処理します。
Tomcatのインストールフォルダで、confフォルダー中のserver.xml
ファイル内の設定に変更する:
<Connector port="8080" protocol="HTTP/1.1" address="127.0.0.1" // <-- ただここで「address="127.0.0.1"」に追加する
maxHttpHeaderSize="8192" URIEncoding="UTF-8" // その他のパラメータただの参考です
maxThreads="500" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="10000" disableUploadTimeout="true" />
そして、今我々は「AJP」連続方法はほとんど使わないので、「AJP」連続方法を無効化します:
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
より安全にしたい場合は、SHUTDOWNの設定を変更することもできます:
<Server port="8005" shutdown="0c65e353a4df5c5e748626dd535a9c8b">
ここの「0c65e353a4df5c5e748626dd535a9c8b」はあなたが好きの内容を書かてもいい。
エラーページをカスタマイズしてTomcat関連の情報を非表示にする
この設定を変更するの理由は、攻撃者から特定のバージョンTomcatの脆弱性に対する攻撃を防ぐ。
つまり、なるべく攻撃者を混乱させる。
それをために、Tomcatのインストールフォルダで、confフォルダー中のweb.xml
ファイル内の設定に変更する:
<error-page>
<error-code>400</error-code>
<location>/400.html</location> //<-- お気に入りのページを自由に選択
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.html</location> //<-- お気に入りのページを自由に選択
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.html</location> //<-- お気に入りのページを自由に選択
</error-page>
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/error.html</location> //<-- お気に入りのページを自由に選択
</error-page>
ここでは、別のWebServer(Microsoft IISなど)のデフォルトのエラーページを模倣したエラーページを使用することもいい。
カスタムエラーページは、Tomcatインストールフォルダのwebapp
フォルダ、またはWebContent
ルートフォルダ、この2つフォルダどちらも大丈夫です、好きにフォルダを置きろう。
Tomcatの管理ページを無効化
本番環境では、Tomcatの管理ページは何の役にも立ちません。 そこで、管理ページへの不正アクセスを防ぐために、全部削除します。
-
webapps
フォルダ内のTomcat
フォルダの内容を全て削除します。 - 「conf/Catalina/localhost/」フォルダ中、「
host-manager.xml
」と「manager.xml
」この2つファイルを削除します。
結論
お気づきの方もいらっしゃると思いますが、Tomcatのセキュリティ対策として最も効果的なのは、タイムリーに最新版にアップグレードすることです。
その先にあるのは、攻撃者が間違った判断をするために、できるだけ多くの情報を難読化することです。
それ以外、私たちができることほとんどないです。