Raspberry Pi 4 WordPressにAWS WAF入れてみた

AWS

約 7 分で読めます。



この記事の続き。
CloudFrontを入れたことで、お次はCloudFrontにAWS WAFを取り付けてみます。



CloudFrontはAWS製のキャッシュサーバー。
ここにAWS WAFとしてWeb Application Firewallをアタッチさせることができます。
便利な世の中になったものだ。

AWS WAFはルールベースのWAFです。
セキュリティ製品としての分類はModSecurityと同じと考えていいと思います。
 当然それぞれが抱えているルールは差異がある。

機械学習ベースではGuardDutyという製品がある様子。
AWSが持つ膨大な機械学習のノウハウを使うことで最新の攻撃・未知の攻撃にも対応可能といったウリ文句の模様。
これは今後試してみたいと思います。

AWS WAFの利用料金

AWS WAFの料金は以下。



自分が試した設定は以下の通り。
 ・1 WebACL
 ・6 Rules

↓の通り「WordPress」という名前のACLを作り、そこに6つのルールを入れてみました。
入れたルールはなんとなくWordPressに関係しそうなものとしています。



仮にアクセスが50000リクエストだとすると、毎月の金額は以下となりそうです。
 リクエスト≠PV

・5USD x 1WebACL = 5USD
・1USD x 6Rules = 6USD
・0.60USD x (50000/1000000) = 0.03USD

合計 11.03USD

システム構成

AWS WAFを入れる前は以下の構成でした。

クリックで拡大画像を表示



AWS WAFを入れることによるシステム構成は以下。
CloudFrontにAWS WAFがアタッチされ、コンテンツサーバー(ラズパイ)に到達する前に攻撃パターンを拒否するようになります。

クリックで拡大画像を表示

メリット

コンテンツサーバーの修正なくWAFを導入できる。
これに尽きると思います。

ModSecurityですと、

サーバーメンテナンスの告知
サーバー停止
ModSecurityをApache/Nginxにモジュールとしてインストールし有効化
サーバー起動
サーバーメンテナンス終了の告知

と手間がかかる上、サービスを停止/再起動させる必要があります。

AWS WAFであればCloudFront(あるいALB等)にアタッチさせるだけで良いので、サーバー本体には何も手を入れなくて済みます。

デメリット

先ほども少し書きましたが、月額課金制であること。
これではないでしょうか。

また、適用したいルールによってはルールを使うこと自体に料金がかかるようです。

例えば↓の画面上部にPaid rule groupsとあります。
これらのグループに属しているルールは使うことで別途料金がかかると予想できます。



このように、ルールをたくさん使って防御力を高めれば高めるほど支払うお金も高くなります。
ですので、本当に必要と思えるルールのみ適用する必要があり、精査に時間を要しそうです。

導入手順

AWS WAF側の設定

まずAWS WAFに移動します。

Create web ACLとします。



CloudFrontにアタッチさせたいので、Resource typeCloudFront distributionsにします。
Nameは自分がわかる名前を適当に入力。



CloudFrontディストリビューションを追加するためにAdd AWS resourcesをクリック。



CloudFrontディストリビューションがあるならここでプルダウンに出てくるので、選択してAdd



追加されたことを確認してNext



適用するルールが空です。
これから入れていきます。
Add rulesをクリック。



今回はすでに用意してあるルールを使います。
Add managed rule groupsを選択。



AWS managed rule groupsということでAWSが用意してくれているルールがありそうです。
クリックして開いてみましょう。



具体的なルールが出てきます。
自分の環境/設定だと1500WCUsという容量上限が。
この範囲内で入れられるだけ入れてみます。



このように1500WCUsぴったりとなりました。



次の画面はSet priority、ルール間優先度の設定。
ひとまず何もせずにNext



Configure metricsとなります。
ひとまずここも何も変更せずにNext



各設定を確認します。
問題なければCreate web ACLします。



無事にACLが作られました。

CloudFront側の設定

作成したWeb ACLをCloudFrontにアタッチします。

ディストリビューションの一般編集を選択。



先ほど作成したWeb ACLが出てきますので、選択。



Web ACLを選択して設定変更を保存すれば完了です。

動作確認

個々の具体的なルール内容は確認できないのですが、とりあえずWAF自体が動作していることは以下の手順で確認できました。

代表的な攻撃パターンであるhttps://holidaysfun.org/xmlrpc.phpを入力してGETすると、以下の通り拒絶されたことがWAFのOverviewで確認できました。



ユーザー側もこの通りHTTP 403で拒絶されています。

終わりに

いかがでしたか。

当然ですが、この記事通りの設定では使い物にならないと思いますので、ご自身の手で適用するルールの見直しや優先度付などの設定及び精査は行っていただければと思います!

Comments

タイトルとURLをコピーしました