TimVin

Установка Fail2ban

CentOS 7

  1. Убедитесь, что ваша система обновлена и установите EPEL репозиторий:
    yum update && yum install epel-release
    
  2. Установите Fail2Ban:

    yum install fail2ban
    
  3. Установите Sendmail, если вам дополнительно нужна поддержка по электронной почте. Sendmail не требуется использовать Fail2Ban .:

    yum install sendmail
    
  4. Запустите и включите Fail2ban и, если необходимо, Sendmail:

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

    Заметка
    Если вы столкнулись с ошибкой, что « отсутствует каталог / var / run / fail2ban для файла сокета /var/run/fail2ban/fail2ban.sock », создайте каталог вручную:

    mkdir /var/run/fail2ban

Debian

  1. Убедитесь, что ваша система обновлена:
    apt-get update && apt-get upgrade -y
    
  2. Установите Fail2ban:
    apt-get install fail2ban
    

    Сервис запустится автоматически.

  3. (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:

    apt-get install sendmail-bin sendmail
    

    Заметка
    Текущая версия Sendmail в Debian Jessie имеет вышестоящую ошибку, которая вызывает следующие ошибки при установке sendmail-bin. Установка будет зависать на минуту, но затем завершится.

    Creating /etc/mail/sendmail.cf...
    ERROR: FEATURE() should be before MAILER() MAILER('local') must appear after FEATURE('always_add_domain')
    ERROR: FEATURE() should be before MAILER() MAILER('local') must appear after FEATURE('allmasquerade')
    

Fedora

  1. Обновите вашу систему:
    dnf update
    
  2. Установите Fail2ban:
    dnf install fail2ban
    
  3. (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:
    dnf install sendmail
    
  4. Запустите и включите Fail2ban и, если необходимо, Sendmail:
    systemctl start fail2ban
    systemctl enable fail2ban
    systemctl start sendmail
    systemctl enable sendmail
    

Ubuntu

  1. Убедитесь, что ваша система обновлена:

    apt-get update && apt-get upgrade -y
    
  2. Установите Fail2ban:

    apt-get install fail2ban
    

    Сервис автоматически запустится.

  3. (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:

    apt-get install sendmail
    
  4. Разрешите SSH доступ через UFW и затем включите брандмауэр:

    ufw allow ssh
    ufw enable
    

Настроить Fail2ban

Fail2ban сначала читает .confфайлы конфигурации, затем .localфайлы переопределяют любые настройки. Из-за этого все изменения в конфигурации обычно делаются в .localфайлах, оставляя .confфайлы нетронутыми.

Настроить fail2ban.local

  1. fail2ban.confсодержит профиль конфигурации по умолчанию. Настройки по умолчанию предоставят вам разумную рабочую настройку. Если вы хотите внести какие-либо изменения, лучше всего сделать это в отдельном файле fail2ban.local, который переопределяет fail2ban.conf. Переименовать копию fail2ban.confв fail2ban.local.

    cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
    
  2. Отсюда вы можете отредактировать определения в fail2ban.localсоответствии с желаемой конфигурацией. Значения, которые можно изменить:
    • loglevel: Уровень детализации, который предоставляют журналы Fail2ban, может быть установлен в 1 (ошибка), 2 (предупреждение), 3 (информация) или 4 (отладка).
    • logtarget: Записывает действия в определенный файл. Значение по умолчанию — /var/log/fail2ban.logвсе записи в определенный файл. Кроме того, вы можете изменить значение на:
      • STDOUT: вывод любых данных
      • STDERR: вывести любые ошибки
      • SYSLOG: ведение журнала сообщений
      • FILE: вывод в файл
    • socket: Расположение файла сокета.
    • pidfile: Расположение файла PID.

Настройка параметров jail.local

  1. jail.confФайл позволит Fail2ban для SSH по умолчанию для Debian и Ubuntu, но не CentOS. Все остальные протоколы и конфигурации (HTTP, FTP и т. Д.) Закомментированы. Если вы хотите изменить это, создайте jail.localдля редактирования:

    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    
  2. Если вы используете CentOS или Fedora, вам нужно изменить backendпараметр jail.localс auto на systemd . Это не обязательно в Debian 8 или Ubuntu 16.04, хотя оба используют также systemd.
    /etc/fail2ban/jail.local

    # "backend" specifies the backend used to get files modification.
    # Available options are "pyinotify", "gamin", "polling", "systemd" and "auto".
    # This option can be overridden in each jail as well.
    . . .
    backend = systemd

    По умолчанию в CentOS 7 не включены тюрьмы. Например, чтобы включить тюрьму демона SSH, раскомментируйте следующие строки в jail.local:

    /etc/fail2ban/jail.local

    [sshd]
    enabled = true

Белый список IP

Чтобы игнорировать конкретные IP-адреса, добавьте их в ignoreipстроку. По умолчанию эта команда не блокирует локальный хост. Если вы часто работаете с одного IP-адреса, может быть полезно добавить его в список игнорируемых:

/etc/fail2ban/jail.local

[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8 123.45.67.89

Если вы хотите вносить белый список IP-адресов только для определенных джейлов, это можно сделать с помощью fail2ban-clientкоманды. Замените JAILна имя вашей тюрьмы и 123.45.67.89IP-адрес, который вы хотите добавить в белый список.

fail2ban-client set JAIL addignoreip 123.45.67.89

Время запрета и количество повторов

Установить bantimefindtimeи maxretryопределить обстоятельства и продолжительность запрета:

/etc/fail2ban/jail.local

# "bantime" is the number of seconds that a host is banned.
bantime  = 600
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600
maxretry = 3
  • bantime: Промежуток времени в секундах, на который IP-адрес запрещен. Если установлено отрицательное число, бан будет постоянным. По умолчанию 600установлено, что IP-адрес запрещен на 10 минут.
  • findtime: Промежуток времени между попытками входа в систему до установки бана. Например, если Fail2ban настроен на запрет IP после пяти (5) неудачных попыток входа в систему, эти 5 попыток должны произойти в пределах установленного 10-минутного findtimeограничения. findtimeЗначение должно быть определенное количество секунд.
  • maxretry: Сколько попыток может быть сделано для доступа к серверу с одного IP-адреса до введения запрета. По умолчанию установлено значение 3.

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

 Примечание об электронной почте в Линоде
Это руководство может включать или привести к отправке электронной почты. Стремясь бороться со спамом, Linode ограничивает исходящие соединения через порты 25, 465 и 587 на всех линодах для новых учетных записей, созданных после 5 ноября 2019 года. Для получения дополнительной информации см. Отправка электронной почты на Linode .

Чтобы получать электронную почту при запуске fail2ban, настройте параметры электронной почты:

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

Заметка
Если вы не уверены в том, что ставить sender, запустите команду sendmail -t user@email.com, заменив ее user@email.comадресом электронной почты. Проверьте свою электронную почту (включая папки со спамом, если необходимо) и просмотрите электронную почту отправителя. Этот адрес может быть использован для вышеуказанной конфигурации.

Вам также нужно будет настроить actionпараметр, который определяет, какие действия происходят при достижении порога для бана. По умолчанию, %(action_)sтолько запрет пользователя. %(action_mw)sзабанит и отправит письмо с отчетом WhoIs; while %(action_mwl)sзабанит и отправит электронное письмо с отчетом WhoIs и всеми соответствующими строками в файле журнала. Это также может быть изменено в зависимости от тюрьмы.

Другие настройки Jail

Помимо адреса основных настроек, приведенного выше, он jail.localтакже содержит различные конфигурации тюрьмы для ряда общих служб, включая SSH и iptables. По умолчанию включен только SSH, и действие состоит в том, чтобы запретить хост / IP-адрес, который нарушает работу, путем изменения правил брандмауэра iptables.
Средняя конфигурация тюрьмы будет выглядеть следующим образом:

/etc/fail2ban/jail.local

# Default banning action (e.g. iptables, iptables-new,
# iptables-multiport, shorewall, etc) It is used to define
# action_* variables. Can be overridden globally or per
# section within jail.local file
banaction = iptables-multiport
banaction_allports = iptables-allports
[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6
  • banaction: Определяет действие, используемое при достижении порога. Если вы настроили брандмауэр на использование firewalld, установите значение, firewallcmd-ipsetа если вы настроили брандмауэр на использование UFW, то установите значение ufw.
  • banaction_allports: Блокирует удаленный IP-адрес в каждом порту. Если вы настроили брандмауэр на использование firewalld, установите значение firewallcmd-ipset.
  • enabled: Определяет, включен ли фильтр.
  • port: Порт Fail2ban должен ссылаться на сервис. Если используется порт по умолчанию, то имя службы можно указать здесь. Если используется нетрадиционный порт, это должен быть номер порта. Например, если вы переместили ваш SSH-порт на 3456, вы бы заменили sshна 3456.
  • filter: Имя файла, в /etc/fail2ban/filter.dкотором содержится информация о failregex, используемая для надлежащего анализа файлов журнала. .confСуффикс не обязательно должен быть включен.
  • logpath: Дает местоположение журналов службы.
  • maxretry: Переопределит глобальный maxretryдля определенной службы. findtimeи bantimeтакже могут быть добавлены.
  • action: Это можно добавить в качестве дополнительного параметра, если действие по умолчанию не подходит для тюрьмы. Дополнительные действия можно найти в action.dпапке.

Заметка
Тюрьмы также можно настроить как отдельные .confфайлы, размещенные в jail.dкаталоге. Формат останется прежним.

Failregexs

Хотя Fail2ban поставляется с несколькими фильтрами, вы можете дополнительно настроить эти фильтры или создать свои собственные в соответствии с вашими потребностями. Fail2ban использует регулярные выражения ( регулярные выражения ) для разбора файлов журналов, ища случаи попыток взлома и сбоя пароля. Fail2ban использует расширения регулярных выражений Python.
Лучший способ понять, как работает failregex — написать один. Хотя мы не рекомендуем, чтобы Fail2ban контролировал ваш WordPress access.logна сайтах с интенсивным движением из-за проблем с процессором, он предоставляет экземпляр легкого для понимания файла журнала, который вы можете использовать, чтобы узнать о создании любого failregex.

Написать регулярное выражение для Fail2ban

  1. Перейдите на свой веб-сайт access.log(обычно расположенный по адресу /var/www/example.com/logs/access.log) и найдите неудачную попытку входа. Это будет напоминать:
    /var/www/example.com/logs/access.log

    123.45.67.89 - - [01/Oct/2015:12:46:34 -0400] "POST /wp-login.php HTTP/1.1" 200 1906 "http://example.com/wp-login.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0"

    Обратите внимание, что вам нужно будет отслеживать только 200:

    /var/www/example.com/logs/access.log

    123.45.67.89 - - [01/Oct/2015:12:46:34 -0400] "POST /wp-login.php HTTP/1.1" 200
  2. IP-адрес, с которого произошла неудачная попытка, всегда будет определяться как . Последующие несколько символов неизменны и могут быть введены как литералы:

     - - [
    

    Знак перед [означает, что квадратная скобка должна читаться буквально.

  3. Следующий раздел, дата попытки входа в систему, может быть записан в виде сгруппированных выражений с использованием выражений регулярных выражений. Первая часть 01в этом примере может быть записана как (d{2}): круглые скобки группируют выражение, а dищет любые числовые цифры. {2}отмечает, что выражение ищет две цифры подряд, т. е. день месяца.Пока что вы должны иметь:

     - - [(d{2})
    

    Следующая прямая косая черта будет вызываться с буквальной косой чертой, за w{3}которой следует поиск серии 3буквенно-цифровых символов (т. Е. AZ, 0-9, в любом случае). Следующая косая черта также должна быть буквальной:

     - - [(d{2})/w{3}/
    

    Раздел для года должен быть написан аналогично дню, но без необходимости группы захвата и для четырех последовательных символов (и буквального двоеточия):

     - - [(d{2})/w{3}/d{4}:
    
  4. Следующая последовательность представляет собой последовательность двузначных чисел, составляющих время. Поскольку мы определили день месяца как двузначное число в группе захвата (круглые скобки), мы можем ссылаться на него, используя 1(так как это первая группа захвата). Опять же, двоеточия будут буквальными

     - - [(d{2})/w{3}/d{4}:1:1:1
    

    Если вы не хотите использовать обратные ссылки, это также можно записать так:

     - - [d{2}/w{3}/d{4}:d{2}:d{2}:d{2}
    
  5. -0400Сегмент должен быть написан так же , как год, с дополнительным литерала --d{4}. Наконец, вы можете закрыть квадратную скобку (сначала экранировать с помощью обратной косой черты), а остальное завершить литеральной строкой:

     - - [(d{2})/w{3}/d{4}:1:1:1 -d{4}] "POST /wp-login.php HTTP/1.1" 200
    

    Или:

     - - [d{2}/w{3}/d{4}:d{2}:d{2}:d{2} -d{4}] "POST /wp-login.php HTTP/1.1" 200
    

Применить Failregex

После создания failregex его необходимо добавить в фильтр.

  1. Перейдите в каталог Fail2ban filter.d:

    cd /etc/fail2ban/filter.d
    
  2. Создайте файл с именем wordpress.confи добавьте ваш failregex:
    /etc/fail2ban/filter.d/wordpress.conf

    # Fail2Ban filter for WordPress
    #
    #
    [Definition]
    failregex =  - - [(d{2})/w{3}/d{4}:1:1:1 -d{4}] "POST /wp-login.php HTTP/1.1" 200
    ignoreregex =

    Сохранить и выйти.

  3. Добавьте раздел WordPress в jail.local:
    /etc/fail2ban/jail.local

    [wordpress]
    enabled  = true
    filter   = wordpress
    logpath  = /var/www/html/andromeda/logs/access.log
    port     = 80,443

    Это будет использовать бан по умолчанию и действие по электронной почте. Другие действия могут быть определены путем добавления action =строки.
    Сохраните и выйдите, затем перезапустите Fail2ban.

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

Fail2ban предоставляет команду, fail2ban-clientкоторую можно использовать для запуска Fail2ban из командной строки:

fail2ban-client COMMAND
  • start: Запускает сервер Fail2ban и тюрьмы.
  • reload: Перезагрузка файлов конфигурации Fail2ban.
  • reload JAIL: Заменяется JAILименем тюрьмы Fail2ban; это перезагрузит тюрьму.
  • stopЗавершает работу сервера.
  • status: Покажет состояние сервера и включит тюрьмы.
  • status JAIL: Покажет статус тюрьмы, включая любые заблокированные на данный момент IP-адреса.

Например, чтобы проверить, что Fail2Ban запущен и SSHd jail включен, выполните:

fail2ban-client status

Выход должен быть:

Status
|- Number of jail:      1
`- Jail list:   sshd

Дополнительную информацию о fail2ban-clientкомандах смотрите в вики Fail2ban .

Восстановление блокировки

В том случае, если вы оказываетесь заперты из вашего Linode из — за Fail2ban, вы можете получить доступ с помощью нашей вне зоны Лиша консоли .
Отсюда вы можете просмотреть правила брандмауэра, чтобы убедиться, что именно fail2ban заблокировал ваш IP, а не что-то еще. Для этого введите следующую команду:

iptables -n -L

Найдите свой IP-адрес в sourceстолбце цепочек fail2ban (всегда с префиксом f2bили fail2ban), чтобы подтвердить, заблокирован ли вами сервис fail2ban:


Chain f2b-sshd (1 references)
target     prot opt source               destination
REJECT     all  --  203.0.113.0        0.0.0.0/0            reject-with icmp-e

Чтобы удалить свой IP-адрес из тюрьмы , вы можете использовать следующую команду, заменив 203.0.113.0и jailnameна IP-адрес и имя тюрьмы, которую вы хотите разблокировать:

 fail2ban-client set jailname unbanip 203.0.113.0

Заметка
Если вы не можете вспомнить свое имя тюрьмы, то вы всегда можете использовать следующую команду для вывода списка всех тюрьм:

fail2ban-client status

Если вы обнаружите, что хотите прекратить использование службы fail2ban в любое время, вы можете ввести следующее:

fail2ban-client stop

CentOS 7 и Fedora дополнительно потребуют две дополнительные команды для полной остановки и отключения:

systemctl stop fail2ban
systemctl disable fail2ban

Рубрики: Linux