no-image

DoS対策

管理しているサーバに繋がらない(HTTP)という苦情が来て、調べていたらどうもDoSを喰らっていた模様。private と public の間ぐらいのサーバだったので、大した対策をしていなかった。

まず原因を見つけるのに手間取ってしまった。サーバの設定は変更していないし、public_html 以下も変更していない。更にlocalだと問題なく繋がるし、同じサーバ内の別のディレクトリにはアクセスできる。

Apache のログには何もエラーはない。うーん、参ったな……。

仮想 PC 上で動作しているサーバなので、ふとコンソールを見てみると、何やらATA周りのエラーを吐いている。もしかして HDD が逝ったのか? と思って再起動を書けてみたけど同じ。そもそも HDD だったとしたらリモートとローカルに関係なくアクセスできないはずだ。

行き詰まっていたときに、これまたふと dmesg を見てみると…

...
 [105038.393582] __ratelimit: 13 callbacks suppressed
 [105038.393589] TCP: drop open request from 98.158.100.114/30513
 [105038.668761] TCP: drop open request from 98.158.100.114/54675
 [105038.890358] TCP: drop open request from 98.158.100.114/36814
 [105039.105736] TCP: drop open request from 98.158.100.114/27639
 [105039.310003] TCP: drop open request from 98.158.100.114/29864
 [105039.553499] TCP: drop open request from 98.158.100.114/9079
 [105039.787133] TCP: drop open request from 98.158.100.114/55721
 [105040.015086] TCP: drop open request from 98.158.100.114/21357
 [105040.219074] TCP: drop open request from 98.158.100.114/45906
 [105040.657706] TCP: drop open request from 98.158.100.114/55683
 [105043.680255] __ratelimit: 12 callbacks suppressed
 [105043.680261] TCP: drop open request from 98.158.100.114/1241
 [105044.014172] TCP: drop open request from 98.158.100.114/3746
 [105044.121551] TCP: drop open request from 98.158.100.114/50585
 [105044.456187] TCP: drop open request from 98.158.100.114/7217
 [105044.909950] TCP: drop open request from 98.158.100.114/17049
 [105045.080603] TCP: drop open request from 98.158.100.114/5732
 [105045.585508] TCP: drop open request from 98.158.100.114/47382
 [105045.805616] TCP: drop open request from 98.158.100.114/45156
 [105045.995973] TCP: drop open request from 98.158.100.114/41802
 [105046.248909] TCP: drop open request from 98.158.100.114/6653
 ...

こんなのがずーっと画面を埋め尽くしていた。 "TCP: drop open request from" について調べると、まさにドンピシャな記事があった。

大量の接続要求が来るようなサーバではないので、ほぼ間違いなく DoS だと断定。

ひとまず mod_evasive を有効にして様子を見たが、全然効果がなさそう……。接続数をかなり絞っても効果はないようだった。

そうこうしてたら攻撃が止んだので、とりあえずログに残っているIPアドレスは iptables で drop するようにしておいた。

そして翌日また別のIPアドレスから……。サーバの性質上、いっそのことブラックリストではなくてホワイトリストにした方がいいかもしれない。

追記: