Fail2ban (Русский)

From ArchWiki
Jump to navigation Jump to search
Состояние перевода: На этой странице представлен перевод статьи Fail2ban. Дата последней синхронизации: 6 июня 2019. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

Межсетевой экран и службы

Большинство и служб должны работать по умолчанию. См. содержимое директории /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.
Совет:
  • При использовании фронтендов 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
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 и перезапустите службу fail2ban.service.

Смотрите также