Fail2ban (Русский) - ArchWiki

Jump to content

# Fail2ban (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи 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 (англ.)

Categories:

- Firewalls (Русский)
- Secure Shell (Русский)