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

Как установить и настроить Fail2Ban в CentOS 8 и Fedora 33


Это руководство существует для этих версий ОС

  • CentOS 8
  • CentOS 7

На этой странице

  1. Предпосылки
  2. Установите Fail2Ban
  3. Настроить Fail2Ban
    1. Настройка файла jail.local
    2. Дополнительные настройки
    3. Внесение IP-адресов в белый список
    4. Время блокировки и количество повторных попыток
    5. Оповещения по электронной почте

    1. Тюрьма SSHD
    2. Тюрьма Nginx

    Fail2Ban — это утилита для анализа журналов, которая сканирует файлы журналов различных процессов и блокирует IP-адреса, в которых слишком много неудачных паролей. Когда обнаружена попытка входа в систему, Fail2Ban добавит новое правило в iptables, чтобы временно или навсегда заблокировать IP-адрес злоумышленника. Он также может предупредить вас по электронной почте о том же.

    Он в первую очередь ориентирован на обнаружение вторжений через SSH, но его можно настроить для работы с любым сервисом, использующим файлы журналов.

    Предпосылки

    1. A Fedora 33 or a CentOS 8 based server with a non-root user with sudo privileges.

    2. Install Nano editor because that's what we will use.

      $ sudo dnf install nano -y
      

    Установить Fail2Ban

    Чтобы установить Fail2Ban на CentOS 8, вам необходимо сначала установить репозиторий EPEL Yum.

    $ sudo dnf install epel-release
    

    Fedora 33 поставляется с Fail2Ban.

    Выполните следующую команду, чтобы установить Fail2Ban как в Fedora 33, так и в CentOS 8.

    $ sudo dnf install fail2ban
    

    После установки нам нужно включить службу.

    $ sudo systemctl enable fail2ban
    

    Затем запустите службу fail2ban.

    $ sudo systemctl start fail2ban
    

    Теперь вы можете проверить статус службы, чтобы убедиться, что она работает правильно.

    $ sudo systemctl status fail2ban
    ? fail2ban.service - Fail2Ban Service
         Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
         Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago
           Docs: man:fail2ban(1)
        Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
       Main PID: 19032 (f2b/server)
          Tasks: 3 (limit: 1125)
         Memory: 11.0M
            CPU: 96ms
         CGroup: /system.slice/fail2ban.service
                 ??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start
    
    Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service...
    Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service.
    Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready
    

    Настроить Fail2Ban

    Служба Fail2Ban хранит файлы конфигурации в каталоге /etc/fail2ban. В нем вы найдете файл jail.conf. Этот файл обычно переопределяется во время обновления пакета, поэтому его не следует редактировать.

    Вместо этого все настройки следует выполнять в новом файле, который мы назовем jail.local. Настройки в этих двух файлах можно дополнительно изменить с помощью файлов из каталога /etc/fail2ban/jail.d/.

    Конфигурации применяются в следующем порядке:

    <старт>

  4. /etc/fail2ban/jail.conf
  5. etc/fail2ban/jail.d/*.conf, по алфавиту
  6. /etc/fail2ban/jail.local
  7. /etc/fail2ban/jail.d/*.local, по алфавиту

jail.conf содержит раздел [DEFAULT], за которым следуют разделы для отдельных служб. Любой из этих разделов можно переопределить, определив их в файлах .local.

Настройка jail.local

Мы создадим новый файл jail.local.

$ sudo nano /etc/fail2ban/jail.local

Вставьте в него следующий код.

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override backend=auto in /etc/fail2ban/jail.conf
backend = systemd

[sshd]
enabled = true

Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл. Это устанавливает новое bantime по умолчанию для всех служб, изменяет серверную часть на systemd и включает тюрьму \\sshd.

Перезапустите Fail2ban, чтобы изменения вступили в силу.

$ sudo systemctl restart fail2ban

Мы можем подтвердить новые примененные настройки с помощью утилиты fail2ban-client.

$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

Мы также можем получить подробный статус каждой тюрьмы следующим образом.

$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

Больше настроек

jail.conf предоставляет гораздо больше настроек, которые можно настроить с помощью файла /jail.local. Далее мы рассмотрим некоторые настройки.

Белый список IP-адресов

Вы можете внести в белый список/игнорировать IP-адреса от блокировки Fail2ban, используя следующий код.

[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89

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

$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89

Замените JAIL в приведенной выше команде на имя тюрьмы, для которой вы хотите изменить настройки.

Время бана и количество попыток

Есть 3 настройки, которые могут установить время и количество повторных попыток бана.

bantime — время в секундах, на которое блокируется IP-адрес. Чтобы установить постоянный запрет, установите это значение на отрицательное число. Значение по умолчанию — 10 минут или 600 секунд.

findtime - время между попытками входа в систему до установки бана. Это значение всегда равно количеству секунд. Например, если Fail2ban настроен на блокировку IP-адреса после 5 неудачных попыток входа в систему, эти 5 попыток должны произойти в течение установленного 10-минутного ограничения bantime.

maxretry - количество повторных попыток с одного IP-адреса до наложения бана. Значение по умолчанию — 3.

Чтобы настроить эти параметры, вставьте следующие строки в файл \etc\fail2ban\jail.local в разделе [DEFAULT].

bantime = 3600
findtime = 300
maxretry = 4

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

Чтобы отправлять оповещения по электронной почте, вам необходимо сначала установить агент передачи почты (MTA). Для нашей цели мы установим sendmail.

$ sudo dnf install sendmail

Чтобы получить электронное письмо, добавьте следующий код в файл \etc\fail2ban\jail.local в разделе [DEFAULT].

destemail = 
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)s

destemail относится к идентификатору электронной почты назначения, который является идентификатором, на который вы хотите получать почту, sendername относится к имени отправителя, поэтому мы используем для него Fail2Ban. mta относится к используемому агенту пересылки почты, которым здесь является sendmail. Если вы используете Postfix, используйте значение mail для переменной mta.

действие относится к действию по умолчанию, которое выполняется при обнаружении вторжения. Значение по умолчанию — %(action_)s, которое блокирует только пользователя. %(action_mw)s забанит и отправит электронное письмо с отчетом Whois; в то время как %(action_mwl)s заблокирует и отправит электронное письмо с отчетом Whois вместе с информацией из соответствующих файлов журнала. Это также может быть изменено для конкретной тюрьмы.

Настройки для отдельных джейлов

Как мы уже знаем, раздел [DEFAULT] применяется ко всем джейлам, пришло время изучить некоторые конкретные джейлы и их настройки.

SSHD тюрьма

Мы уже определили [sshd] ранее в нашем файле jail.local. Мы можем немного настроить его с помощью следующего кода.

[sshd]

enabled = true
port = ssh
logpath = %(ssh_log)s

В этом случае мы используем предопределенную переменную ssh для порта, который является портом SSH по умолчанию. Если вы используете другой порт SSH, вы должны изменить его. logpath относится к расположению файла журнала для мониторинга. %(ssh_log)s использует значение, определенное в стандартном файле конфигурации Fail2bans (/etc/fail2ban/paths-common.conf).

Nginx тюрьма

В Nginx есть несколько джейлов, которые можно использовать в Fail2Ban. Например, если защищенная паролем часть вашего сайта неоднократно подвергается атакам, вы можете использовать для этого раздел [nginx-http-auth] в файле jail.local.

[nginx-http-auth]
enabled = true

Мы также можем добавить раздел с именем [nginx-botsearch], чтобы остановить запросы к несуществующим папкам или расположениям.

[nginx-badbots]
enabled  = true

Существуют и другие тюрьмы Nginx, но они не поставляются с предварительно настроенным Fail2Ban. Их нужно создавать вручную, и большинство из них могут быть основаны на Apache, с которыми поставляется Fail2Ban.

Фильтры Fail2Ban и Failregexs

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

Значение фильтра в файле конфигурации — это ссылка на файл, расположенный в каталоге /etc/fail2ban/filter.d, с удаленным расширением .conf.

Вы можете увидеть, какие фильтры доступны, проверив каталог.

$ ls /etc/fail2ban/filter.d

В нем вы увидите 2 лог-файла для Nginx; nginx-badbots.conf и nginx-http-auth.conf.

Эти файлы конфигурации используют регулярные выражения (регулярные выражения) для анализа файлов журналов. Они называются Failregexs. Вы можете настроить или создать новые фильтры, написав свои собственные регулярные выражения. Мы не будем подробно рассматривать эти регулярные выражения, потому что они выходят за рамки этого руководства.

Мониторинг журналов Fail2Ban и брандмауэра

Вы можете проверить статус Fail2Ban с помощью systemctl, как указано ранее.

$ sudo systemctl status fail2ban

Чтобы получить более подробную информацию, вы можете использовать команду journalctl.

$ sudo journalctl -b -u fail2ban

Вы также можете использовать fail2ban-client для запроса статуса fail2ban-server или отдельной тюрьмы.

$ sudo fail2ban-client status
$ sudo fail2ban-client status jail_name

Вы также можете запросить файл журнала Fail2bans.

$ sudo tail -F /var/log/fail2ban.log

Вы можете перечислить текущие правила, настроенные для iptables.

$ sudo iptables -L

Вы также можете перечислить правила iptables в формате, отражающем команды, необходимые для включения этих правил.

$ sudo iptables -S

Заключение

На этом мы завершаем наше руководство по установке и настройке Fail2Ban на сервере с Fedora 33 или CentOS 8. Если у вас есть какие-либо вопросы, пишите их в комментариях ниже.