Haproxy: отклонение трафика пользовательским агентом из файла
Я пытаюсь отклонить соединения от определенных пользовательских агентов (сопоставляя подстроку заголовка пользовательского агента), используя haproxy ACL с опцией -f для чтения из файла. Однако он не работает, он работает так, как будто конфигурация игнорируется.
Может кто-то с большим опытом работы с haproxy точно определить, чего мне не хватает? Или несколько советов о том, как отладить эту конфигурацию 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 content
запускается до того, как HAProxy успел получить / прочитать любые данные уровня 7.
Как это исправить?
Легко: добавьте tcp-запрос inspect-delay:
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 не будет ждать вообще и немедленно применит решение на основании доступной информации. Очевидно, что это вряд ли будет очень полезно и даже может быть очень странным, поэтому такие настройки не рекомендуются.