WordPressで多くのサイトを運営しているのですが、どうも時々DDoS攻撃っぽいアクセスバーストが見られるので対策をすることにしました。
アクセスログから怪しいアクセスを分析
上のグラフを見ると9:00代にCPU負荷が高くなっているのでその周辺のApacheアクセスログを見ると以下の怪しいアクセスを発見。
- WordPressのxmlrpc.phpへのアクセスが頻繁に見られる
- CONNECTメソッドアクセスが頻繁に見られる
- 特定のIPアドレスから存在しないURL(自動生成したアドレスっぽいパターンがある)へのアクセスが頻繁に見られる
apacheの設定ファイル内でアクセスブロックするように設定して対応することにしました。
具体的にはsecurity.confファイルを作成し、その中で設定、httpd.confでsecurity.confを読み込むように設定しました。
WordPressのxmlrpc.phpへのアクセスブロック
xmlrpc.phpはDDoSの温床にされやすいみたいですね。検索するとたくさん情報が出てきます。
ってことで以下の記載を追加。
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
CONNECTメソッドのブロック
HTTPメソッドの中の一つがCONNECTですが、これはプロキシサーバに対して、あるURLに接続したいと要求する場合に使うメソッドです。
そんなメソッドをうちのサーバに向けて送っている時点で怪しい。。。
ってことでGETとPOST以外はブロックする形にしました。
<LimitExcept GET POST>
order deny,allow
deny from all
</LimitExcept>
特定IPアドレスからのアクセスブロック
こちらはある特定にIPアドレスから存在しないURLに大量のアクセスログが残っていました。
例えば、
- s_se.php
- s_e.php
- beence.php
- ups.php
などなど。。。
以下のサイトでIPアドレスを調べると完全に怪しいIPアドレスとしてデータベース登録されているので明確にブロック。
<RequireAll>
Require all granted
Require not ip xxx.xxx.xxx.xxx
</RequireAll>
最終的なsecurity.conf
最終的に以下のような記述になりました。
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
<Directory /[wordpress設置ディレクトリ]>
<LimitExcept GET POST>
order deny,allow
deny from all
</LimitExcept>
<RequireAll>
Require all granted
Require not ip xxx.xxx.xxx.xxx
</RequireAll>
</Directory>
まとめ
同一サーバ上で複数のWordPressを運営しているので.htaccessではなく、apacheのconfファイル内で設定しました。今後、別の怪しいアクセスがあったときはこのファイルに追記していこうと思います。