Как реализовать fail2ban с Traefik

Я заинтересован в настройке fail2ban с моим развертыванием Traefik. Я нашел суть, в которой есть несколько фрагментов, но я не понимаю, как использовать их. Кто-нибудь может заполнить пробелы? Или есть лучший способ реализовать безопасность в стиле fail2ban с помощью Traefik?


person Seffyroff    schedule 31.08.2018    source источник
comment
Казалось бы, вы создаете файлы в месте, указанном первым комментарием в файле. Игнорируйте бот-поиск, он просто усложнит работу сети. Traefik_access_log необходимо заменить / установить там, где Traefik создает файл журнала. Тег докера в вашем вопросе подразумевает, что Traefik находится в докере? Если да, то как? Есть ли еще одно облачное решение? Как fail2ban достигает файла доступа и сетевых интерфейсов, необходимых для блокировки. Я бы создал проблему github.com/fail2ban/fail2ban/issues с примером из log-файлы, чтобы он стал основным.   -  person danblack    schedule 09.09.2018
comment
Привет, Дэн! Спасибо, что прочитали мой вопрос. Приношу свои извинения, поскольку Traefik очень часто используется для автоматического проксирования контейнеров Docker, я высказал это как предположение, и действительно, как вы говорите, это заслуживает внимания и, по сути, является одним из моих вопросов - это те файлы из gist, созданный на хосте Docker или внутри контейнера Traefik? Есть ли лучший подход к тому, чтобы сделать это «докерским способом»? возможно, с контейнерной версией fail2ban?   -  person Seffyroff    schedule 20.09.2018
comment
Согласен. Предложите заняться этим разработчиками fail2ban, чтобы придумать хорошую архитектуру работы с контейнерами докеров. . Будьте с ними вежливы, они слишком много внимания уделяют безотказной безопасности, чтобы отпугнуть некоторых разработчиков.   -  person danblack    schedule 21.09.2018


Ответы (1)


Я смог добиться этого, начиная с содержания, которое вы опубликовали. Это сделано при предположении, что у вас уже работает Traefik, вы хотите заблокировать IP-адреса с ошибками базовой аутентификации HTTP и заблокировать их с помощью iptables. Есть пара частей, поэтому позвольте мне начать с конфигураций контейнера:

Трафик docker-compose.yaml

version: '2'
services:
  traefik:
    image: traefik:alpine
    volumes:
    - /apps/docker/traefik/traefik.toml:/traefik.toml:ro
    - /apps/docker/traefik/acme:/etc/traefik/acme
    - /var/log/traefik:/var/log
    ports:
    - 8080:8080/tcp
    - 80:80/tcp
    - 443:443/tcp
    command:
    - --web
    - --accessLog.filePath=/var/log/access.log
    - --accessLog.filters.statusCodes=400-499

Здесь вы видите, что я пишу файл журнала для /var/log/access.log и получаю коды доступа только для 400-499. Затем я монтирую этот файл на свой хост /var/log/traefik:/var/log

Теперь что касается части fail2ban, я использую контейнер докеров fail2ban, а не устанавливаю на свой хост , но технически вы тоже можете это сделать.

Fail2ban docker-compose.yaml

version: '2'
services:
  fail2ban:
    image: crazymax/fail2ban:latest
    network_mode: "host"
    cap_add:
    - NET_ADMIN
    - NET_RAW
    volumes:
    - /var/log:/var/log:ro
    - /apps/docker/fail2ban/data:/data

Как видите, я монтирую каталог /var/log в контейнер fail2ban только для чтения.

Конфигурация Fail2ban

Файл /apps/docker/fail2ban/data/jail.d/traefik.conf содержит:

[traefik-auth]
enabled = true
logpath = /var/log/traefik/access.log
port = http,https

Файл /apps/docker/fail2ban/data/filter.d/traefik-auth.conf содержит:

[Definition]
failregex = ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+\" 401 .+$
ignoreregex =

Дополнительный

Действие запрета по умолчанию - запретить через iptables. Если вы хотите изменить это, вы можете изменить значение по умолчанию banaction в traefik.conf, например:

[DEFAULT]
banaction = cloudflare

[traefik-auth]
enabled = true
logpath = /var/log/traefik/access.log
port = http,https

Действия здесь: https://github.com/fail2ban/fail2ban/tree/0.11/config/action.d

Если вам нужно его изменить, скопируйте файл в каталог /apps/docker/fail2ban/data/action.d и перезапустите контейнер.

person Devin B.    schedule 12.10.2018
comment
Спасибо, Девин, это действительно отличное описание. Мой единственный вопрос здесь будет касаться метрики блокировки, основанной на основных сбоях аутентификации - я вижу, что существует множество литературы о предоставлении источников журналов для отслеживания метрик. - person Seffyroff; 17.10.2018
comment
Какой формат журнала вы используете для traefik? json или common или не важно? - person Peter; 27.11.2018
comment
Я использую то, что по умолчанию, что кажется обычным. - person Devin B.; 28.11.2018
comment
Не могли бы вы объяснить, что делает флаг --web? Связано ли это с журналами и fail2ban или другой конфигурацией Traefik? Большое спасибо! - person TH_; 04.12.2019
comment
--web (устарело) Включить веб-сервер с настройками по умолчанию (по умолчанию false) traefik.mattclemente.com - person Devin B.; 05.12.2019
comment
Я изменил две вещи, чтобы он работал с ноября 2020 года --- 1. Изменил failregex на failregex = ^ ‹HOST› \ - \ S + [. *] \ (GET | POST | HEAD). + \ 401. + $ ---- 2. Добавьте цепочку = DOCKER-USER в traefik.conf - person Kencourt; 18.11.2020