背景
AWS上のプロキシをNLBで冗長化したいが、NLBはNATしてしまうため送信元IPが全て同じになってしまうため、Proxy protocolを使用した制御を行う。
要件
プロキシの冗長化
ホワイトリストのURLフィルタリング
送信元IPをベースに認証
squid
squidに下記設定を入れる。
squid.conf
#ポートの指定とproxy接続時にproxy protocolを必須にする
http_port 8080 require-proxy-header
#NLBのIPをACLに追加
acl nlb_ip src 10.0.0.1
acl nlb_ip src 10.0.1.1
#クライアントIPをACLに追加
acl client_ip src 10.0.0.10
acl client_ip src 10.0.1.10
#URLフィルタリング
acl whitelist dstdomain "/etc/squid/whitelist"
#Proxy Protocolの利用許可
proxy_protocol_access permit nlb_ip
proxy_protocol_access permit client_ip
#httpアクセスの許可
http_access permit nlb_ip
#クライアントの許可とホワイトリストの適用
http_access permit client_ip whitelist
whitelist
google.com
AWS
- EC2ダッシュボードから、ターゲットグループにアクセス
- 対象のターゲットグループを選択し、アクション->属性の編集を選択する
- Proxy Protocol v2の有効化にチェックを入れ、保存を選択する。
その他注意事項など
-
NLBのIPも
proxy_protocol_access
で許可しないとだめ -
CLBを使う場合はサブネットを指定して許可する
-
NLB側でProxy Protocolを有効にしたときはSquid側もproxy protocolを有効にしないとうまくアクセスができなくなる逆にNLB側を無効にしてもアクセスできない。つまり、両側で有効・無効がマッチしていないとダメ
-
http_access permit
は一致するルールがあると以降のルールを評価しないためAND条件を適用したい場合は同一行に記載する
参考