ヤマムギ

growing hard days.

*

WordPressのwp-login.php , xmlrpc.phpへのアクセスをAWS WAFで接続元IPアドレスを制限する

      2017/08/13


AWS CloudWatch LogsエージェントでAmazon EC2上のNginxのaccess.log , error.log , php-fpm error.log , Linuxのmessages , secureログを収集するという記事でブログサイトのアクセスログを確認した結果、wp-login.php , xmlrpc.phpへのアクセスが結構ありましたので、自IPアドレス以外からのアクセスを禁止しようと思いました。

WAF以外の方法の検討

VPC ネットワークACL

そもそも不審なアクセスをしてくるIPアドレスをブラックリスト登録しようか、と思いましたが、上限が20なので管理が大変そうなのでやめました。

NginxのConfigでAllow,Deny登録

CloudFront経由なのとSSHで入って設定を頻繁に変えるのも面倒なのでやめました。

WAFの設定

AWS WAFをマネジメントコンソールで開いてWeb ACLを新規作成します。
Web ACL NameとCloudWatch metric nameは任意で設定します。

リージョンはCloudFrontに設定するのでGlobalにしました。

自分のIPアドレスだけを許可したいのでIP match conditionを設定します。

Nameは任意です。
Address には例えば「111.111.111.111/32」のように設定して[Add IP address or range]をクリックして下部のconditionに設定されたら[Create]をクリックして作成します。

次に該当するURIを指定するので、String match conditionsを設定してます。

Nameは任意です。
* Path of the request to filter on : URI
* Match type : Contains
* Transformation : None
* Value to match : wp-login

[Add filter]をクリックします。

同じように xmlrpc.php についても設定します。
※wp-adminについてはadmin-ajax.phpが必要でしたので制限するのをやめました。

次にルールを作成します。

Name , CloudWatch metric nameは任意です。
Rule Typeは Regular ruleにしました。

conditionsを追加していきます。

IPアドレスは自分のIPアドレスなので 「does not」にします。
このIPアドレス以外の時に、です。

URIパスは 「does」にしてます。
このパスにアクセスしようとしたら、です。

※このままルールをアクションに設定をしようとしたらなぜか出来なかったので、デフォルトのアクションを「Allow all requests that don’t match any rules」に設定してとりあえず作りました。

作った後に[Web ACLs] – [Rules]で先ほど作ったルールとアクションを「Block requests」にして設定しました。

WAFのWeb ACLを作成するときにCloudFrontの設定をついでにしていましたが、他のサイトにも共通の設定としたいので、他のサイトのCloudFrontへも設定します。

確認

CloudFrontのstatusが Deployed になったら設定完了です。

スマートフォンでWiFiを切って、サイトに普通にアクセス出来ることを確認します。

次にURLに 「/ep-login.php」や「/wp-admin/」でアクセスしてみます。

Blockされました。

CloudWatchダッシュボードにメトリクスからグラフを作ってみてみます。

オレンジが普通のアクセスで、青色がブロックされたアクセスです。

それなりに外部からアクセスされようとしているのが分かりました。

グローバルIPアドレスについて

自宅のIPアドレスは固定IPにはしてませんので、変更する可能性があります。
そのときはWAFのコンディションを変更するだけで対応出来ます。

料金について

AWS WAF料金

2017年8月12日現在

  • Web ACL一つあたり $5/月
  • ルール一つあたり $1/月
  • 100万リクエストあたり $0.6

なので個人でやるには少しコストがかかるイメージがありますが、他の同等のサービスと比べると安価ではないかと思います。
また、余計な不正アクセスのためにスペックをあげるくらいであれば、こちらの方が安価でかつセキュリティレベルもあがるのでメリットは大きいのでは、と思います。

@yamamanx

開発ベンダー5年、ユーザ企業システム部門通算9年、ITトレーナー1年目のSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。

このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。

また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。

 - AWS , ,

ad

ad

  関連記事

AWS Lambda(Python3)でSelenium + Chrome Headless + でwebスクレイピングする

インターネット上に公開されている情報をDynamoDBにつっこみたいだけなので、 …

サイトのHTTPステータスを5分おきにチェックして200以外ならSlackに通知する

すいません。ここ最近出費が重なりまして、某監視サービスのプランを有料プランからF …

kintoneでEveryoneに権限が設定されているアプリをAWS Lambdaで一括チェックする

こないだ、kintone Cafeでユーザーが自由に作成している環境だと、どんな …

AWS EC2でAMI(Amazon Machine Image)を作成しておく

前回まででひとまずRedmineを構築するところまで出来たので、念のためスナップ …

AWS EC2 Amazon Linuxにmauticをインストールする(Sendgrid, Nginx, MySQL on RDS)

mauticをAmazon LinuxとNginx,MySQL on RDSにイ …

JAWS-UG Osaka 第14回勉強会 「DIY」 〜自社内システムを作る側からの物申す〜に参加、運営、登壇しました

先日、JAWS-UG Osaka 第14回勉強会 「DIY」 〜自社内システムを …

AtomエディタでEC2のファイルを直接編集する

Webページを編集していてEC2のファイルをvimエディタでさわったりしています …

「雲勉 第1回【勉強会:新技術好き!】AWSマネージドサービス勉強会」に行ってきました

「雲勉 第1回【勉強会:新技術好き!】AWSマネージドサービス勉強会」に行ってき …

AWSのAmazon LinuxにGitマスターサーバをインストールしてRedmineリポジトリブラウザで見る

Amazon LinuxにGitをインストールする Gitをインストールして自動 …

AWS Well-Architected フレームワークによるクラウド ベスト プラクティスのセッションを聞いたので自アカウントの環境を確認してみる

AWS Summit Tokyo 2017で「AWS Well-Architec …