我在 HAProxy 中有一些简单的连接和连接速率限制:
# Store IPs to limit connection rate
stick-table type ip size 200k expire 5m store gpc0,conn_cur,conn_rate(10s)
tcp-request connection track-sc0 src
# Abusers are immediately rejected
tcp-request connection reject if { sc0_get_gpc0 gt 0 }
# Test connection count and rate
acl connabuse sc0_conn_cur gt 20
acl connkill sc0_inc_gpc0 gt 0
tcp-request connection reject if connabuse connkill
acl rateabuse sc0_conn_rate gt 30
acl ratekill sc0_inc_gpc0 gt 0
tcp-request connection reject if rateabuse ratekill
不幸的是,这已经造成了一些问题。我想暂时停止屏蔽用户,但记录达到这些限制的时间和 IP,这样我就可以尝试规则,看看哪些有效,哪些无效。我该怎么做?
答案1
除了屏蔽滥用者,您还可以添加响应标头来指示违反规则的客户端 IP 地址。如下所示:
http-request add-header X-Haproxy-Abuse %ci if connabuse
http-request add-header X-Haproxy-Kill %ci if connkill
其中 %ci 代表客户端 IP 地址,您可以记录此处提到的任何其他参数:http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#8.2.4
然后您捕获这些标题并将它们放入日志中,如文档中所述:http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#capture%20response
capture response header X-Haproxy-Abuse 15
capture response header X-Haproxy-Kill len 15