# Fail2ban (Русский)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Состояние перевода: На этой странице представлен перевод статьи 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 (Русский)