Добавить в корзинуПозвонить
Найти в Дзене

Настройка fail2ban для Marzban

Всем привет!🖐 Все, у кого есть сервисы в открытом доступе, знают — брутфорс атаки это не миф, а ежедневная реальность. Fail2ban — простое и надежное решение, которое автоматически банит IP после нескольких неудачных попыток входа. Настроил за 15 минут — забыл о проблеме.
Установка fail2ban: apt install fail2ban 2. Создаем фильтр для нашего Marzban: mkdir /etc/fail2ban/filter.d/marzban.conf [Definition]
# Регулярные выражения для поиска атак
failregex = ^\{"log":"INFO:\s+<HOST>:\d+\s+-\s+\\"POST /api/admin/token HTTP/1\.1\\"\s+401 Unauthorized\\n".*$
[Init]
__time_regex = ^$ # Отключаем парсинг времени, плохо парсит из Docker 3. Создаем jail: mkdir /etc/fail2ban/jail.d/marzban.local [marzban] # Имя jail (можно менять)
enabled = true # Включить/выключить
backend = auto # Автовыбор источника логов (systemd или файл)
filter = marzban # Имя фильтра (должен совпадать с именем файла фильтра)
logpath = /var/lib/docker/con

Всем привет!🖐

Все, у кого есть сервисы в открытом доступе, знают — брутфорс атаки это не миф, а ежедневная реальность.

Fail2ban — простое и надежное решение, которое автоматически банит IP после нескольких неудачных попыток входа.

Настроил за 15 минут — забыл о проблеме.

Установка fail2ban:

apt install fail2ban

2. Создаем фильтр для нашего Marzban:

mkdir /etc/fail2ban/filter.d/marzban.conf

[Definition]
# Регулярные выражения для поиска атак
failregex = ^\{"log":"INFO:\s+<HOST>:\d+\s+-\s+\\"POST /api/admin/token HTTP/1\.1\\"\s+401 Unauthorized\\n".*$

[Init]
__time_regex = ^$ # Отключаем парсинг времени, плохо парсит из Docker

3. Создаем jail:

mkdir /etc/fail2ban/jail.d/marzban.local

[marzban] # Имя jail (можно менять)
enabled = true # Включить/выключить
backend = auto # Автовыбор источника логов (systemd или файл)
filter = marzban # Имя фильтра (должен совпадать с именем файла фильтра)
logpath = /var/lib/docker/containers/КОНТЕЙНЕР_ID/КОНТЕЙНЕР_ID-json.log
port = http,https,8080,8443 # Порты для блокировки (опционально)
maxretry = 5 # Количество попыток до бана
bantime = 3600 # Время бана в секундах (3600 = 1 час)
findtime = 600 # Период для подсчета попыток (600 = 10 минут)
ignoreip = 127.0.0.1/8 ::1

Полезные команды:

Управление службой:

# Перезапуск
sudo systemctl restart fail2ban

# Проверка статуса службы
sudo systemctl status fail2ban

# Включить автозагрузку
sudo systemctl enable fail2ban

Мониторинг:

# Статус всех jail
sudo fail2ban-client status

# Статус конкретного jail
sudo fail2ban-client status marzban

# Проверить конфигурацию
sudo fail2ban-client -t

# Логи fail2ban в реальном времени
sudo tail -f /var/log/fail2ban.log

Управление банами:

# Забанить IP вручную
sudo fail2ban-client set marzban banip 8.8.8.8

# Разбанить IP
sudo fail2ban-client set marzban unbanip 8.8.8.8

# Показать забаненные IP
sudo fail2ban-client get marzban banned

# Снять все баны
sudo fail2ban-client set marzban unbanip --all

Диагностика:

# Найти ID контейнера
docker ps -aqf "name=marzban"

# Проверить путь к логам контейнера
ls -la /var/lib/docker/containers/

# Проверить работу фильтра
fail2ban-regex /var/lib/docker/containers/*/*-json.log /etc/fail2ban/filter.d/marzban.conf

# Проверить правила iptables
sudo iptables -L -n | grep -A10 "f2b-marzban"
sudo iptables -L f2b-marzban -n

# Смотреть логи в Docker контейнере
docker logs marzban-1 --tail 50 # marzban-1 - название контейнера

Подписывайтесь на мой канал CraftForge, там еще больше интересного!