HAProxy 配置 Basic Auth 认证保护后端管理接口怎么操作?

文章导读
给 HAProxy 的管理接口或特定后端路径加上 Basic Auth,最稳妥的做法是在配置文件中定义 userlist 并通过 http-request auth 指令调用,同时务必配合 HTTPS 使用,避免凭证明文传输。
📋 目录
  1. 命令速用版
  2. 为什么要配合 HTTPS
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

给 HAProxy 的管理接口或特定后端路径加上 Basic Auth,最稳妥的做法是在配置文件中定义 userlist 并通过 http-request auth 指令调用,同时务必配合 HTTPS 使用,避免凭证明文传输。

先说结论:通过 userlist 定义用户密码,在 frontend 或 listen 段使用 http-request auth 拦截请求,适合保护 stats 页面或后台管理路径。

  • 适合:HAProxy 2.x 及以上版本,需要简单访问控制的内部管理界面
  • 先准备:openssl 生成密码哈希,必须配置 SSL 证书
  • 验收:curl 测试无密码被拒、有密码通行,检查 HAProxy 日志

命令速用版

这里直接给出配置片段,替换到你的 haproxy.cfg 中,注意将密码哈希替换为实际生成的值,并确保 SSL 证书路径正确:

global
    ...

frontend https_front
    # 绑定 443 端口并加载 SSL 证书
    bind *:443 ssl crt /etc/haproxy/certs/example.pem
    
    # 定义用户列表 (HAProxy 2.x+ 支持在 frontend 内定义)
    userlist admin_users
        user admin password $apr1$xxxxxxxxxxxxxx

    # 应用认证,例如保护 /admin 路径
    http-request auth realm AdminArea if { path_beg /admin } if !{ http_auth(admin_users) }

    default_backend web_servers

为什么要配合 HTTPS

管理接口通常权限较高,直接暴露在公网或内网大段中风险很大。HAProxy 作为入口网关,在这里做认证可以避免后端服务单独实现认证逻辑,统一管控入口。Basic Auth 的账号密码仅做 Base64 编码,若无 HTTPS,抓包即可见明文。配合 TLS 加密传输,能有效阻挡未授权访问,且配置成本较低。

HAProxy 配置 Basic Auth 认证保护后端管理接口怎么操作?

分步处理

1. 生成密码哈希:不要明文存密码,使用 openssl 生成兼容性较好的哈希。

openssl passwd -apr1 your_secure_password

2. 准备 SSL 证书:HAProxy 需要将证书和私钥合并为一个 PEM 文件。

HAProxy 配置 Basic Auth 认证保护后端管理接口怎么操作?
cat domain.crt domain.key > /etc/haproxy/certs/example.pem
chmod 600 /etc/haproxy/certs/example.pem

3. 编辑配置文件:在 global 段或 frontend 段上方定义 userlist,将上一步生成的哈希填入。注意 HAProxy 2.x 版本才支持在 frontend 内定义 userlist,旧版本建议放在 global 段。

userlist my_admins
    user testuser password $apr1$...

4. 调用认证规则:在需要保护的 frontend 或 listen 段添加 http-request auth。注意逻辑判断,避免误伤正常流量。

http-request auth realm Restricted if { path_beg /manage } if !{ http_auth(my_admins) }

5. 重载配置:检查语法无误后重载服务,避免配置错误导致服务中断。

HAProxy 配置 Basic Auth 认证保护后端管理接口怎么操作?
haproxy -c -f /etc/haproxy/haproxy.cfg
systemctl reload haproxy

怎么验证是否生效

使用 curl 不带密码访问,应返回 401 Unauthorized;带密码访问,应返回 200 或后端实际状态码。注意必须使用 HTTPS 协议测试

curl -I -k https://your-ip/manage
curl -I -k -u testuser:password https://your-ip/manage

同时查看 HAProxy 日志,确认是否有认证失败的记录。

常见坑

  • 明文传输风险:Basic Auth 若无 HTTPS,抓包即可见明文,务必绑定 SSL 证书。
  • 锁死自己:配置错误可能导致管理员无法访问,建议先在一个测试路径验证,再应用到全局管理入口。
  • 哈希算法兼容:不同 HAProxy 版本支持的密码哈希算法可能不同,推荐使用 apr1 或 SHA2,避免使用明文 insecure-password 生产环境。
  • 证书权限问题:PEM 文件权限应设置为 600,仅 root 可读,防止私钥泄露。

参考来源

  • HAProxy Documentation, "HAProxy Configuration Manual", https://docs.haproxy.org/