さて、わたし自身の手によって閲覧不可能に陥ってしまったこの code.zobe.jp ブログ。
復活することはできるのか!?
いや、攻撃を停止したから復活してるんですけど…。
さて
攻撃を受けたらどうすればいいのか?
pound による reverse proxy を経由して通信させると防衛できる
http://www.drk7.jp/MT/archives/001527.html
mod_antivirus, mod-pacify-slowloris による対処
http://d.hatena.ne.jp/port445/20090626#p1
mod-pacify-slowloris による対処
http://kikuz0u.x0.com/blog/?p=123
などの先人たちの苦労を発見しました。大変だねぇ。いや自分もだけど。
いろいろ見て回った結果を総合的に直感的に怠惰に判断した結果
今回は mod_antiloris だけを試してみることにしました。
まずはソースコードを落としてきます。FTPがめんどいので、w3mコマンドで落としてきました。
今回落としてきたファイルは mod_antiloris-0.4.tar.bz2 です。最新版を拾えばよろしいでしょう。
[root@code.zobe.jp]# w3m http://sourceforge.net/projects/mod-antiloris/files/
そして、解凍して、コンパイルします。
コンパイルには apxs です。事前に用意しましょう。
CentOSならば「yum install httpd-devel」で入ります。
[root@code.zobe.jp]# tar -xjvf mod_antiloris-0.4.tar.bz2 [root@code.zobe.jp]# cd mod_antiloris-0.4 [root@code.zobe.jp]# apxs -a -i -c mod_antiloris.c
これで一気にインストールが終わってくれました(CentOS5の場合です)。
/usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/include/apr-1 -c -o mod_antiloris.lo mod_antiloris.c && touch mod_antiloris.slo /usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_antiloris.la -rpath /usr/lib64/httpd/modules -module -avoid-version mod_antiloris.lo /usr/lib64/httpd/build/instdso.sh SH_LIBTOOL='/usr/lib64/apr-1/build/libtool' mod_antiloris.la /usr/lib64/httpd/modules /usr/lib64/apr-1/build/libtool --mode=install cp mod_antiloris.la /usr/lib64/httpd/modules/ cp .libs/mod_antiloris.so /usr/lib64/httpd/modules/mod_antiloris.so cp .libs/mod_antiloris.lai /usr/lib64/httpd/modules/mod_antiloris.la cp .libs/mod_antiloris.a /usr/lib64/httpd/modules/mod_antiloris.a chmod 644 /usr/lib64/httpd/modules/mod_antiloris.a ranlib /usr/lib64/httpd/modules/mod_antiloris.a PATH="$PATH:/sbin" ldconfig -n /usr/lib64/httpd/modules ---------------------------------------------------------------------- Libraries have been installed in: /usr/lib64/httpd/modules If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,--rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- chmod 755 /usr/lib64/httpd/modules/mod_antiloris.so [activating module `antiloris' in /etc/httpd/conf/httpd.conf]
そして httpd を一度再起動かけて…
[root@code.zobe.jp]# service httpd restart
mod_antiloris が Apache に組み込まれたかどうか、確認してみると…
[root@code.zobe.jp]# httpd -M Loaded Modules: core_module (static) mpm_prefork_module (static) http_module (static) so_module (static) ...(中略) version_module (shared) antiloris_module (shared) xsendfile_module (shared)
これで設置から設定まで完了しちゃったようです。いいのかなー。こんなに簡単で。
よし試してみよう!!
[root@attacker]# perl slowloris.pl -dns code.zobe.jp -port 80
↑そのまま使わないでね。うちのサーバが泣いちゃうから。
そしてブラウザで開いてみると…
耐えきったようです。
接続数を確認してみると…
424 192.168.256.257 (←このサーバ自身) 385 256.257.258.259 (←これ攻撃元)
攻撃直後はこうで…
44 192.168.256.257 (←このサーバ自身) 12 256.257.258.259 (←これ攻撃元)
3秒後には、しぼみます。
mod_antiloris大勝利です。Slowloris敗れたり。
ハイになりながらその後
接続数1000
perl slowloris.pl -num 1000 -dns code.zobe.jp -port 80
接続数3000
perl slowloris.pl -num 3000 -dns code.zobe.jp -port 80
接続数3000 + 別サーバ(別グローバルIP、別ネットワーク)からも攻撃1000
Server1# perl slowloris.pl -num 3000 -dns code.zobe.jp -port 80 Server2# perl slowloris.pl -num 1000 -dns code.zobe.jp -port 80
といろいろ試しましたが、問題なしでした。
というわけで、現状のApache(少なくともCentOS5のApache)では、mod_antilorisを導入すると、
Slowlorisの攻撃に耐えることができそうなカンジでした。
最近のコメント