Haproxy:拒绝文件中用户代理的流量

Haproxy:拒绝文件中用户代理的流量

我尝试使用 haproxy ACL 和 -f 选项从文件中读取数据,以拒绝来自特定用户代理的连接(通过匹配用户代理标头的子字符串)。但是它不起作用,它运行时就像配置被忽略一样。

有经验的人能指出我遗漏了什么吗?或者一些关于如何调试此 haproxy 配置的提示?

我正在运行 haproxy 1.4.18。

这是 haproxy.cfg 的摘录:

listen http 0.0.0.0:80
    acl abuser hdr_sub(user-agent) -f /etc/haproxy/abuser.lst
    tcp-request content reject if abuser
    mode http
    server www1 127.0.0.1:8080 maxconn 10000

这是 abuser.lst 文件的内容:

# annoying bots
annoyingbot1
annoyingbot2

答案1

这个问题很老了,但万一其他人遇到这个问题:

您的问题源于tcp-request contentHAProxy 在有时间接收/读取任何第 7 层数据之前运行。

如何解决这个问题?

简单:添加tcp 请求检查延迟

listen http 0.0.0.0:80
    tcp-request inspect delay 15s

    acl abuser hdr_sub(user-agent) -f /etc/haproxy/abuser.lst
    tcp-request content reject if abuser
    mode http
    server www1 127.0.0.1:8080 maxconn 10000

以下是 HAProxy 文档中关于此问题的重要内容:

请注意,在执行内容检查时,haproxy 将评估每个新进入的块的整个规则,同时考虑到这些数据是部分的。如果在上述延迟之前没有规则匹配,则在到期时执行最后一次检查,这次检查认为内容是确定的。如果没有设置延迟,haproxy 将不会等待,并会立即根据可用信息做出判定。显然这不太可能很有用,甚至可能很不雅,所以不推荐这样的设置。

相关内容