У меня есть развертывание с сервером 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, и у меня нет более старой версии для тестирования.