Как заблокировать IP-адреса в HAProxy?

Ответы:

21

Вы можете удалить IP на уровне tcp, создав ACL, а затем используя отклонение соединения, если ACL соответствует:

    acl bad_ip src 10.10.10.0
    tcp-request connection reject if bad_ip

Вы также можете настроить бэкэнд 403 и отправить его туда, если вы хотите сделать это на уровне HTTP:

frontend foo
        ...
        acl bad_ip src 10.10.10.0
        use_backend bad_guy if bad_ip
...

backend bad_guy
        mode http
        errorfile 403 /etc/haproxy/errors/403.http

Эти ACL могут быть довольно гибкими, и вы можете сделать так, чтобы выполнялись несколько условий в ACL или несколько ACL в рамках действия. Больше на http://haproxy.1wt.eu/download/1.5/doc/configuration.txt .

Кайл Брандт
источник
4
Вам нужен только отдельный бэкэнд, если вы хотите использовать пользовательскую страницу ошибки 403. В противном случае, вы можете избежать «http-request deny if bad_ip»
sh-beta
1
Знаете ли вы, как читать ips из более гибкого хранилища, такого как БД или отдельный плоский файл?
UpTheCreek,
1
Этот бэкэнд bad_guy не работает должным образом, так как у него нет определенных серверов, он считается отключенным и всегда будет возвращать 503 - служба недоступна. Я просто хотел бы, чтобы вы просто записали «block if bad_ip» в конфигурацию веб-интерфейса, и он выдаст 403 страницы правильно. РЕДАКТИРОВАТЬ: http-запрос отклонить, если bad_ip работает как рекламируется @ sh-beta - по сути, делает то же самое, но, может быть, только для запросов http?
Далибор Филус
Есть еще одно небольшое различие между блоком и http-запросом, отрицающим и заключающееся в следующем: «правило« блока », помещенное после правила« use_backend », все равно будет обрабатываться раньше».
Далибор Филус
2
Если вы дадите «плохому» парню 403, то он знает, что он заблокирован, и будет искать другой вектор. Если вы дадите "плохому" парню 503 .. тогда он думает, что он успешно вызвал DOS и остановил атаку .. Конечно, он может это понять, но это займет у него намного больше времени.