2.4.22 Fail2Ban — сервис блокировки хостов
Установка и запуск
Основные настройки и примеры использования
Параметры конфигурационного файла
Настройка защиты SSH
Блокировка нежелательного трафика
Настройка блокировки для Asterisk
Работа со списком заблокированных адресов
Пример работы fail2ban
Окружение
- Версия ОС: 7.3
- Конфигурация ОС: Рабочая станция
- Редакция ОС: Стандартная
- Версия ПО: fail2ban-1.1.0-4
Fail2Ban — это сервис для блокировки хостов, вызывающих множественные ошибки при попытках аутентификации.
Fail2Ban работает путем мониторинга файлов журналов (например, /var/log/auth.log, /var/log/apache/access.log и др.) для выбранных записей и запуска сценариев на их основе. Чаще всего это используется для блокировки выбранных IP-адресов, которые могут принадлежать хостам, пытающимся нарушить безопасность системы. Он может запретить любой IP-адрес хоста, который делает слишком много попыток входа в систему или выполняет любые другие нежелательные действия в течение периода времени, определенного администратором. Включает поддержку как IPv4, так и IPv6. Опционально более длительные запреты могут быть настроены специально для нарушителей, которые продолжают возвращаться.
Fail2Ban обычно настраивается на разблокировку заблокированного хоста в течение определенного периода времени, чтобы не "блокировать" любые подлинные соединения, которые могли быть временно неправильно сконфигурированы. Время блокировки нежелательных хостов в несколько минут, обычно является достаточным, чтобы снизить вероятность сетевой атаки или атаки подбора пароля по словарю, например, при подключении по ssh.
Стандартная конфигурация Fail2Ban поставляется с фильтрами для Apache, Lighttpd, sshd, vsftpd, qmail. Фильтры определяются регулярными выражениями Python, которые могут быть удобно настроены администратором, знакомым с регулярными выражениями. С помощью фильтров можно блокировать попытки доступа от вредоносного хоста к определенным сетевым службам.
Fail2Ban можно настроить для мониторинга любой службы, которая записывает попытки аутентификации в файл журнала. Для блокировки IP-адресов нежелательных хостов Fail2Ban использует правила iptables.
Установка и запуск Fail2Ban
Установка производится командой:
dnf install fail2ban systemctl enable --now fail2ban
Основные настройки и примеры использования приложения Fail2Ban
Все конфигурационные файлы программы находятся в каталоге /etc/fail2ban. Для установки собственных настроек необходимо создать файл с таким же именем и расширением .local.
Основные параметры конфигурационного файла jail.conf
Конфигурационный файл jail.conf используется для создания ограничивающих правил для различных программ и имеет следующие основные параметры:
- action — действие, которое будет выполняться, если Fail2ban обнаружит активность, соответствующую критериям поиска;
- ignoreip — задает список IP-адресов, которые нужно исключить из алгоритмов Fail2ban. К ним не будут применяться ограничения, так что выбирайте их аккуратно. Диапазоны и IP-адреса стоит разделить пробелом. Сюда можно добавить локальный IP, а также IP-адрес, с которого вы будете подключаться сами, чтобы у вас не возникло проблем при входе;
- bantime — время в секундах, на которое клиенту будет закрыт доступ к серверу, если он не сможет авторизоваться;
- maxretry — указывает количество попыток перед тем, как доступ будет заблокирован;
- findtime — время в секундах, на протяжении которого рассчитывается maxretry.
Настройка защиты SSH
Сначала копируем содержимое jail.conf в jail.local:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
По умолчанию jail.local работает только для SSH. Примерная настройка файла jail.local для SSH:
[sshd] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] logpath = /var/log/auth.log findtime = 600 maxretry = 3 bantime = 21600
Блокировка нежелательного трафика к определенному URL для NGINX
Откроем файл конфигурации:
nano /etc/fail2ban/jail.local
И добавим в конец:
[nginx-req-limit] enabled = true filter = nginx-req-limit action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp] logpath = /var/log/nginx/*error.log findtime = 600 bantime = 7200 maxretry = 10
Настройка блокировки для Asterisk
Добавляем в конец файла jail.local:
[asterisk] enabled = true action = iptables-allports[name=asterisk, protocol=all] logpath = /var/log/asterisk/messages bantime = 86400
Работа со списком заблокированных адресов
- Получить статистику заблокированных адресов можно следующей командой:
fail2ban-client status <имя_правила>
fail2ban-client set <имя правила> unbanip
fail2ban-client status
firewall-cmd --reload
systemctl restart fail2ban
Пример работы fail2ban
Далее приведен пример блокировки подключения к SSH-серверу после нескольких неудачных попыток авторизации. Для примера было взято правило для SSH. В примере пользователь попытался 3 раза ввести пароль для доступа к SSH-серверу, и после неудачных попыток последующие соединения с IP-адреса клиента были заблокированы.
Попытка пользователя авторизоваться на SSH-сервере:
ssh user@192.168.114.145 user@192.168.114.145's password: <введен_неверный_пароль> Permission denied, please try again. user@192.168.114.145's password: <введен_неверный_пароль> Permission denied, please try again. user@192.168.114.145's password: <введен_неверный_пароль> user@192.168.114.145: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
После неудачных попыток ввода пароля, дальнейшие соединения к SSH-серверу были отказаны.
ssh user@192.168.114.145
ssh: connect to host 192.168.114.145 port 22: Connection refused
При этом при проверке статуса блокировок на SSH-сервере будет выведена информация о заблокированном клиенте:
fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 3 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd + _COMM=sshd-session `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 192.168.114.63
Дата последнего изменения: 24.02.2026
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.