皆さんの Apache httpd は安全でしょうか? 本稿では Apache httpd のモジュール ModSecurity をインストールして WAF (Web Application Firewall) の機能を Apache に導入する方法について解説します。
ModSecurity の概要
ModSecurity は、オープンソースで開発されている Apache モジュールとして動く WAF (Web Application Firewall) です。 Apache License, Version 2.0 の基で無償で利用することができます。
WAF (Web Application Firewall) とは、WEBサイトへのリクエストがアプリケーションに到達する前にリクエストの内容を精査して、リクエストの内容に不正があればリクエストを拒否する動きをする仕組みです。 例えば SQL インジェクションやクロスサイトスクリプティングなどの攻撃をアプリケーションにリクエストが到達する前に検知することができます。
WAF には様々な製品がありますが、本稿で学習する ModSecurity は Apache のモジュールとして動作するタイプの製品です。
本稿では ModSecurity 本体と、WAF のルールに当たる CRS (Core Rule Set) をインストールします。 CRS は「どのような内容のリクエストを拒否するのか」が書かれたルールファイルです。
ModSecurity のインストール
それでは早速 ModSecurity をインストールしましょう。 本稿では以下の環境でインストールを行っていきます。
- CentOS 6.5
- Apache 2.2
yum の EPEL リポジトリの追加
ModSecurity は yum を利用してインストールすることができますが、EPEL の yum リポジトリで提供されているため、EPEL リポジトリを予め追加しておきます。 EPEL リポジトリの追加は、別稿「EPELパッケージを使えるようにするインストール手順」を参考にしてください。
ModSecurity のインストール
EPEL リポジトリを追加したら、root 権限になって yum install コマンドで ModSecurity をインストールして、httpd を再起動します。
# yum install mod_security mod_security_crs
# service httpd restart
[ヒント]
起動時に「(EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of “xxxxxxx”」のようなエラーが Apache のエラーログに表示されて起動できない場合は、/etc/hosts にホスト名の登録が足りていないことが原因です。
インストールにより以下のファイルが作成されました。
- /etc/httpd/conf.d/mod_security.conf
- /etc/httpd/modsecurity.d/
mod_security.conf は、Apache httpd から ModSecurity を読み込む設定が書かれています。
/etc/httpd/modsecurity.d/ 配下には、WAF のルールに当たる CRS に当たるファイルが格納されます。 この中から自分のサーバーに合った CRS を読み込むことで、サーバーのセキュリティ強度を高めることができます。 mod_security.conf を覗いてみると、デフォルトでは次のように全ての CRS を読み込むようになっていると思います。
# ModSecurity Core Rules Set configuration
Include modsecurity.d/*.conf
Include modsecurity.d/activated_rules/*.conf
既に Apache httpd で WEB サイトを公開している場合、思いもよらぬアクセス制限が掛かる場合がありますので、まずは必要最低限の CRS のみを適用するように変更するなどして、テストをしながら徐々にルールを強化するのが良いでしょう。
おわりに
本稿では ModSecurity の概要と導入する手順について解説しました。 次回は CRS の種類や CRS の設定方法に触れられたらと思っています。