もふもふ技術部

CentOS6.5にWeb Application Firewallのmod_securityを入れてみる


WEBアプリケーションのユーザーが限定されていればiptablesやAWSのsecurity groupとかでIPフィルタリングしてしまうのですが、そうでない場合にhttpポートを全開放してしまうと、全世界からアタックし放題な状態になってしまいます。

海外からのアクセスブロックするとか、手段は他にも色々とありますが、今回はその一つであるWeb Application Firewallをインストールしてみます。

CentOS6.5で既にApacheが動いている状態でWeb Application Firewallであるmod_securityを入れてみますね。

インストール

こちらを参考にしました。yumでインストールしていきます。

http://oki2a24.com/2013/09/27/yum-install-epel-modsecurity/

どうやらepelリポジトリを使用すればより新しいバージョンのmod_securityがインストール出来るみたいですね。

epelリポジトリの追加方法については忘れてしまったので省略しますね。このあたりに載ってるかな。

http://qiita.com/muniere/items/6c4923a070cbbd824f39

mod_security をインストールします。
現時点で2.7.3がインストールされました。

この時点ではまだ有効になっていません。
有効にするには mod_security_crs(Core Rule Set) のインストールが必要です。

これでmod_securityが有効になりました。下記のようなパラメータを付与してアクセスしてみます。

http://your-own.appliation.com/?union+select

するとapacheのテストページに飛ばされました。ちゃんとフィルタリングされているみたいですね。

ログを確認すると、modsecurity_crs_41_sql_injection_attacks.conf の内容でフィルタリングされていることがわかるのでSQLインジェクションのルールでブロックされたということですね。

SQLインジェクション以外にもデフォルトで多数のルールセットが有効になっています。

ちなみに追加のルールセットもインストールすることも出来ます。どのようなルールセットが追加されるかは今回は割愛しますね。

こんな感じに簡単に mod_securityが導入出来ました!
ただWAFの設定は非常に勘所が難しく、強化し過ぎるとアプリケーションに害を及ぼすし、緩くし過ぎると脆弱性のリスクが高まるので、設定は随時見なおしていくのがよいかと思います。

おまけ:ベンチマークとってみた

ついでですが、mod_securityはインストールした時点から、apacheのレスポンスが落ちるという情報があったのでベンチマークとってみました。ぼくの個人サイトで試してます。

before

after

before => Time taken for tests: 21.931 seconds
after => Time taken for tests: 22.301 seconds

すべてのリクエストが完了するまでの時間で0.4秒程の差が計測されました。カジュアルな測定ですが事実っぽいですね。

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。