Как установить и настроить Fail2Ban в CentOS 8 и Fedora 33
Это руководство существует для этих версий ОС
- CentOS 8
- CentOS 7
На этой странице
- Предпосылки
- Установите Fail2Ban
- Настроить Fail2Ban
- Настройка файла jail.local
- Дополнительные настройки
- Внесение IP-адресов в белый список
- Время блокировки и количество повторных попыток
- Оповещения по электронной почте
- Тюрьма SSHD
- Тюрьма Nginx
Fail2Ban — это утилита для анализа журналов, которая сканирует файлы журналов различных процессов и блокирует IP-адреса, в которых слишком много неудачных паролей. Когда обнаружена попытка входа в систему, Fail2Ban добавит новое правило в iptables, чтобы временно или навсегда заблокировать IP-адрес злоумышленника. Он также может предупредить вас по электронной почте о том же.
Он в первую очередь ориентирован на обнаружение вторжений через SSH, но его можно настроить для работы с любым сервисом, использующим файлы журналов.
Предпосылки
-
A Fedora 33 or a CentOS 8 based server with a non-root user with sudo privileges.
-
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/
.Конфигурации применяются в следующем порядке:
<старт>
/etc/fail2ban/jail.conf
etc/fail2ban/jail.d/*.conf
, по алфавиту/etc/fail2ban/jail.local
/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. Если у вас есть какие-либо вопросы, пишите их в комментариях ниже.