HAProxy 负载均衡器测评

HAProxy 负载均衡器三级等保现场测评取证命令单:按控制点组织 haproxy -v/-c、haproxy.cfg 核查命令,覆盖 stats 管理界面认证与 userlist 加密口令、监听地址与 stats 来源限制、log/option httplog 审计外送补偿、版本 EOL、bind ssl crt 与 ssl-min-ver TLSv1.2 默认、后端 server ssl verify required/ca-file 加密、cfg 备份与平滑重载、X-Forwarded-For 脱敏,附判定要点、示例输出与版本差异核验说明。

定位:HAProxy 负载均衡器三级等保现场测评取证命令单,按 GB/T 22239-2019 安全计算环境控制点分节组织核查命令、判定要点与取证要求。 适用范围:HAProxy 2.6 / 3.0 LTS 线(2.x/3.x 通用;本文以官方 master 配置手册核验),单机部署与 keepalived 双机部署场景。 配套文章:22、高风险判定指引与加固对照表、16、安全评估加固记录表3.0、17、网络设备、安全设备、服务器、数据库和应用系统的加固方案。

使用说明:

  • 本文所有命令均为只读取证命令,不修改配置、不重启服务、不执行清除类操作;haproxy -c 为配置语法校验(只读,不加载新配置),确需变更由被测单位运维方在授权下实施。
  • 每个控制点小节按「对应控制点 → 判定要点 → 取证要求 → 核查命令 → 备注 → 预期证据」编排;命令回显本身即证据,须连同命令行一起截图。
  • HAProxy 无独立账户体系与内置审计日志,身份鉴别/安全审计多数控制点依赖「stats 界面认证 + 主机侧账户与审计 + 日志外送」等补偿措施判定,取证时务必同步收集主机与日志平台证据。
  • 命令不存在或输出与示例差异较大时,先确认版本与部署形态(发行版包/容器/k8s Ingress Controller),再换用等效命令或转入配置文件取证,不得据命令缺失直接判不符合。
  • 示例输出中的地址、账户、路径均为演示值,现场须替换为真实取证结果并对涉及个人信息与内网管理地址的内容脱敏后再入报告。

不适用标识说明:

  • 使用 【不适用】 明确标记现场可判定为不适用的控制点。
  • 判定依据采用 GB/T 28448-2019"按测评对象实际功能、是否直接处理数据、是否具备该类安全机制判定"的原则;HAProxy 为反向代理/负载均衡组件,无操作系统级账户体系,业务用户身份鉴别由后端应用承载。

基础信息

对应控制点:非独立控制点(测评对象与资产确认);双机部署情况佐证 8.1.2.1 网络架构 e) 关键设备硬件冗余

判定要点:版本、配置文件路径、启动参数(daemon/master-worker)、监听端口清单、双机形态五项均可取证且与实际架构一致 → 符合;版本或配置无法确认、依赖口头说明 → 部分符合。

取证要求:版本命令回显截图、配置文件截图、进程与启动参数截图、端口监听截图;keepalived 双机补 VRRP 状态截图。

核查命令:

haproxy -v
haproxy -vv | head -n 12
systemctl status haproxy --no-pager | head -n 8
ps -ef | grep [h]aproxy
ss -lntp | grep haproxy
ls -l /etc/haproxy/haproxy.cfg
  • 备注:-vv 额外给出编译选项(OPENSSL 支持与否决定 SSL 小节是否适用);逐项记录 frontend/listen 的 bind 端口与 stats 端口。
  • 预期证据:版本截图、进程截图、端口清单截图、配置文件截图。
示例输出(节选)
$ haproxy -v
HAProxy version 3.0.8 2024/xx/xx - https://haproxy.org/
Status: long-term supported branch - will end support around Q4 2028.
$ ps -ef | grep [h]aproxy
haproxy  1101     1  0 Aug23 ?  00:03:12 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
$ ss -lntp | grep haproxy
LISTEN 0 4096 192.168.10.5:443    users:(("haproxy",pid=1102,fd=7))
LISTEN 0 4096 127.0.0.1:8404      users:(("haproxy",pid=1102,fd=8))

身份鉴别

对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 a)~d)

判定要点:stats 管理界面已启用认证且口令非默认/弱口令(官方示例 admin:AdMiN123 属演示值不得沿用)、口令以 password(crypt 加密,如 $6$ SHA-512)而非 insecure-password 明文落盘、管理界面仅运维网段可达、主机侧 root/运维账户受口令策略约束 → 符合;stats 无认证或明文口令、管理面对业务网段开放 → 部分符合/不符合。

取证要求:stats 配置段截图(口令脱敏)、userlist 配置与口令形态截图、无凭据访问 stats 被拒实测、主机口令策略核查(转主机测评)。

A. stats 管理界面认证

核查命令:

grep -n -A6 "stats enable\|stats auth\|stats admin" /etc/haproxy/haproxy.cfg
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8404/          # 无凭据实测
curl -s -o /dev/null -w "%{http_code}\n" -u demo:wrongpass http://127.0.0.1:8404/
  • 备注:官方 stats auth <user>:<passwd> 语法核验;口令在配置中可能为明文形态(与 userlist 二选一),明文需结合文件权限 600 与补偿判定;无凭据访问应返回 401。
  • 【不适用】未启用 stats 界面(无 stats uri/stats enable)时该点不适用,管理经 CLI/堡垒机,注明依据。
  • 预期证据:stats 配置截图、401 实测截图。
示例输出(节选)
$ grep -n -A6 "stats enable" /etc/haproxy/haproxy.cfg
listen stats
    bind 127.0.0.1:8404
    stats enable
    stats uri /stats
    stats auth  opsadmin:********
    stats admin if LOCALHOST
$ curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8404/
401

B. userlist 账户与口令形态

核查命令:

grep -n -A8 "^userlist" /etc/haproxy/haproxy.cfg
stat -c "%a %U:%G %n" /etc/haproxy/haproxy.cfg
  • 备注:官方 userlist 语法核验——user <name> [password|insecure-password <口令>],password 为 crypt(3) 加密形态(现代 glibc 支持 MD5/SHA-256/SHA-512,$6$ 开头即 SHA-512),insecure-password 为明文;存在 insecure-password 时核查文件权限与配置管理补偿。官方同时提示加密口令逐请求计算带来的 CPU 代价。
  • 预期证据:userlist 配置截图(口令脱敏)、文件权限截图。
示例输出(节选)
$ grep -n -A8 "^userlist" /etc/haproxy/haproxy.cfg
userlist stats-auth
    group admin    users opsadmin
    user  opsadmin password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91
$ stat -c "%a %U:%G %n" /etc/haproxy/haproxy.cfg
600 root:haproxy /etc/haproxy/haproxy.cfg

C. 主机侧账户与管理通道

核查命令:

id haproxy
ps -o user= -C haproxy | sort -u
last | head -n 5
  • 备注:HAProxy 进程应以非 root 的 haproxy 账户运行(master 进程可 root 落特权端口、worker 降权);运维登录与配置变更经堡垒机留痕,账户口令策略在主机测评单元核查。
  • 【不适用】无独立平台账户体系,平台用户鉴别项按组件实际形态判定并注明。
  • 预期证据:进程属主截图、堡垒机会话记录。

访问控制

对应控制点:GB/T 22239-2019 8.1.4.2 访问控制 a)~f)

判定要点:管理面(stats socket/界面、8404 端口)仅绑定回环或运维网段且有来源限制、业务 frontend 按架构白名单放行、配置文件与证书文件权限最小化(600/640)、无多余监听 → 符合;stats 绑定全网卡且无 ACL、配置权限过宽 → 部分符合;stats admin 无条件授权且全网可达 → 不符合(高风险)。

取证要求:bind 清单与来源 ACL 截图、防火墙/交换机侧策略、文件权限截图、stats admin 授权条件配置截图。

A. 监听地址与 stats 来源限制

核查命令:

grep -n "^bind\|    bind" /etc/haproxy/haproxy.cfg
grep -n -B2 -A4 "stats admin\|http_request deny\|http-request deny" /etc/haproxy/haproxy.cfg
ss -lntp | grep haproxy
  • 备注:重点核查 stats 监听是否为 127.0.0.1 或内网地址;stats admin if LOCALHOST(官方示例形态)优于无条件 stats admin if TRUE;业务端口按需在防火墙收敛来源。
  • 预期证据:bind 清单截图、ACL 配置截图、防火墙策略截图。
示例输出(节选)
$ grep -n "bind" /etc/haproxy/haproxy.cfg
    bind 192.168.10.5:443 ssl crt /etc/haproxy/certs/site.pem
    bind 127.0.0.1:8404
(stats 仅绑定回环,业务仅绑定内网 VIP)

B. 配置与证书文件权限

核查命令:

ls -l /etc/haproxy/
stat -c "%a %U:%G %n" /etc/haproxy/haproxy.cfg /etc/haproxy/certs/*.pem
  • 备注:证书 PEM 内含私钥,须 600 且属主 root/haproxy;/etc/haproxy 目录建议 750。
  • 预期证据:权限清单截图。

安全审计

对应控制点:GB/T 22239-2019 8.1.4.3 安全审计 a)~d)

判定要点:log 目标已配置(global 段 syslog 服务器或 proxies 段 log global)、HTTP 流量启用 option httplog(记录 URL/状态/计时)、日志经 rsyslog 外送日志审计系统且留存不少于 6 个月、配置变更(cfg 文件)有 auditd/堡垒机留痕 → 符合;仅默认 syslog 本地留存且无外送、留存不足 6 个月 → 部分符合;日志完全未启用 → 不符合。

取证要求:log 配置截图、rsyslog 通道截图、日志平台检索样例(含时间/来源 IP/请求行/状态码)、最早日志时间戳(≥6 个月)。

A. 日志配置核查

核查命令:

grep -n "^log \|log global\|option httplog\|log-format" /etc/haproxy/haproxy.cfg
grep -rE "haproxy|514" /etc/rsyslog.d/ /etc/rsyslog.conf 2>/dev/null | head -n 6
journalctl -u haproxy --no-pager | tail -n 5
  • 备注:官方 log <target> [len] [format] [sample] <facility> [max level [min level]] 与 option httplog [clf] 语法核验;TCP 模式前端应确认 option tcplog 同样启用;核查日志是否外送(rsyslog @@<审计机>:6514 TLS 形态更佳)。
  • 预期证据:log 配置截图、外送配置截图、日志平台检索截图。
示例输出(节选)
$ grep -n "log \|option httplog" /etc/haproxy/haproxy.cfg
global
    log 127.0.0.1:514 local0
defaults
    log     global
    option  httplog
frontend web
    bind 192.168.10.5:443 ssl crt /etc/haproxy/certs/site.pem
    option httplog
$ grep -rE "haproxy" /etc/rsyslog.d/
30-haproxy.conf:programname,startswith,"haproxy" @@192.168.20.10:6514

B. 运维行为审计补偿

核查命令:

auditctl -l 2>/dev/null | grep -E "haproxy"
grep -rn "haproxy" /etc/audit/rules.d/ 2>/dev/null
  • 备注:HAProxy 无内置审计,配置文件变更审计依赖主机 auditd(watch on /etc/haproxy)与堡垒机会话留痕,缺失时结合日志平台与变更记录综合判定。
  • 预期证据:auditd 规则截图、堡垒机记录。

入侵防范

对应控制点:GB/T 22239-2019 8.1.4.4 入侵防范 a)~f)、8.1.4.5 恶意代码防范

判定要点:版本处于官方支持线(LTS 未到期,非 LTS 小版本及时跟进)、监听面最小化、高危管理端口不对业务网段开放、主机侧防恶意代码措施在位 → 符合;版本停止维护超 1 年或管理端口暴露 → 部分符合/不符合(视暴露面)。

取证要求:版本与官方支持期对照截图、漏洞扫描记录、端口暴露面证据、主机 EDR/杀毒状态(主机测评单元联动)。

A. 版本与支持线

核查命令:

haproxy -v
haproxy -vv | grep -E "Version|Built with"
  • 备注:haproxy -v 回显含 “Status: long-term supported branch - will end support around …",与官方下载页 LTS 支持期对照;已到期版本须核查升级计划或补偿(WAF/IPS 前置)。
  • 预期证据:版本截图、官方支持期页面截图、升级/补丁记录。

B. 暴露面与资源限制

核查命令:

ss -lntp | grep haproxy
grep -nE "^maxconn|^nbthread|^daemon|master-worker" /etc/haproxy/haproxy.cfg
  • 备注:仅放行业务端口与受限管理端口;maxconn/nbthread 与主机资源匹配防资源耗尽;systemd 部署下 daemon 通常由 -Ws(master-worker + systemd 集成)替代,属正常形态。
  • 预期证据:端口清单截图、容量参数截图。

数据完整性

对应控制点:GB/T 22239-2019 8.1.4.7 数据完整性 a)b)

判定要点:后端健康检查与会话保持无完整性破坏、配置版本化(cfg 纳入配置管理/git 或备份留痕)、haproxy -c 校验流程在变更中执行 → 符合;无配置备份与校验流程 → 部分符合。

取证要求:配置备份记录、变更流程与 -c 校验留痕。

核查命令:

haproxy -c -f /etc/haproxy/haproxy.cfg
ls -l /etc/haproxy/*.bak /backup/haproxy/ 2>/dev/null
  • 备注:-c 为只读校验(回显 “Configuration file is valid” 即通过),不加载配置;核查备份周期与异地存放。
  • 预期证据:校验回显截图、备份清单截图。

数据保密性

对应控制点:GB/T 22239-2019 8.1.4.8 数据保密性 a)b)

判定要点:对外 HTTPS 终止(bind … ssl crt)、TLS 最低版本不低于 1.2(官方 ssl-min-ver 默认即 TLSv1.2)、后端链路加密(server … ssl verify required ca-file)或后端处于同安全域内网并可说明 → 符合;明文 80 对外承载敏感业务且无重定向、后端跨网段明文 → 部分符合;TLS 允许 SSLv3/TLS1.0 且承载敏感数据 → 不符合。

取证要求:bind ssl 配置截图、ssl-min-ver/ciphers 配置截图、证书有效期与权限、后端加密配置、openssl 实测(openssl s_client -tls1 应失败、-tls1_2 应成功)。

A. TLS 终止与版本收敛

核查命令:

grep -n "bind .*ssl" /etc/haproxy/haproxy.cfg
grep -n "ssl-default-bind-options\|ssl-min-ver\|ciphers" /etc/haproxy/haproxy.cfg
openssl s_client -connect 192.168.10.5:443 -tls1 </dev/null 2>&1 | grep -E "alert|CONNECTED" | head -n 2
openssl x509 -in /etc/haproxy/certs/site.pem -noout -dates 2>/dev/null || openssl s_client -connect 192.168.10.5:443 </dev/null 2>/dev/null | openssl x509 -noout -dates
  • 备注:官方 ssl-min-ver [SSLv3|TLSv1.0|TLSv1.1|TLSv1.2|TLSv1.3] 默认值 TLSv1.2 已核验——默认即合规,重点是现场是否有 ssl-min-ver SSLv3.0/TLSv1.0 类显式放宽;bind ssl crt 指向含私钥的 PEM(权限 600)。
  • 预期证据:配置截图、协议探测截图、证书有效期截图。
示例输出(节选)
$ grep -n "ssl" /etc/haproxy/haproxy.cfg
global
    ssl-default-bind-options ssl-min-ver TLSv1.2
frontend web
    bind 192.168.10.5:443 ssl crt /etc/haproxy/certs/site.pem
$ openssl s_client -connect 192.168.10.5:443 -tls1 </dev/null 2>&1 | head -n 2
CONNECTED(...)
alert protocol version    # 旧协议被拒

B. 后端链路加密

核查命令:

grep -n -A3 "^backend\|^    server" /etc/haproxy/haproxy.cfg | head -n 12
  • 备注:官方 server 侧 verify [none|required] 语法核验——后端加密形态为 server s1 10.0.0.11:8443 ssl verify required ca-file /etc/haproxy/certs/backend-ca.crt;后端明文但位于同机房隔离内网时判部分符合并说明边界控制。
  • 【不适用】纯 TCP 四层转发(无 SSL 卸载与后端加解密职责)时 TLS 配置项不适用,传输加密由后端组件承载,注明依据。
  • 预期证据:backend 配置截图、架构说明。

备份恢复

对应控制点:GB/T 22239-2019 8.1.4.9 数据备份恢复 a)c)

判定要点:haproxy.cfg 与证书纳入备份且有恢复演练、双机(keepalived VRRP)部署具备冗余与切换演练 → 符合;仅单机且无备份 → 部分符合/不符合(视资产重要性)。

取证要求:备份策略与文件清单、keepalived 状态(ip addr show VIP 属主、journalctl -u keepalived)、切换演练记录。

核查命令:

find /backup -name "*haproxy*" 2>/dev/null | head
ip addr show | grep -A2 "vip\|192.168.10.5" | head -n 4
systemctl status keepalived --no-pager 2>/dev/null | head -n 4
  • 备注:HAProxy 本身无状态(会话保持依赖 cookie/粘表时注明重启影响),恢复=配置重载;双机细节与 VRRP 判定可在网络设备侧佐证。
  • 预期证据:备份清单截图、VIP 属主截图、演练记录。

剩余信息保护

对应控制点:GB/T 22239-2019 8.1.4.10 剩余信息保护 a)b)

核查命令:

ls -l /etc/haproxy/certs/
grep -n "insecure-password" /etc/haproxy/haproxy.cfg
find /etc/haproxy -name "*.bak" -o -name "*.old" | xargs ls -l 2>/dev/null
  • 备注:退役 backend/证书/旧配置及时清理;历史 insecure-password 明文口令残留须替换为 password 加密形态(变更类,走审批)。
  • 预期证据:清理前后对比截图。

个人信息保护

对应控制点:GB/T 22239-2019 8.1.4.11 个人信息保护 a)b)

核查命令:

grep -n "X-Forwarded-For\|option forwardfor" /etc/haproxy/haproxy.cfg
grep -rn "unique-id\|log-format" /etc/haproxy/haproxy.cfg | head -n 4
  • 备注:HAProxy 层仅透传日志字段,不直接处理业务个人信息;X-Forwarded-For 与日志中的 URL 参数可能携带个人信息——核查日志平台侧脱敏与访问控制(转日志审计/应用测评单元),本层留存流转发说明作为不适用依据。
  • 【不适用】负载均衡层不存储业务个人信息、日志字段经日志平台脱敏时,按对象实际处理范围判定不适用并注明。
  • 预期证据:配置截图、日志平台脱敏策略说明。

参考依据

  • GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》(8.1.4 安全计算环境):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF
  • GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》(单元测评的测评实施与结果判定):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C
  • HAProxy 官方配置手册(Configuration Manual,GitHub haproxy/haproxy master doc/configuration.txt——stats auth/userlist+password|insecure-password/stats http-request auth/bind :443 ssl crt/ssl-min-ver 默认 TLSv1.2/server 侧 verify [none|required]+ca-file/log/option httplog [clf] 全部逐条核验):https://github.com/haproxy/haproxy/blob/master/doc/configuration.txt
  • HAProxy 官方站点与下载页(版本线与 LTS 支持期):https://www.haproxy.org/
  • HAProxy 官方文档站(各版本配置与运行手册入口):https://docs.haproxy.org/
  • 《网络安全等级保护测评高风险判定指引》(中关村信息安全测评联盟团体标准),站内对照表:22、高风险判定指引与加固对照表
  • 命令核验说明:本文命令已于 2026-09 对照 HAProxy 官方 Configuration Manual(GitHub master 分支全文检索逐条核验)与官方站点核验;四处须留意:① userlist 中 password(crypt 加密,$6$ 为 SHA-512)与 insecure-password(明文)两种形态并存,明文形态须结合文件权限 600 与配置管理补偿判定;② ssl-min-ver 官方默认即为 TLSv1.2,现场若显式配置更低版本(SSLv3.0/TLSv1.0)才构成放宽;③ server 侧后端加密为 server … ssl verify required ca-file …(bind 侧 verify 语义为客户端证书校验,默认 none,两处不可混淆);④ 官方文档明确加密口令逐请求计算有 CPU 代价(SHA 系列尤甚),高并发场景收敛 auth 频次或改用 stats 界面单一认证入口。2.6/3.0 为 LTS 线,haproxy -v 回显自带支持期提示,以官方页为准。

关联文章