У меня HAProxy настроен так, чтобы требовать HTTP-аутентификацию для одного интерфейса. Это выглядит так
userlist Users
group G1
user XXX password YYY
frontend public
bind :::80 v4v6
bind :::443 v4v6 ssl crt /etc/ssl/snakeoil.pem
# Authentication
acl ValidUser http_auth(Users)
http-request auth realm mysite if !ValidUser
option forwardfor except 127.0.0.1
use_backend othersite if { path_beg /othersite/ }
default_backend thesite
backend thesite
acl needs_scheme req.hdr_cnt(X-Scheme) eq 0
reqrep ^([^\ :]*)\ /(.*) \1\ /\2
reqadd X-Scheme:\ https if needs_scheme { ssl_fc }
reqadd X-Scheme:\ http if needs_scheme !{ ssl_fc }
option forwardfor
server thesite1 127.0.0.1:5000
errorfile 503 /etc/haproxy/errors/503-no-thesite.http
backend othersite
reqrep ^([^\ :]*)\ /othersite/(.*) \1\ /\2
server othersite1 127.0.0.1:8080
errorfile 503 /etc/haproxy/errors/503-no-othersite.http
Теперь я хочу запросить HTTP-аутентификацию только для подключений из-за пределов моей локальной сети.
Я пытался заменить строчку
http-request auth realm mysite if !ValidUser
с участием
http-request auth realm mysite unless ValidUser || { hdr_beg(host) -i 192.168.0. }
но это не сработало.
Как можно решить эту задачу?
[редактировать]
Благодаря этому вопросу (Базовая аутентификация HAProxy, кроме определенного IP) Моя конфигурация работает для одного конкретного IP:
# Authentication
acl ValidOctoPrintUser http_auth(Users)
# Exclude one IP from Authentication
acl InternalIP src 192.168.0.XXX
http-request auth realm octoprint if !InternalIP !ValidOctoPrintUser
Однако я пока не знаю, как исключить все IP-адреса, начинающиеся с 192.168.0.
от аутентификации
hdr_beg(host) -i 192.168.0.
соответствует Заголовокне клиентский IP.
Вы хотите использовать src
, лайк
acl allowed_ip src 192.168.0.0/24
src соответствует CIDR сети, поэтому при необходимости вы можете сопоставить целые сети
также обратите внимание, что вы можете использовать правила ИЛИ, просто определив правило с таким же именем, например
acl allowed_ip src 192.168.1.0/24
acl allowed_ip src 192.168.5.0/24
будет соответствовать IP-адресам из сетей 192.168.1.0/24 и 192.168.1.0/24.
Единственный раз, когда вы хотите сделать это в заголовке, - это когда у вас есть другой прокси-сервер и вы хотите сопоставить IP в X-Forwarded-For