とあるサイトで負荷が高くなっていたので、アクセスログを見てみたところ、とあるURLからのアクセスが不自然に集中していました。
それは「s0.2mdn.net」で、調べてみると悪質なマルウェアであることが分かりました。確かにアクセス元のIPはバラバラだったので、最初は不正アクセスでないように見えたのですが盲点でした。
それはそうと、このマルウェアからのアクセスは遮断したほうがよい、との判断に至ったのでどう制御しようか悩んだところ、ちょうど AWS WAF を使っていたので、リファラーでアクセス制限してみました。
ちなみに、Classic での設定方法となります。
今回は、AWS マネジメントコンソールで設定していきます。
目次
Web ACLs の作成
Web ACLs の作成は割愛します。
「test-acl」がある前提で以下記載します。
対象条件の作成
特定の条件に当てはまるアクセスを制御するために、何を条件とするかここで設定します。つまり、今回の例ではリファラーが「//s0.2mdn.net」になっていることを条件とします。
String and regex match conditions → Create condition
下記図の赤枠のボタンを順番にクリックし、設定画面に遷移します。
設定画面に遷移したら、以下入力します。
- Name:test-confitions
- Region:Asia Pacific(Tokyo)
- Type:String match
- Part of the request to filter on:Header
- Header:Referer
- Match type:Contains
- Transformation:Convert to lowercase
- Value is base64-encoded:未チェック
- Value to match://s0.2mdn.net
Add filter
入力したら、Add filter 押します。すると、「Part of the request to filter on」のところに作成した条件が表示されます。
Create
そして Create 押します。
これで対象条件の作成は完了です。
ルールの作成
WAF はルールに従ってアクセス制御します。
そこで上記で作成した対象条件を適用したルールを作成します。
Rules → Create rule
下記図の赤枠のボタンを順番にクリックし、設定画面に遷移します。
設定画面に遷移したら、以下入力します。
- Name : test-rule
- CloudWatch metric name : 自動でCloudWatch metric名が入ります。
- Rule type : Regular rule
- Region : Asia Pacific(Tokyo)
Add conditions
ここでどの対象条件を適用するか選択します。対象条件と一致している場合に適用する「does」、一致していない場合に適用する「does not」を選択します。
また、今回は文字列マッチなので、フィルタリングの種類をそのように設定します。
- does or does not:does
- match at least one of the filters in the string match condition を選択
- 先ほど作成した「test-confitions」を選択
Create
そして Create 押します。
これでルールの作成は完了です。
WAF にルールを適用してアクセス制御する
適用させたい Web ACL を選択し、上記で作成したルールを適用させます。
Web ACLs → ACL(test-acl) 選択 → [Rules]タブ → Edit web ACL
下記図の赤枠のボタンを順番にクリックし、設定画面に遷移します。
設定画面に遷移したら、以下入力します。
- Rules:先ほど作成した「test-rule」を選択
- Add rule to web ACL 押す
- 作成したルールにマッチしたら拒否(Block), ルールにマッチしない場合は許可(Allow)なので、今回は「Block」
Update
そして Update 押します。
これでアクセス制御の設定は完了です。