Что такое fail2ban и зачем он нужен
Каждый публичный сервер ежедневно подвергается тысячам автоматических атак: брутфорс SSH, сканирование уязвимостей, попытки SQL-инъекций. Большинство этих атак ведётся ботами, которые последовательно перебирают пароли или ищут дыры в веб-приложениях. Fail2ban — это утилита с открытым исходным кодом, которая автоматически блокирует IP-адреса, ведущие подозрительную активность, анализируя системные логи в реальном времени.
Fail2ban работает на уровне операционной системы: он читает лог-файлы, ищет в них паттерны неудачных попыток входа или других нарушений, и при превышении порога — добавляет IP-адрес нарушителя в правила файрвола (iptables, firewalld и др.). Через заданное время блокировка снимается автоматически.
Как работает fail2ban: jails, filters, actions
Архитектура fail2ban построена на трёх ключевых концепциях:
- Jail (тюрьма) — конфигурационная единица, которая объединяет фильтр и действие для конкретного сервиса. Например, jail
sshdотслеживает неудачные попытки входа по SSH. - Filter (фильтр) — регулярное выражение, по которому fail2ban ищет нарушения в лог-файлах. Фильтры хранятся в
/etc/fail2ban/filter.d/. - Action (действие) — команда, выполняемая при блокировке IP. Чаще всего это добавление правила в iptables. Действия хранятся в
/etc/fail2ban/action.d/.
Параметры bantime, findtime и maxretry определяют, как долго хранить блокировку, за какой период считать нарушения и сколько попыток допустимо до бана.
Установка fail2ban на CentOS/RHEL
Установите EPEL-репозиторий (для доступа к fail2ban):
|
1 |
dnf install epel-release -y |
Установите fail2ban (включает fail2ban-client и сервер):
|
1 |
dnf install fail2ban -y |
Включите и запустите сервис:
|
1 |
systemctl enable fail2ban --now |
Проверьте статус:
|
1 |
systemctl status fail2ban |
Проверьте установку:
|
1 |
fail2ban-client --version |
Настройка защиты Битрикс от SQL-инъекций
1С-Битрикс имеет встроенный модуль безопасности, который логирует попытки SQL-инъекций в файл /home/bitrix/www/bitrix/modules/security/logs/security.log. Настроим fail2ban для автоматической блокировки атакующих.
Создайте файл конфигурации jail:
|
1 |
touch /etc/fail2ban/jail.d/bitrix.local |
Добавьте в него следующий конфиг:
|
1 2 3 4 5 6 7 8 |
[bitrix-sqli] enabled = true filter = bitrix-sqli action = iptables[name=bitrix-sqli, port=http, protocol=tcp] logpath = /home/bitrix/www/bitrix/modules/security/logs/security.log bantime = 86400 findtime = 600 maxretry = 1 |
Параметр maxretry = 1 означает немедленную блокировку после первой же попытки SQL-инъекции. bantime = 86400 — блокировка на 24 часа. Создайте файл фильтра:
|
1 |
touch /etc/fail2ban/filter.d/bitrix-sqli.conf |
Содержимое фильтра — регулярное выражение для поиска в логах Битрикс:
|
1 2 3 |
[Definition] failregex = Попытка внедрения SQL.*<HOST> ignoreregex = |
Проверьте синтаксис конфигурации перед применением:
|
1 |
fail2ban-client -d |
Если ошибок нет — перезапускайте:
|
1 2 |
systemctl restart fail2ban systemctl status fail2ban |
Настройка защиты SSH
Обязательно добавьте ваш IP в whitelist, чтобы не заблокировать себя. В файле /etc/fail2ban/jail.d/jail.local или через копирование основного конфига:
|
1 2 |
[DEFAULT] ignoreip = 127.0.0.1/8 YOUR_IP_HERE # Замените на ваш IP |
Для SSH создайте файл /etc/fail2ban/jail.d/sshd.local:
|
1 2 3 |
[sshd] enabled = true banaction = firewallcmd-ipset # Если firewalld |
Если при запуске появляется ошибка «Sorry but the jail ‘sshd’ does not exist» — скопируйте основной конфиг и отредактируйте его:
|
1 |
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local |
Найдите секцию [sshd] и включите jail, добавив свой IP в whitelist:
|
1 2 3 4 5 6 |
[DEFAULT] ignoreip = 127.0.0.1/8 ::1 YOUR_SSH_IP_HERE # Замените на ваш IP (узнайте: curl ifconfig.me) [sshd] enabled = true |
Перезагрузите fail2ban для применения изменений:
|
1 |
fail2ban-client reload |
Проверьте статус jail:
|
1 |
fail2ban-client status sshd |
Полезные команды управления
Проверить статус конкретного jail и список заблокированных IP:
|
1 |
fail2ban-client status sshd |
Заблокировать IP вручную:
|
1 2 |
fail2ban-client set sshd banip 89.169.15.216 fail2ban-client set sshd banip 206.119.65.189 |
Разблокировать IP вручную:
|
1 |
fail2ban-client set sshd unbanip 89.169.15.216 |
Дополнительная блокировка через iptables (временная и постоянная):
|
1 2 3 4 5 |
# временно (до перезагрузки) iptables -A INPUT -s 206.119.65.189 -j DROP # или навсегда iptables -I INPUT -s 206.119.65.189 -j DROP service iptables save |
Просмотр правил iptables с номерами строк:
|
1 2 |
# показать правило (первые строки таблицы INPUT) iptables -L INPUT -n -v --line-numbers |
Настройка email-уведомлений
Fail2ban умеет отправлять письма при блокировке IP. В секции [DEFAULT] файла jail.local добавьте:
|
1 2 3 4 5 |
[DEFAULT] destemail = admin@yourdomain.ru sendername = Fail2Ban mta = sendmail action = %(action_mwl)s |
Параметр action_mwl означает «mail with log» — при бане будет отправлено письмо с фрагментом лога, вызвавшим блокировку. Убедитесь, что на сервере установлен и настроен sendmail или postfix.
Просмотр логов fail2ban
Основной лог fail2ban находится в /var/log/fail2ban.log. Для мониторинга в реальном времени используйте:
|
1 |
tail -f /var/log/fail2ban.log |
В логе вы увидите записи вида Ban 1.2.3.4 и Unban 1.2.3.4 — это подтверждает, что fail2ban работает корректно.
Заключение
Fail2ban — незаменимый инструмент для защиты Linux-серверов. Связка «fail2ban + Битрикс Security» эффективно отсекает попытки SQL-инъекций и брутфорса без ручного вмешательства. Главное правило: всегда добавляйте свой IP в whitelist до включения jail’ов, чтобы не заблокировать собственный доступ к серверу. После настройки регулярно проверяйте лог и статус jail’ов, чтобы убедиться в корректной работе защиты.
