やりたいこと
リクエストのパスに特定の文字が含まれていた場合に、アクセスできるIPアドレスを制限したい
| ソースIP | パス | 期待値 | 
|---|---|---|
| IPアドレスA | /test/を含むパス | 接続可能 | 
| IPアドレスA | /test/を含まないパス | 接続可能 | 
| IPアドレスB | /test/を含むパス | 接続不可 | 
| IPアドレスB | /test/を含まないパス | 接続可能 | 
example.com/test/hoge/index.html → Aのみ接続可能
example.com/hoge/test/index.html → Aのみ接続可能
example.com/hoge/hoge/index.html → A,Bともに接続可能
やり方
AWS WAFの機能で実装
/tes/を含むパスかつ特定のIP以外のアクセスを拒否するrule groupを作成する
webACLをデフォルトアクションを許可で作成し、作成したルールグループを適用
検証
許可IPでないと/test/を含むパスにアクセスできないように設定してみる
1.apacheサーバーにテストページを3つ作成
[ec2-user@ip-172-31-46-226 hoge]$ ls -1 "$(pwd)"/* /var/www/html/test/hoge/index.html [ec2-user@ip-172-31-46-226 test]$ ls -1 "$(pwd)"/* /var/www/html/hoge/test/index.html [ec2-user@ip-172-31-46-226 hoge]$ ls -1 "$(pwd)"/* /var/www/html/hoge/hoge/index.html
2.許可IPと許可無しのIP両方から、3つのテストページにアクセスできることを確認
EC2とALBとroute53を紐づける
 許可IPからアクセス確認
許可IPからアクセス確認

許可無しのIPからアクセス確認

3.webACLの作成
許可IPを含めたIPセットを作成

/test/を含むパスかつ特定のIP以外のアクセスを拒否するrule groupを作成

statement1
| nagate statement results | inspect | Match type | string to match | 
|---|---|---|---|
| チェック入れない | URL path | contains string | test | 
statement2
| nagate statement results | inspect | IP set | 
|---|---|---|
| チェック入れる | originates from an IP address in | y-ishikawa-bpn-ipset | 
actionはbrockに設定
webACLを作成
webACLをデフォルトアクションを許可で作成し、作成したルールグループを適用し、albにアタッチする

4.許可IPから3つのテストページ全てにアクセスできることを確認

5.許可なしIPから、/test/を含むパスにアクセスできないことを確認

6.許可なしIPから、/test/を含まないパスにアクセスできることを確認

最後に
参考になれば幸いです!!

 
     
     
    