Проблема с Fail2ban на моем Docker Xibo

Вопрос или проблема

В настоящее время я пытаюсь настроить Fail2ban для работы с моим контейнером Xibo, но, даже когда я числюсь в списке заблокированных, я все равно могу попытаться войти в систему.

debian@vps-ec7a07fd:~/xibo$ sudo fail2ban-client status xibo
Status for the jail: xibo
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     7
|  `- File list:        /var/log/xilog/container.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   172.18.0.1

Я проверил IPtables, но не вижу ничего необычного.

 pkts bytes target     prot opt in     out     source               destination
 32  6227 f2b-xibo   6    --  *      *       0.0.0.0/0            0.0.0.0/0            
 multiport dports 80,443

И, наконец, я не вижу никаких ошибок в файле fail2ban.log.

2025-02-21 12:35:55,883 fail2ban.filter         [133082]: INFO    [xibo] Found 
172.18.0.1 - 2025-02-21 12:35:55
2025-02-21 12:35:57,813 fail2ban.filter         [133082]: INFO    [xibo] Found 
172.18.0.1 - 2025-02-21 12:35:57
2025-02-21 12:36:00,516 fail2ban.filter         [133082]: INFO    [xibo] Found 
172.18.0.1 - 2025-02-21 12:35:59
2025-02-21 12:36:00,674 fail2ban.actions        [133082]: NOTICE  [xibo] Ban 172.18.0.1
2025-02-21 12:36:02,119 fail2ban.filter         [133082]: INFO    [xibo] Found 
172.18.0.1 - 2025-02-21 12:36:01
2025-02-21 12:36:03,743 fail2ban.filter         [133082]: INFO    [xibo] Found 
172.18.0.1 - 2025-02-21 12:36:03
2025-02-21 12:36:05,501 fail2ban.filter         [133082]: INFO    [xibo] Found 
172.18.0.1 - 2025-02-21 12:36:05
2025-02-21 12:36:05,904 fail2ban.actions        [133082]: NOTICE  [xibo] 172.18.0.1 a 
lready banned
2025-02-21 12:36:07,244 fail2ban.filter         [133082]: INFO    [xibo] Found 
172.18.0.1 - 2025-02-21 12:36:07
2025-02-21 12:39:05,184 fail2ban.actions        [133082]: NOTICE  [xibo] Unban 
172.18.0.1

Если у вас есть идеи, откуда может быть проблема, я открыт для любых предложений.

Я нашел зацепку, так как это контейнер, он блокирует IP Docker, в данном случае 172.18.0.1, а не мой личный адрес, но я все еще не понимаю, как получить логи с личными IP-адресами пользователей.

Ответ или решение

Ваша проблема связана с конфигурацией Fail2ban в среде Docker, при которой не работает блокировка настоящего IP-адреса пользователя. Давайте рассмотрим теорию, примеры и непосредственное применение решения для этого типа проблемы.

Теория

Fail2ban — это инструмент, который помогает защитить серверы от несанкционированного доступа и атак, таких как brute force, путем анализа логов и добавления правил в IPtables. Однако, при работе в среде Docker возникают специфические сложности. В частности, Docker работает в своей собственной виртуализированной сети, и Fail2ban часто может видеть только IP-адреса внутри контейнера (например, 172.18.0.1), а не реальные внешние IP-адреса приходящих запросов.

Это явление связано с тем, как роутинг работает в Docker. Контейнеры имеют свои собственные виртуальные сети и подключены к хосту через виртуальные сетевые интерфейсы. В результате инструменты, которые, как Fail2ban, работают на хосте, видят IP-адрес Docker-шлюза, через который проходятся соединения из контейнеров.

Пример

На данный момент ваша настройка Fail2ban ссылается на Docker IP 172.18.0.1, и это является причиной ее неправильной работы. Ваш журнал показывает, что ваши попытки неправильного входа и последующая блокировка происходят с этого IP.

Компоненты вашей текущей настройки:

  • Fail2ban пытается заблокировать 172.18.0.1, который является адресом внутри Docker.
  • Логи проверяются в /var/log/xilog/container.log.
  • Активные правила IPtables включают цель f2b-xibo, но это изменение внутри Docker не применимо ко внешнему миру.

Применение

Чтобы добиться блокировки реальных IP-адресов, необходимо перехватывать их на уровне nginx или другого вашего веб-прокси, откуда будут получены реальные IP-адреса пользователей. Вот несколько шагов, которые могут помочь вам:

  1. Использование nginx как обратного прокси:

    • Перенаправьте трафик через nginx, что позволит вам зафиксировать реальные IP-адреса клиентов в логах.
    • Убедитесь, что включено ведение логов спереди:
      log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for"';
      access_log /var/log/nginx/access.log main;
    • Это обеспечит правильное журналирование внешних IP.
  2. Настройка Fail2ban для работы с этими логами:

    • Убедитесь, что Fail2ban анализирует логи доступа веб-сервера, а не контейнера:
      [xibo]
      enabled  = true
      port     = http,https
      filter   = xibo
      logpath  = /var/log/nginx/access.log
      maxretry = 3
    • Создайте соответствующий фильтр для Fail2ban, чтобы аналзировать успешные и неуспешные логины, извлекая IP из доступа к nginx логам.
  3. Настройка правил IPtables:

    • Убедитесь, что правила IPtables применяются корректно на уровне хоста, а не внутри контейнера:
      iptables -I INPUT -s <banned_ip> -j DROP
    • Это позволит обеспечить блокировку корректных IP.
  4. Исправление конфигурации Docker Networking:

    • Оцените возможность использования Docker Compose с корректной сетью и настройками.

Заключение

Использование разнообразных методов сетевой маршрутизации и анализа логов на уровне хоста может требовать адаптации конфигурации. Важно убедиться, что маршрутизация сетевого трафика настроена корректно для получения данных полезных логов. Fail2ban должен быть сконфигурирован таким образом, чтобы использовать эти логи и применять правила эффективно. В данном сценарии nginx, как основной генератор логов, предоставляет детализированные данные о внешних IP, что позволяет Fail2ban точно блокировать недобросовестные IP-адреса пользователей.

Оцените материал
Добавить комментарий

Капча загружается...