Назад | Перейти на главную страницу

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

Это старый вопрос, но если кто-то еще столкнется с этой проблемой:

Ваша проблема связана с тем, что tcp-request content запускается до того, как HAProxy успевает получить / прочитать какие-либо данные уровня 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 вообще не будет ждать и немедленно вынесет вердикт на основании доступной информации.. Очевидно, что это вряд ли будет очень полезно и даже может быть пикантным, поэтому такие настройки не рекомендуются.