Fail2ban (Русский)

Fail2ban (англ.) сканирует лог-файлы (например, /var/log/httpd/error_log) и блокирует IP-адреса, которые ведут себя подозрительно, к примеру, делая слишком много попыток входа с неверным паролем в попытках найти уязвимости и т.п. Обычно Fail2ban используется для обновления правил с целью блокировки IP-адресов на определённое время, но можно настроить и другие действия — например, отправку письма по электронной почте.

Важно: Использование блокировки по IP защитит только от простейших атак, но для работы потребуется дополнительный демон и правильно настроенное журналирование. К тому же злоумышленники, знающие ваш IP-адрес, могут послать пакеты с подменёнными заголовками отправителя и лишить вас доступа к серверу. Не забудьте прописать собственные IP-адреса в ignoreip.
Состояние перевода: На этой странице представлен перевод статьи Fail2ban. Дата последней синхронизации: 20 декабря 2020. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Установка

Установите пакет 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 для применения изменений.

Включение "клеток"

По умолчанию все "клетки" отключены. Добавьте строку к конфигурации той "клетки", которую необходимо включить. Например, включение "клетки" OpenSSH выглядит следующим образом:

См. #Пользовательская "клетка" SSH.

Почтовые уведомления

Для получения электронных писем при блокировке IP-адресов следует настроить SMTP-клиент (например, msmtp (англ.)) и изменить действие по умолчанию:

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

По умолчанию Fail2ban использует iptables. Однако, настройка большинства и служб не представляет трудности. Пример использования nftables:

См. содержимое директории /etc/fail2ban/action.d/ для получения других примеров, например, ufw.conf.

Советы и рекомендации

Пользовательская "клетка" SSH

Важно: Зная ваш IP-адрес, злоумышленник может послать пакеты с подменёнными заголовками отправителя, тем самым лишив вас доступа к серверу. Ключи SSH предоставляют отличное решение проблемы брутфорса без подобных последствий.

Отредактируйте файл /etc/fail2ban/jail.d/sshd.local, добавив эту секцию и обновив список доверенных IP-адресов в :

Защита службы

Поскольку Fail2ban следует запускать от имени суперпользователя, можно дополнительно защитить службу с помощью systemd.

Создайте конфигурационный drop-in файл для службы fail2ban.service:

Параметр (в строке ) позволяет Fail2ban читать любые файлы и каталоги, а и CAP_NET_RAW позволяют Fail2ban управлять любым межсетевым экраном c командной оболочкой. См. для получения более подробной информации.

При использовании параметра иерархия файловой системы будет доступна только для чтения, а позволит Fail2ban также вести запись в заданные каталоги.

От имени суперпользователя создайте каталог /var/log/fail2ban/ и пропишите в файл корректный путь :

Для применения изменений в файлах юнитов перезагрузите демон systemd и перезапустите службу fail2ban.service.

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

gollark: A database is probably unnecessary.
gollark: No, they're basically identical static-ishly typed OOP languages for a virtual machine.
gollark: Please, C# is *basically* Java for .NET.
gollark: It might, quite possibly, be less verbose than the... I assume that's Java.
gollark: I would just load it from a config file or something.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.