Назад | Перейти на главную страницу

Apache 2 без аутентификации от ips

У меня есть развертывание с сервером apache 2.2.22 за лаком.

Я хотел бы добиться того, чтобы пароль защищал каталог с помощью htpasswd, но сделал его доступным для определенных пользователей, пришедших из IPS без аутентификации.

AuthType Basic
AuthName "test"
AuthUserFile /www/.htpasswd
Require valid-user
order deny,allow 
deny from all 

SetEnvIF X-Forwarded-For "1.2.3.4" AllowIP
Allow from env=AllowIP 
Satisfy any 

Что я делаю прямо сейчас, это обходной путь, но он работает. Если IP-адрес X-Forwarded-For (клиент) - 1.2.3.4, то пусть он смотрит страницу без аутентификации.

Проблема в том, что это небезопасно, клиент может просто установить заголовок X-Forwareded-For и обойти аутентификацию.

Я пробовал модуль Apache RPAF:

<IfModule rpaf_module>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 varniship
</IfModule>

Что теоретически должно ограничивать запросы X-Forwarded-For, поступающие от прокси, я даже не уверен, что мне нужен этот модуль в этом случае, поскольку прокси всегда будет помещать за собой IP-адрес клиента X-Forwarded-For. Итак, req будет выглядеть так:

X-Forwarded-For: <varniship>, clientip

Где клиент может снова манипулировать подсказкой. Есть лучший способ сделать это?

В качестве альтернативы вы можете сделать это также на стороне Varnish vcl:

    sub vcl_recv {
        # whitelist ip 10.10.10.10
        if (req.http.X-Forwarded-For ~ "^10\.10\.10\.10") {
           # where dXNlcjpwYXNzd29yZA== is user:password in base64
           set req.http.Authorization = "Basic dXNlcjpwYXNzd29yZA==";
        }
    }

Может быть расширен другими проверками, исходящими из заголовка запроса.

    <Directory "/var/www/html/docroot">
    AuthName "Restricted Access"
    AuthType Basic
    AuthUserFile /usr/local/.htpasswd
    Order allow,deny
    Allow from x.x.x.x
    Require  valid-user
    Options Indexes FollowSymLinks
    satisfy any
    </Directory>

Для меня это работает как шарм, хотя я использую версию 2.4.10, и у меня нет более старой версии для тестирования.