仅要求 HAProxy 中来自 LAN 外部的连接进行 HTTP 身份验证

仅要求 HAProxy 中来自 LAN 外部的连接进行 HTTP 身份验证

我将 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 身份验证仅适用于 LAN 外部的连接

我尝试更换线路

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

但是,我还不知道如何192.168.0.从身份验证中排除所有以 开头的 IP

答案1

hdr_beg(host) -i 192.168.0.匹配标头, 不是客户的知识产权。

你想使用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

将匹配来自 192.168.1.0/24 和 192.168.1.0/24 网络的 IP。

只有当你前面有另一个代理并且想要匹配 IP 时,你才需要在标头上执行此操作X-Forwarded-For

相关内容