HAProxy可通过ACL规则实现前置防御,支持基于请求方法、头字段、URL路径与长度、动态限速及隐藏后端等多重安全策略。
HAProxy 在负载均衡过程中能直接拦截和过滤恶意 HTTP 请求,不依赖后端服务,属于“前置防御”。它通过 ACL(访问控制列表)匹配请求特征,再用 block、redirect 或 http-request deny 等指令实时干预流量,既减轻后端压力,又提升整体安全性。
很多攻击(如扫描、注入试探)会使用非法 HTTP 方法或缺失关键头字段。HAProxy 可快速识别并阻断:
acl valid_method method GET + http-request deny if !valid_method
acl need_cookie hdr_cnt(cookie) lt 1 + http-request deny if need_cookie
acl bad_ua hdr(user-agent) -i sqlmap|nmap|gobuster + http-request deny if bad_ua
针对短链接、API 接口等固定格式服务,可对路径结构设硬性约束:
acl valid_path path_reg -i ^/[^/]{10}$ + http-request deny if !valid_path
acl scan_path path_beg -i /phpmyadmin/ /wp-admin/ /admin.php + http-request deny if scan_path
acl long_url url_len gt 2048 + http-request deny if long_url
对高频恶意行为(如暴力扫描、CC 攻击),单靠静态规则不够,需结合动态状态跟踪:
stick-table type ip size 1m expire 10m store http_req_rate(10s)
http-request track-sc0 src + http-request deny deny_status 429 if { sc_http_req_rate(0) gt 10 }
http-request set-var(req.blocked) str(1) if { sc_http_req_rate(0) gt 50 } + http-request deny if { var(req.blocked) eq 1 }
避免暴露架构信息,同时把误请求导向安全出口,减少日志噪音和误报干扰:
rspdel ^Server:|X-Powered-By:
acl is_favicon path_beg /favicon.ico + http-request redirect location https://example.com/favicon.ico code 301 if is_favicon
errorfile 403 /etc/haproxy/errors/403.http