第三tDiary.Net への DoS が発生した時に「どこからだ?」と探すのに、grep
とか awk
とか sort
とか使って、次のように IP アドレスを特定している。
% cat tdiary_access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10
これでアクセスが多い IP アドレスの上位10個が表示される。例えばこんな感じ。まぁ、いちおう IP アドレスの詳細は隠しておこう。
% cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -10
7968 107.x.x.x
9960 74.x.x.x
15081 104.x.x.x
15082 104.x.x.x
15109 104.x.x.x
15200 104.x.x.x
15902 74.x.x.x
17336 68.x.x.x
17712 68.x.x.x
17866 68.x.x.x
現在ほとんど更新されていない日記へのアクセスも多くて、それらの合計が15,000件をオーバーしているとか、明らかに異常な状態ではある。ちなみにこの例のログは weekly ローテーションの設定をしていて、まだローテーション前の状態(つまり、まだ、今週の合計値ではない)。
で、今は上記の方法で IP アドレスを特定し、iptables
の REJECT に設定して BAN しているのだけど、そろそろそういう時代じゃないよな、という思いが募ってきた。
世の中では Fluentd + Elasticsearch + Kibana によるログ監視が流行ってたりするようだし、ちょっとその構成を作って、DoS アクセス元の特定をブラウザベースで行える環境を作ってみよう。
DoS から始まる開発、DoS Driven Development の始まりである。