torinaブログ

DjangoとBootstrap4で作成したブログ
Python, Django, Kivy, Bootstrap, Apache等のメモです
ソースコード

Apache、mod_evasiveを使う

Apache Apacheモジュール マイサーバ初期設定1
約279日前 2016年5月23日18:53
さくらVPS、CentOS6、Apache2.2です。
mod_evasiveはDos、DDos、brute force攻撃に威力を発揮します。

今回は簡単に、yumで入れます。
yum install mod_evasive


私の環境では、以下にconfファイルが作成されています。
ls /etc/httpd/conf.d

mod_evasive.conf


中身は、コメントを除けば以下になります。とってもシンプルです。
LoadModule evasive20_module modules/mod_evasive20.so

<IfModule mod_evasive20.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10


同一ページに対して、DOSPageInterval 秒以内に DOSPageCount 回のアクセス
同一サイトに対して、 DOSSiteInterval 秒以内に DOSSiteCount 回のアクセス
があった場合、DOSBlockingPeriod秒の間ブラックリストへ入れる、という意味になります、

他にも色々設定ができます。それぞれコメントアウトされてるので、使うならば#を消しましょう。
Whilelist(ホワイトリスト)、LogDir(ログ)、EmailNotify (メール通知)
#DOSEmailNotify      you@yourdomain.com
#DOSLogDir           "/var/lock/mod_evasive"
#DOSWhitelist   127.0.0.1
#DOSWhitelist   192.168.0.*


LogDirを設定するならば、ディレクトリの作成と、ディレクトリのアクセスできるように設定するのを忘れないようにします。
mkdir /var/lock/mod_evasive
chmod 777 /var/lock/mod_evasive


設定したら、apacheの再起動も忘れないようにします。
apachectl restart


テストスクリプトもあるので、動作確認するとよいでしょう。
この際、
DOSWhitelist 127.0.0.1という記述はコメントアウトしましょう。スルーされちゃいますからね。
→#DOSWhitelist 127.0.0.1
perl /usr/share/doc/mod_evasive-1.10.1/test.pl

HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
...
...
HTTP/1.1 403 Forbidden


すると、ログができました。
ls /var/lock/mod_evasive

dos-127.0.0.1


また、メールも届きました。
Subject: HTTP BLACKLIST 127.0.0.1

mod_evasive HTTP Blacklisted 127.0.0.1