Authentication

在 HAProxy 中,僅對來自我的 LAN 外部的連接需要 HTTP 身份驗證

  • October 20, 2019

我已將 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

現在我只想為來自 LAN 外部的連接請求 HTTP 身份驗證。

我試圖更換線路

http-request auth realm mysite if !ValidUser

http-request auth realm mysite unless ValidUser || { hdr_beg(host) -i 192.168.0. }

但這沒有用。

如何完成這項任務?

$$ edit $$

感謝這個問題(HAProxy basic auth except from specific 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

但是,我還不知道如何192.168.0.從身份驗證中排除所有 IP

hdr_beg(host) -i 192.168.0.匹配Header,而不是客戶端的IP。

你想用src,比如

acl allowed_ip src 192.168.0.0/24

src 按網路的 CIDR 匹配,因此您可以在需要時匹配整個網路

另請注意,您可以通過定義命名相同的規則來 OR 規則,所以說 acl allowed_ip src 192.168.1.0/24 acl allowed_ip src 192.168.5.0/24

將匹配來自 192.168.1.0/24 和 192.168.1.0/24 網路的 IP。

只有當您想要在標頭上執行此操作時,您前面有另一個代理並想要匹配 IPX-Forwarded-For

引用自:https://serverfault.com/questions/988721