DDos対策

今朝、自分がプライベートで使っている個人サーバーのwikiが突然更新できなくなった。
サーバーに入って調べてみると、予想どおりディスクフル

WEBサーバーに、とんでもないアクセスが来ていて、ログが溢れているのが原因だった。
IPアドレスは、ほぼユニークで2万以上あって、ネットワーク帯域指定ではじくことができず...。
ユーザーエージェントは固有っぽかったので、とりあえずユーザーエージェントで弾く

    <Directory /usr/local/apache/htdocs>
    BrowserMatch "ユーザーエージェント名" ddos_app
    SetEnvIf User-Agent "^$" spam_ua
    Order allow,deny
    Allow from all
    Deny from env=ddos_app
    Deny from env=spam_ua
    </Directory>
  • iptables stringモジュールで弾く
iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string "ユーザーエージェント名" -j DROP

iptables stringモジュールで弾くとApache側に接続だけは残るようで408エラーが返ってしまう。
そうすると、apacheのリソースを食いつぶしてしまうので、Apache側でTimeoutを10秒に設定する。

表題と全く関係ないけど面白い物を見つけたのでメモ

iptablesでpassive os fingerprinting でフィルターをかけるプラグイン