Поиск по сайту:

Как использовать Fail2ban для защиты вашего Linux-сервера


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

С помощью программного обеспечения для предотвращения вторжений, такого как fail2ban, вы можете просмотреть журналы своего сервера и добавить дополнительные правила iptables для блокировки проблемных IP-адресов.

Читайте также: как установить Fail2Ban для защиты SSH в CentOS/RHEL 8

В этом руководстве показано, как установить fail2ban и настроить базовую конфигурацию для защиты вашей системы Linux от атак методом перебора.

Требования

Fail2ban написан на Python, и единственным требованием является наличие установленного Python:

  • Для ветки Fail2ban 0.9.x требуется Python >=2.6 или Python >=3.2
  • Ветка Fail2ban 0.8.x требует Python >= 2.4
  • Root-доступ к вашей системе
  • При желании iptables или showwall и sendmail

Как установить Fail2Ban в системах Linux

Установить fail2ban относительно легко:

Установите Fail2Ban на CentOS/RHEL

Сначала обновите пакеты, включите репозиторий Epel и установите fail2ban, как показано.

yum update
yum install epel-release
yum install fail2ban

Установите Fail2Ban на Debian/Ubuntu.

Сначала обновите свои пакеты и установите fail2ban, как показано.

apt-get update && apt-get upgrade -y
apt-get install fail2ban

При желании, если вы хотите включить поддержку почты (для почтовых уведомлений), вы можете установить sendmail.

yum install sendmail                   [On CentOS/RHEL]
apt-get install sendmail-bin sendmail  [On Debian/Ubuntu]

Чтобы включить fail2ban и sendmail, используйте следующие команды:

systemctl start fail2ban
systemctl enable fail2ban
systemctl start sendmail
systemctl enable sendmail

Как настроить Fail2ban в системах Linux

По умолчанию fail2ban использует файлы .conf, расположенные в /etc/fail2ban/, которые считываются в первую очередь. Однако они могут быть переопределены файлами .local, расположенными в том же каталоге.

Таким образом, файл .local не обязательно должен включать все настройки из файла .conf, а только те, которые вы хотите переопределить. Изменения следует вносить в файлы .local, а не в .conf. Это предотвратит перезапись изменений при обновлении пакета Fail2ban.

Для целей этого руководства мы скопируем существующий файл fail2ban.conf в fail2ban.local.

cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local

Теперь вы можете внести изменения в файл .local с помощью вашего любимого текстового редактора. Значения, которые вы можете редактировать:

  • loglevel – уровень детализации, который необходимо регистрировать. Возможные варианты:

    • КРИТИЧЕСКИЙ
    • ОШИБКА
    • ПРЕДУПРЕЖДЕНИЕ
    • УВЕДОМЛЕНИЕ
    • ИНФОРМАЦИЯ
    • ОТЛАЖИВАТЬ
  • logtarget – регистрировать действия в определенном файле. Значение по умолчанию — /var/log/fail2ban.log. Однако вы можете изменить это на:

    • STDOUT – вывод любых данных
    • STDERR – выводить любые ошибки
    • SYSLOG – ведение журнала на основе сообщений
    • Файл – вывод в файл
  • socket – каталог, в котором будет размещен файл сокета.
  • pidfile – расположение pid-файла.

Настройте Fail2banjail.local

Одним из наиболее важных файлов в Fail2ban является jail.conf, который определяет ваши тюрьмы. Здесь вы определяете службы, для которых следует включить Fail2ban.

Как мы упоминали ранее, файлы .conf могут быть изменены во время обновлений, поэтому вам следует создать файл jail.local, в котором вы сможете применить свои изменения.

Другой способ сделать это — просто скопировать файл .conf с помощью:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Если вы используете CentOS или Fedora, вам необходимо изменить бэкэнд в jail.local с jail.local.«auto» на «systemd».

Если вы используете Ubuntu/Debian, вносить эти изменения нет необходимости, хотя они тоже используют systemd.

Файл тюрьмы по умолчанию включает SSH для Debian и Ubuntu, но не для CentOS. Если вы хотите включить его, просто измените следующую строку в /etc/fail2ban/jail.local:

[sshd]
enabled = true
Время запрета и повтора

Вы можете настроить обстоятельства, при которых IP-адрес блокируется. Для этой цели fail2ban использует bantime, findtime и maxretry.

  • bantime – это количество секунд, в течение которых IP-адрес будет оставаться заблокированным (по умолчанию 10 минут).
  • findtime – время между попытками входа в систему, прежде чем хост будет забанен. (по умолчанию 10 мин). Другими словами, если параметр Fail2ban настроен на блокировку IP-адреса после 3 неудачных попыток входа в систему, эти 3 попытки должны быть выполнены в течение периода времени поиска (10< минут).
  • maxretry – количество попыток, которое должно быть совершено до применения бана. (по умолчанию 3).
Белый список IP-адресов

Конечно, вы захотите внести в белый список определенные IP-адреса. Чтобы настроить такие IP-адреса, откройте /etc/fail2ban/jail.local в своем любимом текстовом редакторе и раскомментируйте следующую строку:

ignoreip = 127.0.0.1/8  ::1

Затем вы можете указать IP-адреса, которые хотите игнорировать. IP-адреса должны быть разделены пробелом или запятой.

Оповещения по электронной почте

Если вы хотите получать оповещения по электронной почте о событии, вам необходимо настроить следующие параметры в /etc/fail2ban/jail.local:

  • destemail – адрес почты, на который вы получите уведомление.
  • Имя отправителя – отправитель, которого вы увидите при получении сообщения.
  • отправитель – адрес электронной почты, с которого Fail2ban будет отправлять электронные письма.

По умолчанию для mta (агента передачи почты) установлено значение sendmail.

Чтобы получать почтовые уведомления, вам также необходимо изменить настройку «действие» на:

Action = %(action_)s

К одному из них:

action = %(action_mw)s
action = %(action_mwl)s
  • %(action_mw)s – заблокирует хост и отправит письмо с отчетом whois.
  • %(action_mwl)s – заблокирует хост, предоставит информацию whois и всю соответствующую информацию из файла журнала.

Дополнительная конфигурация джейла Fail2ban

До сих пор мы рассмотрели основные параметры конфигурации. Если вы хотите настроить тюрьму, вам нужно будет включить ее в файле jail.local. Синтаксис довольно прост:

[jail_to_enable]
. . .
enabled = true

Где вы должны заменить jail_to_enable на фактическую тюрьму, например, “sshd”. В файле jail.local для службы ssh будут предопределены следующие значения:

[sshd]

port = ssh
logpath = %(sshd_log)s

Вы можете включить фильтр, который поможет определить, является ли строка в журнале ошибочной. Значение фильтра на самом деле является ссылкой на файл, в котором за именем службы следует .conf. Например: /etc/fail2ban/filter.d/sshd.conf.

Синтаксис:

filter = service

Например:

filter = sshd

Вы можете просмотреть существующие фильтры в следующем каталоге: /etc/fail2ban/filter.d/.

Используйте клиент Fail2ban

Fail2ban поставляется с клиентом, который можно использовать для просмотра и изменения текущей конфигурации. Поскольку он предоставляет множество опций, вы можете просмотреть его руководство с помощью:

man fail2ban-client 

Здесь вы увидите некоторые основные команды, которые вы можете использовать. Чтобы просмотреть текущий статус fail2ban или конкретной тюрьмы, вы можете использовать:

fail2ban-client status

Результат будет выглядеть примерно так:

Для индивидуальной тюрьмы вы можете запустить:

fail2ban-client status sshd

На скриншоте ниже вы увидите, что я намеренно не смог выполнить несколько входов в систему, чтобы Fail2ban мог заблокировать IP-адрес, с которого я пытался подключиться:

Заключение

Fail2ban — отличная, хорошо документированная система предотвращения вторжений, обеспечивающая дополнительную безопасность вашей системы Linux. Требуется некоторое время, чтобы привыкнуть к его настройке и синтаксису, но как только вы ознакомитесь с ним, вы сможете свободно изменять и расширять его правила.