ラベル DoS対策 の投稿を表示しています。 すべての投稿を表示
ラベル DoS対策 の投稿を表示しています。 すべての投稿を表示

2012年8月29日水曜日

mod_evasive で画像をチェックしない方法

セキュリティ対策として、mod_evasiveを入れたのはちょっと前。
画像のロードが多いサイトだったので、DoSアタックと勘違いされてアラートメールがぞくぞくと…

通常、mod_evasiveはIPアドレスしかwhitelistに登録できません。
そこで、コンパイル前のソースを書き換えて特定の条件ではスルーするようにします。



------------------------------



[mod_evasive20.c]

- #define MAILER  "/bin/mail %s"
+ #define MAILER  "/bin/mail -s 'DoS Alert! from your-service.com' %s"


static int access_checker(request_rec *r)
{
int ret = OK;

+    /* IGNORE_DOS */
+    if (apr_table_get(r->subprocess_env, "IGNORE_DOS") != NULL)
+      return OK;


※apr_table_get(r->subprocess_env, "IGNORE_DOS") でIGNORE_DOSが有効になっているか確認します。
※apache1.3 を使っている方はいないと思いますが、もし使ってたらap_table_getに直してください。
------------------------------

[modevasive.conf]

+ SetEnvIf Request_URI "\.(gif|jpg|png)$" IGNORE_DOS


※URIに特定の拡張子が含まれていたらIGNORE_DOSが有効になります。

------------------------------


なお、mod_evasive20.c を書き換えた後は、apxsでコンパイルしてApacheの再起動を行います。

# apxs -ica mod_evasive20.c
# apachectl configtest
# apachectl graceful


以上!



※参考URL※

ap_table と apr_table の違い



2012年4月18日水曜日

DoS対策で使えるiptablesのhitcountは最大値=20だった!

iptablesでDoS対策する方法に、hitcountを使って接続回数を制限するものがあります。
sshだったりhttpだったり、ポート別・IPアドレス別に制限がかかるのです。

sshの場合は60秒間で5回など、hitcountが少なくて良いのですが、
httpの場合は画像のロードなどもあるので、10回より多めにしておきたいところです。

さぁ試してみよう!


--seconds 30 --hitcount 50 に設定して、100回接続してみました。
しかしどうでしょう。全てOKになってしまいました。
数値を小さくすると効果が出ているのですが、数値を変えて試すと20以上は全てOKでした。
どうやらhitcountの最大値は20だったようです。
※ここまで検証で試しました。
※この事は普通に英語サイトで記述されています。orz


じゃ、対応してみようか


hitcountの最大値はデフォルトで20です。
設定ファイルを確認してみましょう。

# cat /sys/module/ipt_recent/parameters/ip_pkt_list_tot 
20



このままでは --hitcount 50 としても全く効きません。
なので、基本的な設定を変更します。


# vi /etc/modprode.conf
以下を追加します。

options ipt_recent ip_pkt_list_tot=50


設定を反映しましょう。

/-- CentOS5の場合 [ここから] --/

# service iptables stop
# rmmod ipt_recent
# modprode ipt_recent

/-- CentOS5の場合 [ここまで] --/


# service iptables restart




設定の反映が完了しました。
設定ファイルを確認してみましょう。

# cat /sys/module/ipt_recent/parameters/ip_pkt_list_tot 
50 <- 変わった!?



この設定が有効かどうかは、50回以上自動アクセスするテストプログラムを稼働させて、パケットがrejectされているか見てみましょう。
今回はmod_evasiveに付いてきたtest.plを書き換えて実行してみました。
便利ですね、このテストプログラム。



【参考URL】
hitcountの最大値について:

ip_pkt_list_totについて:

modprode.confの設定が反映されない時はmodplodeをreloadしてみよう: