そもそも anonymous proxy なんて立ち上げてはいけない、私も分かっていました。
分かってはいるけれど、reverse proxy を立ち上げたときに、設定ミスにより reverse proxy 兼 anonymous proxy として立ち上がってしまった、それが始まりでした。
立ち上げた後は、
「reverse proxy 立ち上がった。順調順調~」
とおめでたい気持ちで過ごしていたのですが、
「なんか最近 reverse proxy をしているマシンがすごく不調。
ロードアベレージは、っと、、、8!?、たまたまなのかな、、」
「しばらくしても変わらないな」
「topでプロセス監視、っと、、、httpdがcpu食ってる!?ログを見よう」
ここでどかーっとログが流れます。
GET http://xxx.xxx.xxx/xxx.html
のように、このサーバに存在しない絶対URLへのアクセスばかり。
そう、proxyアクセスです。
さてどうしよう、そんなとき。
何はともあれ、 anonymous proxy を止めましょう。apacheの設定を変更して再起動します。
でも、 サーバに存在しない絶対URLへのアクセスは止まりません。相手方はプログラムを使って自動的にアクセスしてきてるんでしょうから、想定の範囲内です。
たぶん、しばらく待ってたら止まります。何度かアクセスしてみてだめだったらリストから外す機能もきっと組み込まれているからです。
だからといって異常なアクセスをすさまじい勢いでされているわけで、気持ち悪いことこの上ありません。anonymous proxyに機械的にアクセスしてくる方たちの使い道を考えると、一層ウツです。
こちらも機械的に積極的なブロックをしようと思い、Fail2Banを導入しました。
こちらの動きを簡単に説明します。
- 指定したパスのログファイルに、
- 指定したパターンが指定回数現れたら(FAIL)、
- iptablesコマンドを実行して指定期間アクセスをブロックする(BANG)
SSHへのアタック対策が主な使い方だと思います。
今回のケースでは、 以下のような感じにしました。
- apacheのアクセスログファイルに、
- 絶対URLへのアクセスが1回現れたら、
- 相手のマシンのIPアドレスからのアクセスを1週間ブロックする
ちなみに、発動するたびにメールを送信させてみたところ、1分間に 22アクセスくらい来ていました。これだけのproxyアクセスをさばいていたかと思うと、おお、もう…。
最初のうちはFail2banに発動対象のIPのwhois情報を参照させていたのですが、中国韓国の割合が非常に高かったです。
ちなみに、大量に発動しているときにwhois情報を参照するのは、whois参照の遅さが原因で Fail2Ban が機能不全に陥ることがあるので注意が必要です。
さて、Fail2Ban をしかけてしばらくするとアクセスがなくなりました(*)。
もちろん決してさみしくはありません。
* 主たる要因はanonymous proxyを止めたことにありますが、少しだけやってやった感がありました。nonymous proxyを立ち上げたやってしまった感とプラマイゼロくらいです。