AWS ALBにWAFを設定して海外からのアクセスを遮断してみる
AWS WAF (Web Application Firewall)
クラウド上で動作するファイヤーウォール
IPアドレスや、国情報、ヘッダーの内容をもとにアクセスを許可、遮断できる
Amazon CloudFrontや、Application Load Balancer (ALB)にデプロイして利用できる
WAF(Web アプリケーションファイアウォール)とは?| AWS
2016年から後発でALBでも使用できるようになったとこと
AWS WAFがALB(Application Load Balancer)で利用出来るようになりました | Developers.IO
目標
- 日本国内からはEC2にアクセス可能
- ALBにWAFを設定し海外からのアクセスを遮断する
アーキテクチャ - 構成図
上が目標物、下はCloudfrontを使用するパターン
基本はweb serverの前に置く、よりクライアントに近い側に設置するのがいいと思われる
既存のALBにWAFを設定する
web ACL (Access Control List)の作成
- ホワイトリスト、ルールなしで作成(すべてのトラフィックを遮断)
- ALBにアクセスできなくなることを確認
Create web ACL
Describe web ACL and associate it to AWS resources
Web ACL details
Name: 任意
CloudWatch metric name: (自動)
Resource type:
CloudFront distributions
Regional resources (Application Load Balancer and API Gateway) #こっちを選択
Region: Asia Pasific (Tokyo)
#後で選択することも可能
Associated AWS resources - optional
Add AWS resources > Application Load Balancer
適当なALBを選択 > ADD
Next
Add rules and rule groups
Rules
#後で追加します
Default web ACL action for requests that don't match any rules
Default action: Block
Default action: Block
とすることでホワイトリスト化、後で追加するルールのみalllowにする
Next
> Next
> Create web ACL
この時点でブラウザからドメインにアクセスすると403エラーを返すことを確認する
Allow Ruleを追加
- Allow Rule (country - JP) を追加
- allow条件でリクエストが成功することを確認
作成したweb ACLを選択して
Rules > Add rules > Add my own rules and rule groups
Rule type
Rule type: Rule builder
Rule builder
Rule
Name: 任意
Type: Regular rule
If a request: matches the statement
#(AND, OR, NOT指定可)
Statement
Inspect: Originates from country in
# 他にIPやリクエストの内容を選択可
Country codes: Japan - Ja
Source IP address #こっちを選択
IP address in header
Then
Action
Action: Allow
Add rule
再びブラウザからドメインにアクセスすると今度はリクエストが成功する
IP address in headerオプションの使用に注意
ヘッダーのIPは書き換えられる場合があり、それによって意図せずアクセスコントロールを通過するリスクが有り、注意が必要
When a request comes through a CDN or other proxy network, the source IP address identifies the proxy and the original IP address is sent in a header. Use caution with the option, IP address in header, because headers can be handled inconsistently by proxies and they can be modified to bypass inspection.
検証
以下のサイトで海外からのアクセスをシュミレート可能
WebPageTest - Website Performance and Optimization Test
Location: Tokyo, Japan 以外で"403 Forbidden"を確認