我想将向特定 URL 发送垃圾邮件的 IP 列入黑名单,但仅限于一定时间内。比如说 10 分钟。
我正在考虑创建一个 stick-table,并存储源 IP 并增加一个计数器。一旦计数器超过 X 次重试,我就会拒绝它。
stick-table 有一个 expire 参数,但我注意到,只要有新数据写入其中,过期计数器就会重置。因此 expire 参数是全表的。因此,除非 10 分钟内没有添加任何内容,否则条目永远不会过期。
有没有什么办法可以实现这种暂时阻止?
答案1
棍棒桌确实有有效期限,但它是按条目而不是按桌计算的。
根据文档:
到期
定义表中条目自上次创建、刷新或匹配以来的最大持续时间。到期延迟使用标准时间格式定义,与各种超时类似。最大持续时间略高于 24 天。有关更多信息,请参阅第 2.2 节。如果未指定此延迟,则会话不会自动过期,但较旧的条目一旦填满就会被删除。如果未指定到期延迟,请确保不要使用“nopurge”参数。
因此你可以使用它们来做你想做的事情。
事实上,这个问题已经在博客中得到解答了邮政感谢运营这个网站的优秀人员,以及一由维护 HAProxy 的人们提供。
基本上,你只需要几行就可以让它工作
stick-table type ip size 100k expire 10m store conn_rate(3s)
tcp-request connection reject if { src_conn_rate ge 10 }
tcp-request connection track-sc1 src
应该在哪里conn_rate(3s)
进行修改以反映应触发临时黑名单的连接率。