どうするとベストなんだろう?
このブログは全っ然問題外なので平和そのものなんだけど、あるサイトのトラックバックスパム対策で結構悩みちゅう。
ことのはじまり
誤検知を嫌って、明らかにスパムなものも一応データとしてはDBに持っておき、リカバリー可能な実装になってた。しかし、メンテに手が廻らず超増大したデータ量に耐え切れず色んな問題を抱えてた。
例えば遅いクエリーに起因するスローダウンだったり、バックアップにとても時間がかかるなど。
暫定対応
そこで、バックアップ取ったうえでザックリ古いデータはDB上から削除した。
これだけでシステム的には結構安定感が出てきたんだけど、そもそもこれだけ超大量のスパムトランザクションを捌くのって、無駄じゃん?負荷を捌くのも馬鹿にならないし。と、いうことで、あきらかにスパマーなホストからのアクセスをhttpdレベルで制限してみた。
別の問題に発展し…
そうしたら今度はなんと、httpdのエラーログがハンパないことに。。。
まぁ、おそらくスパマーの使ってるスパム送信システムが、HTTPのエラーコードを受け取ると正常終了するまで一定間隔で再送するような実装になってるんだろうと想定し、こっちも馬鹿正直にエラーを返すのは止めてiptablesでDROPするようにしてみた。
これでスパマー側もタイムアウトするまで待ちが発生するハズなので、異常な量のスパムが少しは減る。ハズ。