buffer over flow 狙いのワームのログを残さない
ずいぶん前から気にはなっていたんだけど放置していた。しかし自分のサーバのログのほとんどがワーム(だって自分もほどんどアクセスしないし)なだけにこの状態はかなりチェックが難しい。急に思い立ってこのログが記録されないようにする方法を考えた。
失敗ってゆーかそりゃー無理な方法
しばらくこの方法に固執してた(恥ずかしー)
- HTTP Status を元にアクセス制限
- HTTP Status を元に SetEnvIf
無理っす。HTTP Status は実際のアクセスを受け取ったあとでセットされるものだけど、SetEnvIf やアクセス制限は HTTP リクエストヘッダで判断する。まだ Status はセットされてません。
Web で見つけた情報
AGOBOT のログを記録したくない - トラブル雑記帳
「CustomLog で 414 な status になったときの request を記録しないフォーマットにする」
って方法。CustomLog を変更しちゃうのが微妙に気持ち悪いけど、これは確実でなおかつ早い。上のページでの !414 ってのは通常のリクエストの中の 414 っていうパラメータにも反応しちゃうような気もするけど大丈夫でした。
他に思いついているだけで実践していない方法
- フィルタを書く
- これは Apache の再起動をせずにログの記録について柔軟な設定ができる。(フィルタは Apache と同時に Apache が起動してくれるし、落ちたら Apache が再起動してくれる。)この場合は 414 の status についてアクセスログを記録しないだけだから、まぁなんとか楽に書けそう。
- WAF(Web Application Firewall)で弾く
- mod_security というほんとの WAF でもいいし、mod_reqrite でも弾けるような気がする。Squid は使ったことないんで分からないけど、考え方は mod_rewrite + mod_proxy と同じだと思う。要するにワーム撃退用の Web サーバを本番サーバの前に置くってこと。やり方がタコだと必要なアクセスを弾いちゃう可能性があるのと、今回の目的にはやや大げさな点か。でも本番の Web サーバがより安全になるって意味では応用が効くし、考えてもいいかな。