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

Базовая аутентификация apache 2.2 обойти IP

как установить базовую аутентификацию apache 2.2 для обхода IP? Я подписался на эту вики http://wiki.apache.org/httpd/BypassAuthenticationOrAuthorizationRequirements , но всегда спрашивайте пароль, в том числе и на указанный IP-адрес:

<Directory /var/www/html/mydir>
    AuthName "Private"
    AuthType Basic
    AuthUserFile "/etc/httpd/htpasswd"
    Require valid-user
    Order allow,deny
    Allow from 111.111.111.111 222.222.222.222
    Satisfy any
</Directory>

Я нахожусь под haproxy, но я настроил IP вперед, я установил LogFormat в этом случае:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

access_log:

111.111.111.111 - - [25/Oct/2016:12:35:41 +0200] "GET /index.html HTTP/1.1" 401 487 "-" "Mozilla/5.0 (X11; Linux armv7l; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.7.0"

Конфигурация у вас в порядке и очень стандартная. Если вы используете haproxy тогда исходный IP-адрес все запросы - это haproxy сам, и именно этот IP-адрес allow from проверяется директива, а не содержимое X-Forwarded-For заголовок.

Есть несколько способов исправить этот. С Apache v2.2 вы можете использовать сторонний модуль, такой как mod_custom_headers (http://support.en.ctx.org.cn/ctx109555.citrix извините, исходная страница Citrix, похоже, была перемещена или удалена) или, возможно, mod_rpaf (Я не использовал его раньше, поэтому не могу быть уверен, что это вызывает allow from чтобы работать правильно).

Эти модули изменяют данные, которые Apache хранит о запросе, так что исходный IP-адрес становится значением из именованного заголовка, установленного вашим прокси-сервером (например, X-Forwarded-For).

В качестве альтернативы вы можете перейти на Apache v2.4 и использовать mod_remoteip, который делает то же самое.

Обратите внимание, что существует также решение конфигурации Apache, с помощью которого вы устанавливаете свой собственный заголовок на haproxy (или вы можете использовать X-Forwarded-For один, если вы ему доверяете). Что-то вроде:

SetEnvIf X-Forwarded-For ^111.111.111.111 access_granted_by_ip
SetEnvIf X-Forwarded-For ^222.222.222.222 access_granted_by_ip
Order allow,deny
Allow from env=access_granted_by_ip

Но я признаю, что для нескольких IP-адресов это немного неудобно.