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

#目的
IISでのアクセス制限でホワイトリスト化しようとした時にX-Fowarded-Forを参照できないっぽい挙動があったので調査
1. ELB経由でのIISへのアクセスが目的
2. SecurityGroupではなくIIS側でアクセス出来るIPを絞りたかったため

#環境
AWS上のEC2とELBを使用した環境
下記の図のようにELB経由と直アクセスを想定
![iis-sample.png](https://qiita-image-store.s3.amazonaws.com/0/55705/edd9ed5f-f390-c286-1d99-6fa0eb6bc090.png)

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へ追加
![iis-01.png](https://qiita-image-store.s3.amazonaws.com/0/55705/10b33e5c-b8a8-ceb0-bbf7-aaa78f4d5b77.png)

2. IP制限を使用するため _IP and Domain Restrictions_ も合わせて導入
![iis-02.png](https://qiita-image-store.s3.amazonaws.com/0/55705/b01a3f40-013c-2d00-f317-edad525f6b27.png)

3. 導入後テストアクセス用のページを準備、その後IP直アクセスとELB経由でのアクセスが出来ることを確認
![iis-03.png](https://qiita-image-store.s3.amazonaws.com/0/55705/f91e4642-eae1-6e8b-a965-1f91f605a056.png)
![iis-04.png](https://qiita-image-store.s3.amazonaws.com/0/55705/c24729b0-0b9e-9574-b274-2291817f8929.png)

4. IP制限を設定する
![iis-05.png](https://qiita-image-store.s3.amazonaws.com/0/55705/9ea2bb8c-fd81-1328-12de-67cd1b028e40.png)

#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設定
![iis-06.png](https://qiita-image-store.s3.amazonaws.com/0/55705/bde5d3b3-6421-6836-1cf8-b797d4288823.png)

ELB経由でのアクセスが可能、IP直アクセスは当然Denyの為アクセス不能
1. IP直アクセス
![iis-07.png](https://qiita-image-store.s3.amazonaws.com/0/55705/188b9a9c-ffd3-fbda-662d-b76d21bb8311.png)
2. ELB経由
![iis-08.png](https://qiita-image-store.s3.amazonaws.com/0/55705/e1a08f87-80e0-2a6a-0917-5663a81eeb70.png)

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

```
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..._ から指定
![iis-09.png](https://qiita-image-store.s3.amazonaws.com/0/55705/2c88b3d3-1033-a55f-8646-7b60b382295e.png)

先ほどはアクセスできたELB経由のアクセスが不能となる(ELB経由の場合はIPが10.1.0.119になっているのにアクセス出来ない)
![iis-10.png](https://qiita-image-store.s3.amazonaws.com/0/55705/7c574096-09cc-0ae5-6f67-41188db8e1ad.png)


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で入れていたはず)
![iis-11.png](https://qiita-image-store.s3.amazonaws.com/0/55705/1eeeb5b5-c7f0-4a97-6712-6c3aa4da3449.png)
※_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を指定
![iis-12.png](https://qiita-image-store.s3.amazonaws.com/0/55705/9cbc76dc-428a-067f-1896-06d2de373be3.png)

##AllDenyのみ
当然ELB経由・IP直アクセス共にアクセス不能
1. IP直アクセス
![iis-13.png](https://qiita-image-store.s3.amazonaws.com/0/55705/c34d52bc-eb04-11eb-34cd-53028d696aa6.png)
2. ELB経由
![iis-14.png](https://qiita-image-store.s3.amazonaws.com/0/55705/ad43f183-a46b-0c7a-44c5-86f1a23b4579.png)

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

```
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設定した時の逆の設定を行う
![iis-15.png](https://qiita-image-store.s3.amazonaws.com/0/55705/d84d6723-8ca8-1da3-4f34-d54ef5a9641b.png)  

1. IP直アクセス  
![iis-16.png](https://qiita-image-store.s3.amazonaws.com/0/55705/da3fc923-ff49-77bb-02b8-8ed83d81369d.png)
2. ELB経由  
![iis-17.png](https://qiita-image-store.s3.amazonaws.com/0/55705/86ce7076-66f3-4ec2-ecdf-7ae31a502cf5.png)


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_を有効化する
![iis-18.png](https://qiita-image-store.s3.amazonaws.com/0/55705/ef6a61af-c54f-82e7-403f-1e0cc892bd5c.png)

1. IP直アクセス  
![iis-19.png](https://qiita-image-store.s3.amazonaws.com/0/55705/ca916ba9-64c5-bb6e-e7b4-fcd3bec9058c.png)
2. ELB経由  
![iis-20.png](https://qiita-image-store.s3.amazonaws.com/0/55705/091f6f41-1ceb-4163-eab4-47fdff91309c.png)

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が出来ないのは何らかのバグなのか自分の設定の問題なのか...