Зачем нужен 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/ свой файл с настройками jail, например my-jail.conf
Активация JAIL
Все названия jail заключены в квадратные скобки. По умолчанию только sshd причем включён в файле defaults-debian.conf . Команда на включения jail - enabled = true. Открыть и закомментировать включение jail ssh потому что включим его в jail.local.
sudo nano /etc/fail2ban/jail.d/defaults-debian.conf
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Для примера включим jail для ssh и настроим. Находим в файле sudo nano /etc/fail2ban/jail.local запись [sshd] это название jail и после него дописываем следующие строки:
Включение jail
enabled = true
Следующие настройки можно не вводить, если вас устраивает, то что установлено по умолчанию. filter -применяется по умолчанию одноименный правилу (jail), можно написать собственный фильтр на основе логов, но это отдельная тема. Сделаем персональные настройки для ssh отличные от параметров по умолчанию.
Правило парсинга лога для выявления атаки. Все правила парсинга для различных jail находятся в каталоге /etc/fail2ban/filter.d вдаваться в подробности их создания это уже другая тема.
filter = sshd
Максимальное число ошибок 3 перед баном
maxretry = 3
Время 5 минут в течении которого должен ввестись правильный пароль исходя из числа попыток maxretry
findtime = 5m
Время бана айпи адреса - сутки
bantime = 24h
Временные интервалы можно указывать не только в секундах:
- секунды - seconds, sec, ss, s
- минуты - minutes, min, mm, m
- часы - hours, hou, hh, h
- дни - days, da, dd, d
- недели - weeks, wee, ww, w
- месяцы - months, mon
- годы -years, yea, yy, y
- без ограничения по времени -1 (минус один)
Должна получится такая запись. Можно просто скопировать и вставить примерно 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 в пользовательском файле
ВНИМАНИЕ - если сервис не установлен, а к нему активируется jail, ошибки при проверки конфигурации не будет. А Fail2ban работать не будет в статусе будет ошибка.
Я считаю активация jail в отдельных файлах более наглядна и легче редактируемая, можно все записать в отдельный файл или дать каждому jail свой именной файл для простоты его включения или выключения, или редактирования, чем листать длинную портянку с записями.
По умолчанию jail для апач разделены на несколько частей, находятся под общим закомментированым названием HTTP servers, сделаем файл в каталоге sudo nano /etc/fail2ban/jail.d/apache.conf и включим некоторые из jail для сервера апач.
# выявляем неудачные попытки ввода пароля
[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] потому что оно меня блокирует, когда редактирую страницы в вордпресс. Причины выясняю. Можно не комментировать, а добавить строчку в этом jail ignoreip = мой_айпи. Но это не вариант, потому что у меня динамический айпи, каждый раз сюда бегать и править не вариант.
В плагине WP-Security- Файрвол убрал галку Полностью блокировать доступ к XMLRPC и все заработало, точнее меня файл2бан перестал банить.
Это не все jail , будет время напишу про остальные.
Запуск и включить автозагрузку Fail2ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Проверка конфигурации и перезапуск 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
Статистику по активному jail можно узнать командой
sudo fail2ban-client status sshd
На выходе увидим путь к файлу логов который обрабатывается, количество неудачных попыток, количество забаненых на данный момент и забаненые ip-адреса.
Разбанить / забанить вручную
Снять блокировку с айпи-адреса можно командой
sudo fail2ban-client set sshd unbanip IPADDRESS
Забанить ip
sudo fail2ban-client set sshd banip IPADDRESS
Комментарии