しばらくメールを見ていなかったので気付かなかったのだが、LoadAverageが高いというメールが来ていたみたいだ。ウェブが見れなくなった状態にはなっていないようで、負荷もたいしたことないのでZabbixからはメールは来てなかった。
apacheのログを確認してみると、コメントスパムのプチDoS攻撃らしい(進行形である)。
ちょっと眠いし、ちょっと今は気分的にもそんなにかまってられないので、IPひろばで所有IPアドレスのリストを調べてセグメント単位でめめたぁーっとiptablesでDropしてやった。
こんな感じに、テキストエディタでずらっと書いて実行するとLinuxならまるっとやってくれる。
iptables -I INPUT -s ***.***.***.0/19 -j DROP iptables -I INPUT -s ***.***.***.0/20 -j DROP iptables -I INPUT -s ***.***.***.0/16 -j DROP iptables -I INPUT -s ***.***.***.0/19 -j DROP
ひどいとこは/16でガッツリいってやった。
何もないIPも含めてごっそりとこれだけの数をDROPしたのですぐに収まったんだけど、GmailでLoadAverageの通知メールを見ると何故か時刻がおかしい。まさかのこのDoSでNtpdがやられてしまったのかと不安になった。
ntpdateで時計を合わせようとすると
the NTP socket is in use, exiting
というもんが表示されて調整ができないらしい。ググってみたらすでにntpdateプロセスが動いている状態で出来ないんだという事らしい。なんだそりゃあと仕方ないのでKILLして、/etc/ntpd.confには現在ntp1.sakura.ad.jpが入ってるけど、念のため別のパブリックなNTPサーバーも入れてntpdを再起動してみた。
しかし時間は変わらなかったのだあ。何故だ。
DoSの影響でまさかVPSそのものがやられてしまったのかと思ったけど、そんな訳はなかった。
いろいろ見ていると何かおかしい何かが。
まさかと思ったけど、Windowsがntpサーバーと同期できてなかった!
まさかこっちの環境とは。
こんなオチが待っているとは思わなかったけど、設定画面で別のntpサーバーにセットアップしたら即解決した。
あ~あ、部屋の時計を見たらもっと早く解決したのになあと今になって思うし、すこしだけ首をひねるだけのことだったんだけど、それを怠ってPC内(見えてる範囲)でやろうとしたことが今回な間抜けな騒動の原因になってしまったのだった。
うん、それでは。
対策もやってみよう。
Dosdetectorはもっとでかいやつに使いたいので閾値は変更せずに、今回はなによりfail2ban弾幕薄いぞ、何やってんの!状態だったのでwp-commentsのスパム対策にフィルターを作ってみましたってほどは出来ないので、ググったらムーバブルタイプのものがあったのでそれを改造したんです。
vi /etc/fail2ban/jail.conf [apache-wpcm] enabled = true filter = apache-wpcm action = iptables-multiport[name=apache-wpcm, port="http,https", protocol=tcp] logpath = /var/log/httpd/access_log findtime = 60 bantime = 166400 maxretry = 2
vi /etc/fail2ban/filter.d/apache-wpcm.conf [Definition] failregex = ^<HOST> -.*"POST /wp-comments-post.php.*$ ignoreregex =
こんな感じになりました。
んでさ。これまたずっと気づいてなかった事があって、なおかついつから起きてたのかも分からないんだけど、fail2banでエラーが出ていたようで上手く動いてなかったらしい。んでそれはfalseで除外しました。
そしてまたまた今回初めて知ったんだけど、iptablesを再起動した後は、fail2banも再起動しないとiptablesを使ったものは有効になってないので、気を付ける必要があった。そして結構悩まされたんだけどフィルタの名前が長すぎてもエラーになるらしい。
ではでは修復完了~ってことで、iptables -Lでチェックすると今度はちゃんとIPアドレスが登録されていた。
Chain fail2ban-apache-wpcm (1 references) target prot opt source destination REJECT all -- 192.187.112.42 anywhere reject-with icmp-port-unreachable REJECT all -- 204.12.239.210 anywhere reject-with icmp-port-unreachable REJECT all -- 192.151.152.90 anywhere reject-with icmp-port-unreachable REJECT all -- 142.54.174.162 anywhere reject-with icmp-port-unreachable REJECT all -- 192.187.106.242 anywhere reject-with icmp-port-unreachable REJECT all -- 192.187.99.66 anywhere reject-with icmp-port-unreachable REJECT all -- 192.151.152.106 anywhere reject-with icmp-port-unreachable REJECT all -- 142.54.168.202 anywhere reject-with icmp-port-unreachable REJECT all -- 142.54.186.122 anywhere reject-with icmp-port-unreachable REJECT all -- 192.187.106.210 anywhere reject-with icmp-port-unreachable REJECT all -- 173.208.136.34 anywhere reject-with icmp-port-unreachable REJECT all -- 192.151.145.250 anywhere reject-with icmp-port-unreachable REJECT all -- 192.151.152.146 anywhere reject-with icmp-port-unreachable REJECT all -- 192.151.147.62 anywhere reject-with icmp-port-unreachable REJECT all -- 192.151.152.122 anywhere reject-with icmp-port-unreachable REJECT all -- 142.54.186.250 anywhere reject-with icmp-port-unreachable REJECT all -- 198.204.230.130 anywhere reject-with icmp-port-unreachable RETURN all -- anywhere anywhere
ざーっとみるとセグメントで切ってもよさそうなものもあるけど、単品でやった方が、冤罪ではないが何もないユーザーが見れなくなるよりはずっと良い感じはする。
ただ、海外から見に来てくれることはほぼないので、やはりセグメントで切ってもよさそうなんだけどね。まあこのまま様子を見るとしますか。
あ、あとはfalseで除外にしたfail2banのフィルタもちょっと具合を見ないといけないなあ。PC自作についてもまた記事を見つけたのでちょっとやりたいけど、フルパワーを使うベンチがまだできないので少しおあずけでござるな。
「まさかそこが間違っていたとは」への2件のフィードバック