WordPressのxmlrpc.phpに対する攻撃って結構頻繁にあるものなんですね。インターネットで検索すると色々対策されている記事を見かけますが、実際に自分のサイトが攻撃の対象になるとは思っていませんでした。
.htaccessやxmlrpc.phpのパーミッションで対応する方法などいくつかあるようですが、sshなどでサーバーに接続ができない環境にある時などはすぐに対応するのはなかなか難しいです。そこで今回はAmazon Web Services VPCのセキュリティ、Network ACLsのファイアウォール機能を使って、ブラウザからAWS Management ConsoleにアクセスさえできればIP制限できる方法で対策してみたいと思います。
Network ACLsについてはこちらを参考にしてください。
ネットワーク ACL – Amazon Virtual Private Cloud
ある時、アクセス数が増加してサーバーへの負荷が急にかかり始めました。Scalingしてもある程度時間が経つと同じ状況になってしまいます。アクセスログを確認してみたところ
2017-02-27T23:00:33.822147Z example.com 51.00.00.00:54628 172.00.00.00:80 0.000029 0.236676 0.000022 200 200 250 370 “POST http://54.00.00.00:80/xmlrpc.php HTTP/1.0” “Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)” – –
のアクセスログが多発していることがわかりました。
急いでIPアドレスによるアクセス制限をしないといけません。
まずはVPC Management Consoleを開きます。
左サイドバーの「Your VPCs」(赤枠内)をクリックすると、VPCの一覧が表示されます。一覧より該当のVPCを選択すると、画面右下部にそのVPCのNetwork ACLが表示されるので、そのリンクをクリックします。
今度はVPCに紐付くNetwork ACLの設定画面がが表示されます。アクセス制限は画面下部の「Inbound Rules」タブで設定することができます。
「Edit」ボタンをクリックすると、Inbound Ruleを追加することができます。
「Add another rule」ボタンをクリックして、制限を追加していきます。
この時入力するRule番号は「All Traffic」のRule番号より小さい値にして優先度を上げないとアクセス制限がきかなくなってしまうので100より小さい値にします。「Type」と「Protocol」でプロトコルを、「Source」のところにIPアドレスをサブネット(例192.168.2.0/24)で指定します。アクセスできないようにするにはDENYを選びます。
Inbound Ruleの設定を反映させるのに、「Save」ボタンをクリックします。
IPアドレス制限がされているかELBのRequest数を確認してみると、急激に減少していることがわかります。無事にIPアドレス制限が効き始めましたね。負荷も落ち着き始め、自動でScalingされたインスタンスもTerminateされていきました。これで取り急ぎのIPアドレス制限はオッケーですね!