Как настроить работу fail2ban на сервере находящимся за haproxy?

Всем доброе время суток!

Имеется сервер redmine находящийся в локальной сети, в мир он выходит через сервер haproxy, который настроен у меня как реверс прокси. Решил я на сервере redmine настроить fail2ban. Настроил как положено, решил попробовать в работе, но и столкнулся со следующем: в логах у fail2ban видно что при при срабатывании выставленных мною условий происходит бан ip адреса после нескольких неудачных попыток залогиниться, но как таково блокировка доступа к ресурсу не происходит. Поэтому возник резонный вопрос, как вообще настраиватся поведение fail2ban на сервере, который стоит за прокси сервером?

Получается работа ведётся так

WAN<---EXT-IP--->HAPROXY<---LOCAL-IP--->REDMINE_SERVER

Настройки haproxy примерно выглядят так

frontend http_frontend
        bind *:80
        mode http
        redirect scheme https if !{ ssl_fc }

frontend https_frontend_ssl_terminate
        mode http
        bind *:443 ssl crt <path_to_cert>/sert.pem
        option  forwardfor header X-Real-IP
        option  http-keep-alive
        acl letsencrypt-acl path_beg /.well-known/acme-challenge/
        use_backend letsencrypt-backend if letsencrypt-acl
        acl is_redmine hdr(host) -i redmine.server.ru
        use_backend redmine if is_redmine

backend redmine
        mode http
        cookie SERVERID insert indirect nocache
        http-request set-header X-Client-IP %[src]
        http-request set-header X-Forwarded-Port %[dst_port]
        http-request add-header X-Forwarded-Proto https if { ssl_fc }
        server redmine.server.ru 192.168.1.1:80 check cookie redmine.server.ru


настройка jail.local

[redmine]
enabled = true
filter = redmine
port = http,https
logpath = /<path_to_redmine>/log/production.log
maxretry = 5
findtime = 600
bantime = 600


вообще есть ли смысл настраивать fail2ban при такой конфигурации?
  • Вопрос задан
  • 1792 просмотра
Решения вопроса 1
Насколько понял вашу конфигурацию, использовать F2B на BE смысла немного.
На BackEnd (REDMINE_SERVER) приходят http запросы у которых IP адрес источника для всех - LOCAL-IP (реальный адрес же передается как http header, который fail2ban если и увидит из логов и забанит их, но ip адреса пакетов будут всё-равно приходить с LOCAL-IP адреса).
А банить надо внешние адреса на интерфейсе EXT-IP, который на FE (HAPROXY)

Т.е. в такой схеме видится такой путь реализации: надо гонять F2B на FE, а анализировать логи redmine на BE (примонтировать папку по nfs/sshfs, например, с оглядкой на нагрузку) и банить внешние адреса на FE.

Если не изменяет склероз, то в каком-то далеком будущем обещалось уже не помню кем добавить поддержку Redis в F2B, как хранилище забаненных. Тогда было бы проще - на BE работает F2B и анализирует логи, и вносит адреса злодеев в редиску. А работающий на фронте F2B работает с этим же хранилищем и банит негодяев. О реальности и перспективности оных изменений лучше смотреть сообщество F2B, мопед не мой, пересказ слухов :)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Redaicd
Дело в том, что апач не знает ничего про внешние адреса, но его можно научить
Настроить в апаче модуль remoteip
конфиг модуля приблизительно такой
RemoteIPHeader X-Real-IP
RemoteIPInternalProxy 127.0.0.1 10.10.10.10 итд все локальные адреса сервера где установлен хапрокси
в формате лога апача для редмайн поменять %h на %a, чтобы fail2ban брал правильные внешние адреса для блокировки

если не получится с заголовком X-Real-IP попробуйте поменять на X-Forwarded-For в апаче и
option forwardfor header X-Real-IP на option forwardfor на фронтенде хапрокси
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы