AWS WAFを使用してIPアドレスをフィルタリングする手順

## はじめに
最近、どんな攻撃があり、どのように対策をすべきかの記事をまとめました。

https://qiita.com/kimuni-i/items/458a5809e4bb6859fd2b

今回は、AWSでは、どのような設定を行う事で対策を取る事が出来るのか、具体的な話をしようと考えて、「AWS WAFを使用してIPアドレスをフィルタリングする手順」の記事を作成しました。


## 事前準備

#### リージョンの選択
AWS WAF を使用する前に、どのリージョンで WAF を使用するかを選択する必要があります。

![スクリーンショット 2023-04-15 12.41.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/899b0dfe-e5af-d2c8-f169-4c70a4dc0765.png)

#### リソースの選択
AWS WAF で IP アドレスをフィルタリングする場合、フィルタリング対象となるリソースを選択する必要があります。WAF の適用先は、Amazon CloudFront、Amazon API Gateway、AWS Application Load Balancer、AWS Elastic Beanstalk、AWS CloudFormation スタックなど、様々なリソースに対して設定できます。

#### ALBの場合
![スクリーンショット 2023-04-15 12.52.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/f44bbc7d-315c-6014-5233-24e8bd434a93.png)

#### ルールの作成
AWS WAF で IP アドレスをフィルタリングするためには、ルールを作成する必要があります。ルールは、IP アドレス帯域や単一の IP アドレスを指定することができます。また、AWS Marketplace から提供されるアプリケーションを使用して、IP アドレスフィルタリングを行うこともできます。WAF（Web Application Firewall）では、IPセットを作成して管理し、
自分自身のルールやルールグループで使用できます。

## AWS WAFを使用してIPアドレスをフィルタリングする手順概要

| 手順 | 説明 |
|------|------|
| **1. AWS WAFの設定** | AWS Management Consoleにログインし、AWS WAFのコンソールに移動します。 |
| **2. Web ACLの作成** | 「Create web ACL」をクリックし、Web ACLの名前とリージョンを指定します。 |
| **3. ルールの作成** | 「Add rules」ボタンをクリックし、「IP set」を選択します。 |
| **4. IPセットの作成** | 「Create IP set」をクリックし、IPセットの名前とリージョンを指定します。IPセットにフィルタリングしたいIPアドレスを追加します。 |
| **5. ルールの設定** | 「Add rule」をクリックし、ルールの名前を指定します。「IP set」を選択し、先ほど作成したIPセットを選択します。「Action」で「Block」を選択します。 |
| **6. Web ACLにルールを追加** | 「Add rule to web ACL」をクリックし、ルールをWeb ACLに追加します。 |
| **7. Web ACLの適用** | 「Add AWS resources」をクリックし、適用するリソースを選択します。 |

## IPセットをWAFのルールやルールグループで使用する方法

AWS Management Consoleにログインし、WAFダッシュボードに移動します。
左側のメニューから「IPセット」をクリックし、IPセットの管理画面に移動します。

![スクリーンショット 2023-04-15 12.59.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/80b823fb-e7a7-c357-7ca3-b3f9dfd02a8d.png)

## Create IP set
「Create IP set」をクリックして新しいIPセットを作成します。IPセットは、IPアドレス、CIDRブロック、またはAWSリソースのARNを含むことができます。

![スクリーンショット 2023-04-15 13.04.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/b38bc4b0-d41e-c74c-f081-89f96b751a8b.png)

IPセットをルールやルールグループで使用するには、ルールまたはルールグループを作成する必要があります。
ルールグループには複数のルールが含まれるため、ルールグループを作成することをお勧めします。


## Web ACL の作成　(Web ACLには、最大で10個のルールグループを追加できます。)
WAF のルールを適用するには、Web ACL (Web Access Control List) を作成する必要があります。Web ACL は、WAF のルールセットを含んでおり、選択したリソースに対して適用されます。Web ACL では、ブロックする前に、WAF のログ設定、AWS Kinesis Data Firehose ストリームへの送信、CloudWatch ロググループへの送信などの設定を行うこともできます。

## Create web ACL
Web ACL（アクセス制御リスト）を作成することで、Webトラフィックを監視し、悪意のあるトラフィックをブロックすることができます。
![スクリーンショット 2023-04-15 12.33.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/7ae2116c-06bc-3704-afa7-fd22518de600.png)

## Add rules and rule groups
事前定義済みのルールグループを提供していますが、ユーザーは独自のカスタムルールグループを作成することもできます。

:::note info
__AWS WAFルールグループで使用できる一般的なルールの例__
**IPアドレスブロックルール** 
特定のIPアドレスからのトラフィックをブロックします。
**SQLインジェクションルール**
SQLインジェクション攻撃を検出し、ブロックします。
**クロスサイトスクリプティング（XSS）ルール**
XSS攻撃を検出し、ブロックします。
**コマンドインジェクションルール**
コマンドインジェクション攻撃を検出し、ブロックします。
**リモートファイルインクルージョン（RFI）ルール**
RFI攻撃を検出し、ブロックします。
**有害なボットルール**
スパムボットや不正なボットのような有害なボットを検出し、ブロックします。
:::

AWS WAFは、AWS Marketplaceからルールグループを購入することもできます。
![スクリーンショット 2023-04-15 12.55.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/fa1756f6-8ac6-648d-45d7-afdbdfad409d.png)

## IP set　対象を絞ります
ルールのアクションに従って、トラフィックをブロックまたは許可します。
![スクリーンショット 2023-04-15 13.11.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/63fe4675-1042-a24b-535d-03f6f5ac5245.png)

__Default web ACL action for requests that don't match any rules__
Web ACLには、複数のルールが含まれています。ルールは、Webアプリケーションに対する攻撃を検知するための条件式です。条件式が該当する場合、AWS WAFは、ルールのアクションに従って、トラフィックをブロックまたは許可します。

Web ACLの設定で重要なのは、ルールに該当しないリクエストを処理する方法です。AWS WAFは、リクエストに対してルールが存在しない場合、デフォルトで「アクションなし」を返します。これは、トラフィックを許可することを意味します。ただし、このデフォルトのアクションは変更することができます。

AWS WAFでは、Web ACLの詳細ページにアクションの設定があります。ここでは、「リクエストに該当しない場合のアクション」を変更することができます。この設定を使用して、AWS WAFがルールに該当しないリクエストに対してどのようにアクションを実行するかを変更することができます。
![スクリーンショット 2023-04-15 13.13.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/bc3e19c7-0bff-13d3-4971-1d364b167838.png)

## Set rule priority
ルールの優先順位は、ルールが適用される順序を決定します。つまり、AWS WAFは、優先順位が高いルールから順にチェックし、最初にマッチしたルールに基づいてアクションを実行します。
![スクリーンショット 2023-04-15 13.14.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/6166a091-5b80-62de-d047-350d395e9e63.png)

## Configure metrics
WAFが検出したWebトラフィックのメトリクスをCloudWatchに送信し、分析やアラートの設定ができるようにする機能があります。

AWS WAFはサンプリングされたリクエストをCloudWatchメトリクスに含めるようになります。サンプリング率はデフォルトで1％ですが、必要に応じて変更することができます。

AWS WAFのサンプリング機能を使用すると、CloudWatchメトリクスに大量のリクエストを送信する必要がなくなり、トラフィックを監視する負荷が軽減されます。ただし、サンプリングを有効にすると、メトリクスが不正確になる可能性があることに注意してください。サンプリングされたリクエストが代表的なものでない場合、メトリクスに偏りが生じる可能性があります。
![スクリーンショット 2023-04-15 13.14.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/c9fbf17c-59d7-c93a-ad9a-39b3df43c134.png)

## Create web ACL
![スクリーンショット 2023-04-15 13.15.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/fdcdf8ed-53b5-5b6d-7dcb-2f5389ffabec.png)

## 作成完了
![スクリーンショット 2023-04-15 13.17.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/bb8a31f6-040b-5d13-b90d-4351764e3405.png)

## Web ACLの確認
![スクリーンショット 2023-04-15 13.18.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/489549ef-6ddc-91d0-bb51-7452d1127516.png)

## Web ACLの確認　Details
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/430e8700-43f7-bf49-0f46-7b8e1d500f85.png)


## Web ACLの確認 Json
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920213/151a0397-68f4-8be3-9b2d-d706735e5f2d.png)

### 読んでいただき、ありがとうございました。