今まで、ベーシック認証の制御というとSatisfy Any を利用して、特定のIPアドレスからはベーシック認証なし、それ以外はベーシック認証という形で運用することが多かった。
特に、開発サイトや公開前のチェックや構築中で自分とお客さんのIPだけを許可していたり。
Order allow,deny Satisfy Any #Allow from all # system Allow from 127.0.0.1 10.0.0.1 10.0.0.2 # client Allow from 61.111.111.111 # develop Allow from 61.100.100.100 61.100.100.101 authtype basic ....... |
こんな形だったのだが、途中にロードバランサーがシングルネットワークで入ったり、融通の利かないプロクシーサーバが入ったりして接続元のIPアドレスが失われ、1つのネットワーク機器やローカルのIPアドレスでしか接続されないという事象になったので、この設定を変更することに。
Order allow,deny Satisfy Any #Allow from all # system Allow from 127.0.0.1 10.0.0.1 10.0.0.2 # for proxy route SetEnvif X-Forwarded-For 61.111.111.111 allow_ip SetEnvif X-Forwarded-For 61.100.100.100 allow_ip SetEnvif X-Forwarded-For 61.100.100.101 allow_ip Allow from env=allow_ip authtype basic ....... |
こんな感じでローカルIP以外のグローバルは「X-Forwarded-For」の環境変数で判定することにした。もっとも、融通が利かないプロクシーの中でも、この環境変数すらつけてくれないような超融通が利かないやつもいるかもしれないので、万能ではないだろうけれど。
もし、Apacheでリバースプロクシーとか組んでいるなら、
<proxy > </proxy> |
とかいうタグが使えるらしいので、そっちでやれればいいのにとか思ったり。
もっというなら、元IP出すようにパケット再構築してほしいと思ったけれど、equalizerとかはデュアルネットワークじゃないとダメだったような気がするので、前言を翻して・・・言わない。