У меня есть простое соединение и ограничение скорости соединения в 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-адрес при достижении этих ограничений, чтобы я мог поиграть с правилами и посмотреть, что работает, а что нет. Как я могу это сделать?
Вместо блокировки злоумышленников вы можете добавить заголовки ответов, указывающие 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