Fail2ban (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Fail2ban
. Дата последней синхронизации: 20 декабря 2020. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Fail2ban
(англ.) сканирует лог-файлы (например,
/var/log/httpd/error_log
) и блокирует IP-адреса, которые ведут себя подозрительно, к примеру, делая слишком много попыток входа с неверным паролем в попытках найти уязвимости и т.п. Обычно Fail2ban используется для обновления правил  с целью блокировки IP-адресов на определённое время, но можно настроить и другие действия — например, отправку письма по электронной почте.
Важно
Использование блокировки по IP защитит только от простейших атак, но для работы потребуется дополнительный демон и правильно настроенное журналирование. К тому же злоумышленники, знающие ваш IP-адрес, могут послать пакеты с подменёнными заголовками отправителя и лишить вас доступа к серверу. Не забудьте прописать собственные 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
Важно
Зная ваш IP-адрес, злоумышленник может послать пакеты с подменёнными заголовками отправителя, тем самым лишив вас доступа к серверу.
Ключи 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
(англ.)