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のコンディションを変更するだけで対応出来ます。
料金について
2017年8月12日現在
- Web ACL一つあたり $5/月
- ルール一つあたり $1/月
- 100万リクエストあたり $0.6
なので個人でやるには少しコストがかかるイメージがありますが、他の同等のサービスと比べると安価ではないかと思います。
また、余計な不正アクセスのためにスペックをあげるくらいであれば、こちらの方が安価でかつセキュリティレベルもあがるのでメリットは大きいのでは、と思います。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。
「AWS教科書 AWS認定デベロッパーアソシエイト テキスト&問題集 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
関連記事
-
-
AWSアカウントrootユーザーのメールアドレスを変更
昔、うっかり会社の個人メールアドレスで作ってしまったAWSアカウントがあるのでメ …
-
-
ブラウザからJavaScript SDKを使ってAmazon S3 への写真のアップロードチュートリアルをやってみました
ブラウザから Amazon S3 への写真のアップロードをやってみました。 HT …
-
-
LINE Bot APIのファーストステップをLambda+API Gatewayでやってみたらものすごく簡単で驚いた
トライアル当初はホワイトリストのしばりや、初回反応するまで時間がかかったりとみな …
-
-
IAM Access Analyzerの検出をEventBridgeルールで検知して通知する
やりたかったことは使用可能としているリージョンのIAM Access Analy …
-
-
Amazon Bedrock Conversational Builderを使用してAIエージェントを作成してみました
2024年10月16日に「Amazon Bedrock のエージェントが Con …
-
-
ユーザーガイドの方法でGithubからCodeCommitへリポジトリを移行する
GitリポジトリをAWS CodeCommitに移行するを参照しました。 環境 …
-
-
S3バケットにWebフォントをアップロードしてCORSを設定する
Webフォントファイルは、モジワク研究さんのマメロンを使用させていただきました。 …
-
-
RocketChat(EC2インスタンス)でCPU80%以上を10分間継続したら再起動する
先日、数日間のやり取り用で完全に使い捨てとして使っているRocketChatで、 …
-
-
RDS自動バックアップの自動クロスリージョンコピー
このブログのRDS for MySQLはAWS Backupで大阪リージョンから …
-
-
Amazon EC2のスクリーンショットとは
ドキュメント見てたらAmazon EC2でスクリーンショットって機能があったので …












