Fail2ban (Русский)
Fail2ban (англ.) сканирует лог-файлы (например, /var/log/httpd/error_log
) и блокирует IP-адреса, которые ведут себя подозрительно, к примеру, делая слишком много попыток входа с неверным паролем в попытках найти уязвимости и т.п. Обычно Fail2ban используется для обновления правил с целью блокировки IP-адресов на определённое время, но можно настроить и другие действия — например, отправку письма по электронной почте.
ignoreip
.Установка
Установите пакет 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
Межсетевой экран и службы
По умолчанию Fail2ban использует iptables. Однако, настройка большинства и служб не представляет трудности. Пример использования nftables:
/etc/fail2ban/jail.local
[DEFAULT] banaction = nftables banaction_allports = nftables[type=allports]
См. содержимое директории /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
- Может понадобиться задать
LogLevel VERBOSE
в файле/etc/ssh/sshd_config
, чтобы разрешить Fail2ban полноценный мониторинг. В противном случае, ошибки ввода пароля могут быть неправильно зарегистрированы. - Fail2ban поддерживает IPv6 с версии 0.10. Настройте межсетевой экран соответственно, например, запустите и включите службу
ip6tables.service
. - Fail2ban поддерживает работу с пространствами имён журнала (которые задаются с помощью
LogNamespace=ваше_пространство_имён
в файлах юнитов). Задайте параметруbackend
, к примеру, значениеbackend = systemd[journalfiles="/var/log/journal/*.ваше_пространство_имён/system.journal"]
, чтобы активировать эту возможность.
- При использовании фронтендов iptables, например, ufw (англ.), можно использовать
banaction = ufw
вместо iptables. - При использовании Shorewall (англ.) можно прописать
banaction = shorewall
и также задать значениеALL
параметруBLACKLIST
в файле/etc/shorewall/shorewall.conf
. В противном случае, правила, добавленные для блокировки IP-адреса, будут влиять только на новые соединения.
Защита службы
Поскольку Fail2ban следует запускать от имени суперпользователя, можно дополнительно защитить службу с помощью systemd.
Создайте конфигурационный drop-in файл для службы fail2ban.service
:
/etc/systemd/system/fail2ban.service.d/override.conf
[Service] PrivateDevices=yes PrivateTmp=yes ProtectHome=read-only ProtectSystem=strict ReadWritePaths=-/var/run/fail2ban ReadWritePaths=-/var/lib/fail2ban ReadWritePaths=-/var/log/fail2ban ReadWritePaths=-/var/spool/postfix/maildrop ReadWritePaths=-/run/xtables.lock 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
позволяют Fail2ban управлять любым межсетевым экраном c командной оболочкой. См. 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 и перезапустите службу fail2ban.service
.
Смотрите также
- Using a Fail2Ban Jail to Whitelist a User (англ.)
- Optimising your Fail2Ban filters (англ.)
- Fail2Ban and sendmail (англ.)
- Fail2Ban and iptables (англ.)
- Fail2Ban 0.8.3 Howto (англ.)
- Monitoring the fail2ban log (англ.)