Fail2ban (Русский)
Fail2ban сканирует лог-файлы (например, /var/log/httpd/error_log
) и блокирует IP-адреса, которые ведут себя подозрительно, к примеру, делая слишком много попыток входа с неверным паролем в попытках найти уязвимости и т.п. Обычно Fail2ban используется для обновления правил с целью блокировки IP-адресов на определённое время, но можно настроить и другие действия — например, отправку письма по электронной почте.
Contents
Установка
Установите пакет fail2ban.
Использование
Настройте Fail2ban, после чего включите и запустите службу fail2ban.service
.
fail2ban-client
Утилита fail2ban-client позволяет мониторить "клетки" (jails) (reload, restart, status и т.д.). Чтобы увидеть список всех доступных команд, введите:
$ fail2ban-client
Просмотр включённых "клеток" (jails):
# fail2ban-client status
Проверка статуса "клетки" на примере таковой для sshd:
# fail2ban-client status sshd
Status for the jail: sshd |- Filter | |- Currently failed: 1 | |- Total failed: 9 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 0.0.0.0
Настройка
Рекомендуется создать файл /etc/fail2ban/jail.local
, так как /etc/fail2ban/jail.conf
может быть перезаписан во время обновления системы. К примеру, задать время блокировки в 1 день можно следующим образом:
/etc/fail2ban/jail.local
[DEFAULT] bantime = 1d
Также можно создавать отдельные файлы name.local в каталоге /etc/fail2ban/jail.d
, например, /etc/fail2ban/jail.d/sshd.local
.
Перезапустите службу fail2ban.service
для применения изменений.
Включение "клеток"
По умолчанию все "клетки" отключены. Добавьте строку enabled = true
к конфигурации той "клетки", которую необходимо включить. Например, включение "клетки" OpenSSH (Русский) выглядит следующим образом:
/etc/fail2ban/jail.local
[sshd] enabled = true
См. #Пользовательская "клетка" SSH.
Почтовые уведомления
Для получения электронных писем при блокировке IP-адресов следует настроить SMTP-клиент (например, msmtp) и изменить действие по умолчанию:
/etc/fail2ban/jail.local
[DEFAULT] destemail = вашеимя@example.com sender = вашеимя@example.com # для блокировки и отправки электронного письма на destemail с whois-отчётом action = %(action_mw)s # то же, что и action_mw, но включает в себя ещё и связанные строки из лога #action = %(action_mwl)s
Межсетевой экран и службы
Большинство и служб должны работать по умолчанию. См. содержимое директории /etc/fail2ban/action.d/
для получения примеров, например, ufw.conf.
Советы и рекомендации
Пользовательская "клетка" SSH
Отредактируйте файл /etc/fail2ban/jail.d/sshd.local
, добавив эту секцию и обновив список доверенных IP-адресов в ignoreip
:
/etc/fail2ban/jail.d/sshd.local
[sshd] enabled = true filter = sshd banaction = iptables backend = systemd maxretry = 5 findtime = 1d bantime = 2w ignoreip = 127.0.0.1/8
Защита службы
Поскольку Fail2ban следует запускать от имени суперпользователя, дополнительно защитить службу можно с помощью systemd (Русский).
Создайте конфигурационный drop-in файл для службы fail2ban.service
:
/etc/systemd/system/fail2ban.service.d/override.conf
[Service] PrivateDevices=yes PrivateTmp=yes ProtectHome=read-only ProtectSystem=strict NoNewPrivileges=yes ReadWritePaths=-/var/run/fail2ban ReadWritePaths=-/var/lib/fail2ban ReadWritePaths=-/var/log/fail2ban ReadWritePaths=-/var/spool/postfix/maildrop CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW
Параметр CAP_DAC_READ_SEARCH
(в строке CapabilityBoundingSet
) позволяет Fail2ban читать любые файлы и каталоги, а CAP_NET_ADMIN
и CAP_NET_RAW
позволяют задавать правила межсетевого экрана посредством iptables (Русский) или nftables. Подробнее см. capabilities(7).
При использовании параметра ProtectSystem=strict
иерархия файловой системы будет доступна только для чтения, а ReadWritePaths
позволит Fail2ban также запись в заданные каталоги.
От имени суперпользователя создайте каталог /var/log/fail2ban
и пропишите в файл /etc/fail2ban/fail2ban.local
корректный путь logtarget
:
/etc/fail2ban/fail2ban.local
[Definition] logtarget = /var/log/fail2ban/fail2ban.log
Для применения изменений в файлах юнитов перезагрузите настройки systemd [code]# systemctl daemon-reload[/code] и перезапустите службу fail2ban.service
.