Apacheベーシック認証Satisfyとプロクシー

今まで、ベーシック認証の制御というと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とかはデュアルネットワークじゃないとダメだったような気がするので、前言を翻して・・・言わない。

■参考
WikipediaのX-Forwarded-For