やりたいこと
リクエストのパスに特定の文字が含まれていた場合に、アクセスできる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からアクセス確認
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/を含まないパスにアクセスできることを確認
最後に
参考になれば幸いです!!