Fail2ban

Обсуждение, отзывы, пожелания к статьям в разделе Безопасность
Только администрация может создавать темы.
Сообщения могут писать все посетители.
Ответить
Admin
Администратор
Администратор
Сообщения: 18
Зарегистрирован: 25 апр 2022, 16:14

Fail2ban

Сообщение Admin »

Обсуждение статьи Fail2ban

Установка настройка Fail2ban

Зачем нужен Fail2ban

Что бы изменять правила брандмауэра для временной блокировки айпи-адресов с которых происходят многократные неудачные попытки ввода пароля. А так же попытки сканировать на уязвимости, назойлевых ботов. Из коробки Fail2Ban поставляется с фильтрами для различных сервисов (apache, courier, ssh и т.д.). Приложение работает на основе анализа логов сервисов установленных на сервере и использует правила заданные пользователем или по умолчанию, для блокировки подозрительной активности идущей с ip адресов. Это очень нужный и обязательный сервис для сервера.

Установка Fail2ban в Debian

Перед установкой обновляем пакеты и устанавливаем само приложение, оно доступно из репозитория Дебиан:

Код: Выделить всё

sudo apt update
sudo apt upgrade -y
sudo apt install fail2ban -y
Настройка Fail2ban в Debian

Конфигурационные файлы по умолчанию не изменяют, потому что при следующем обновлении все ваши настройки будут потеряны. Поэтому для настроек создается отдельный файл в котором производятся пользовательские настройки. Создать файл пользовательских настроек Fail2ban скопировав основной файл с настройками:

Код: Выделить всё

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Откроем файл настроек и разберем некоторые настройки:

Код: Выделить всё

sudo nano /etc/fail2ban/jail.local
Некоторые настройки закомментированы. Найдем и включим их убрав символ решетки.

ignoreip - по умолчанию ignoreip = 127.0.0.1/8 ::1 здесь указываем список ip адресов, которые нужно исключить из алгоритмов Fail2ban. К ним не будут применяться ограничения. Диапазоны и IP адресов стоит разделить пробелом. Сюда можно добавить локальный ip, а также свою домашнюю подсеть, чтобы у вас не возникло проблем при входе. Например ignoreip = 127.0.0.1/8 192.168.0.0/24, но надо быть осторожным с этим разрешением и не включать его, мало ли злоумышленники будут иметь доступ в вашу локальную сеть. Главное не забаниться самому, поэтому для доступа по ssh обязательно настроить вход по ключу и для еще более большей надежности сделать двухфакторную аутентификацию.

bantime - по умолчанию bantime = 10m указывает время, на которое клиенту буде закрыт доступ к серверу, если он не сможет авторизоваться, принимает значение в секундах, можно указать h - час , m - минут

findtime - по умолчанию findtime = 10m время в секундах, на протяжении которого рассчитывается maxretry

maxretry - по умолчанию maxretry = 5 указывает количество попыток перед тем, как доступ будет заблокирован

С такими настройками по умолчанию блокировка произойдет,на 10 минут (bantime), если в течении 10 минут (findtime) 5 раз (maxretry) будут неудачные попытки ввода данных, например логин/пароль.

Для активации защиты определенного сервиса необходимо включить соответствующий jail это можно сделать несколькими способами непосредственно в файле /etc/fail2ban/jail.local или создать в папке /etc/fail2ban/jail.d/ свой файл с настройками джаилов, например my-jail.conf

Активация JAIL в файле jail.local

Все названия джайлов заключены в квадратные скобки. По умолчанию включен только sshd причем включён в файле defaults-debian.conf . Команда на включения jail - enabled = true. Открыть и закомментировать включение джайла ssh потому что включим его в jail.local .

Код: Выделить всё

sudo nano /etc/fail2ban/jail.d/defaults-debian.conf
Поставить решетку перед #enabled = true

Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

Для примера включим джайл для ssh и настроим. Находим в файле sudo nano /etc/fail2ban/jail.local запись [sshd] это название джайла и после него дописываем следующие строки:

Включение джайла

Код: Выделить всё

enabled = true
Следующие настройки можно не вводить, если вас устраивает, то что установлено по умолчанию. filter -применяется по умолчанию одноименный правилу (джайл), можно написать собственный фильтр на основе логов, но это отдельная тема. Сделаем персональные настройки для ssh отличные от параметров по умолчанию.

Правило парсинга лога для выявления атаки. Все правила парсинга для различных jail находятся в каталоге /etc/fail2ban/filter.d вдаваться в подробности их создания это уже другая тема.

Код: Выделить всё

filter = sshd
Максимальное число ошибок 3 перед баном

Код: Выделить всё

maxretry = 3
Время 5 минут в течении которого должен ввестись правильный пароль исходя из числа попыток maxretry

Код: Выделить всё

findtime = 5m
Время бана айпи адреса - сутки

Код: Выделить всё

bantime = 24h
Должна получится такая запись. Можно просто скопировать и вставить примерно 280 строка.

Код: Выделить всё

[sshd]

# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
enabled = true
filter = sshd
maxretry = 3
findtime = 5m
bantime = 24h
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Если изменялся порт доступа к ssh, то обязательно нужно его указать

logpath - путь к файлу логов оставляем по умолчанию. Если что логи авторизации по ssh записываются в /var/log/auth.log. Если путь менялся его нужно указать, ибо по ним анализируются возможные атаки.

banaction = iptables-multiport - действие по бану дописывать не стал, он и так по умолчанию прописан. Все действия по бану находятся в каталоге /etc/fail2ban/action.d и это то же отдельная тема для ее раскрытия.

Активация JAIL в пользовательском файле

ВНИМАНИЕ - если сервис не установлен, а к нему активируется джайл, ошибки при проверки конфигурации не будет. А Fail2ban работать не будет в статусе будет ошибка.

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

По умолчанию джайлы для апач разделены на несколько частей, находятся под общим закомментированым названием HTTP servers, сделаем файл в каталоге sudo nano /etc/fail2ban/jail.d/apache.conf и включим некоторые из джайлов для сервера апач.

Код: Выделить всё

# выявляем неудачные попытки ввода пароля
[apache-auth]
enabled = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 3
bantime = 12h
# выявляем потенциальные сканирования для применения эксплойтов и php уязвимостей
[apache-noscript]
enabled = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 3
bantime = 12h
# выявляем попытки переполнения Апача
[apache-overflows]
enabled = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 2
bantime = 12h
# выявляем неудачные попытки в поиске домашней директории на сервере
[apache-nohome]
enabled = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 2
bantime = 12h
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

Закомментировал правило [apache-auth] потому что оно меня блокирует, когда редактирую страницы в вордпресс. Причины выясняю. Можно не комментировать, а добавить строчку в этом джайле ignoreip = мой_айпи. Но это не вариант, потому что у меня динамический айпи, каждый раз сюда бегать и править не вариант.

В плагине WP-Security- Файрвол убрал галку Полностью блокировать доступ к XMLRPC и все заработало, точнее меня файл2бан перестал банить.

Это не все jail , будет время напишу про остальные.

Проверка конфигурации и перезапуск Fail2ban

После любых изменений в конфигурации необходимо ее проверить командой:

Код: Выделить всё

sudo fail2ban-client -d
Перезапустить Fail2ban , что бы изменения вступили в силу.

Код: Выделить всё

sudo systemctl restart fail2ban
Проверка работы Fail2ban

Код: Выделить всё

sudo systemctl status fail2ban
Просмотр логов Fail2ban

Код: Выделить всё

sudo journalctl -b -u fail2ban
Или открыть файл:

Код: Выделить всё

sudo nano /var/log/fail2ban.log
Просмотр активных jail и статистика

Код: Выделить всё

sudo fail2ban-client status
Вывод будет примерно таким

Код: Выделить всё

Status
|- Number of jail:      1
***- Jail list:   sshd
Статистику по активному джайлу можно узнать командой

Код: Выделить всё

sudo fail2ban-client status sshd
На выходе увидим путь к файлу логов который обрабатывается, колличество неудачных попыток, колличество забаненых на данный момент и забаненые ip-адреса.

Разбанить / забанить вручную

Снять блокировку с айпи-адреса можно командой

Код: Выделить всё

sudo fail2ban-client set sshd unbanip IPADDRESS
Забанить ip

Код: Выделить всё

sudo fail2ban-client set sshd banip IPADDRESS
Ответить