目的

IISでのアクセス制限でホワイトリスト化しようとした時にX-Fowarded-Forを参照できないっぽい挙動があったので調査

  1. ELB経由でのIISへのアクセスが目的
  2. SecurityGroupではなくIIS側でアクセス出来るIPを絞りたかったため

環境

AWS上のEC2とELBを使用した環境
下記の図のようにELB経由と直アクセスを想定

edd9ed5f-f390-c286-1d99-6fa0eb6bc090

IP直アクセス(xxx.xxx.xxx.xxxには自分のIP)
ELB経由アクセスの2パターンを準備(10.1.0.17や10.1.0.119はELBのPrivateIP) ー>指定したVPC・Subnetの範囲内でIPが振られるはず

OS情報等

Windows 2012 R2
IIS 8.5.9600.163884

準備

1. IISをWindowsへ追加

10b33e5c-b8a8-ceb0-bbf7-aaa78f4d5b77

2. IP制限を使用するため IP and Domain Restrictions も合わせて導入

b01a3f40-013c-2d00-f317-edad525f6b27

3. 導入後テストアクセス用のページを準備、その後IP直アクセスとELB経由でのアクセスが出来ることを確認

f91e4642-eae1-6e8b-a965-1f91f605a056

c24729b0-0b9e-9574-b274-2291817f8929

4. IP制限を設定する

9ea2bb8c-fd81-1328-12de-67cd1b028e40

AllAllow設定

AllAllowのみ(デフォルト)

当然だがアクセスできる。ログにも直接アクセスした際のIPとELB経由でのIPが表示されている
※以下ログはxxx.xxx.xxx.xxxを直接アクセス、10.1.0.xxをELB経由とする

2016-03-25 06:49:30 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 304 0 0 20
2016-03-25 06:49:33 10.1.0.236 GET / - 80 - 10.1.0.17 - 304 0 0 15

AllAllowに指定IPのみDeny設定

bde5d3b3-6421-6836-1cf8-b797d4288823

ELB経由でのアクセスが可能、IP直アクセスは当然Denyの為アクセス不能
1. IP直アクセス

188b9a9c-ffd3-fbda-662d-b76d21bb8311

2. ELB経由

e1a08f87-80e0-2a6a-0917-5663a81eeb70

ログ上でもアクセス拒否が確認出来る

2016-03-25 07:01:31 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 403 503 5 15
2016-03-25 07:02:18 10.1.0.236 GET / - 80 - 10.1.0.17 - 304 0 0 0

EnableProxyModeを有効化

画面右側 Edit Feature Settings… から指定

2c88b3d3-1033-a55f-8646-7b60b382295e

先ほどはアクセスできたELB経由のアクセスが不能となる(ELB経由の場合はIPが10.1.0.119になっているのにアクセス出来ない)

7c574096-09cc-0ae5-6f67-41188db8e1ad

X-Forwarded-Forをみて判別している?

2016-03-25 07:06:42 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 403 503 5 15
2016-03-25 07:07:01 10.1.0.236 GET / - 80 - 10.1.0.119 - 403 503 5 0

X-Forwarded-Forをログに追加

ログに出力してみてX-Forwarded-Forがあるのかチェック(それを参照していないなら10.1.0.119で入れていたはず)

1eeeb5b5-c7f0-4a97-6712-6c3aa4da3449

※LoggingからSelect Fields…で追加

ログにX-Forwarded-Forが付与されたことを確認

2016-03-25 07:13:19 10.1.0.236 GET / - 80 - 10.1.0.119 - 403 503 5 0 xxx.xxx.xxx.xxx

Deny設定を解除

IP直指定のDenyを削除
ELB経由・IP直アクセス共にアクセスが可能であることを確認

2016-03-25 07:16:03 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 200 0 0 15 -
2016-03-25 07:16:59 10.1.0.236 GET / - 80 - 10.1.0.17 - 200 0 0 16 xxx.xxx.xxx.xxx

AllDeny設定

Edit IP and Domain Restrictions SettingsからAccess for unspecified clients:でDenyを指定

9cbc76dc-428a-067f-1896-06d2de373be3

AllDenyのみ

当然ELB経由・IP直アクセス共にアクセス不能
1. IP直アクセス

c34d52bc-eb04-11eb-34cd-53028d696aa6

2. ELB経由

ad43f183-a46b-0c7a-44c5-86f1a23b4579

ログ上でもアクセス拒否されていることを確認

2016-03-25 07:18:51 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 403 503 5 15 -
2016-03-25 07:18:56 10.1.0.236 GET / - 80 - 10.1.0.17 - 403 503 5 0 xxx.xxx.xxx.xxx

AllDeny状態に指定IPでAllowを設定

最初にDeny設定した時の逆の設定を行う

d84d6723-8ca8-1da3-4f34-d54ef5a9641b

1. IP直アクセス

da3fc923-ff49-77bb-02b8-8ed83d81369d

2. ELB経由

86ce7076-66f3-4ec2-ecdf-7ae31a502cf5

IP直はアクセス可能、ELB経由はアクセスできず(Proxyを有効化していないためX-Forwarded-Forを参照していない)

2016-03-25 07:22:47 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 200 0 0 0 -
2016-03-25 07:23:58 10.1.0.236 GET / - 80 - 10.1.0.119 - 403 503 5 0 xxx.xxx.xxx.xxx

EnableProxyModeを有効化

再度EnableProxyModeを有効化する

ef6a61af-c54f-82e7-403f-1e0cc892bd5c

1. IP直アクセス

ca916ba9-64c5-bb6e-e7b4-fcd3bec9058c

2. ELB経由

091f6f41-1ceb-4163-eab4-47fdff91309c

IP直はアクセスが可能、ELB経由はアクセス不能
Proxy有効化してもX-Forwarded-Forを参照していないということになる

2016-03-25 07:26:54 10.1.0.236 GET / - 80 - xxx.xxx.xxx.xxx - 304 0 0 15 -
2016-03-25 07:26:57 10.1.0.236 GET / - 80 - 10.1.0.17 - 403 503 5 0 xxx.xxx.xxx.xxx

まとめ

ブラックリストでのX-Forwarded-Forは参照するがホワイトリスト化した時のX-Forwarded-Forは参照しないっぽい挙動
DenyはできるのにAllowが出来ないのは何らかのバグなのか自分の設定の問題なのか…

元記事はこちら

ELB + EC2( IIS 8.5 ) でのIP制限