Fail2Ban на CentOS 8: установка, настройка и защита
Содержание
Это руководство поможет вам установить и настроить Fail2Ban на вашем сервер под управлением CentOS, RHEL 8 или Fedora. В этой статье Вы также узнаете, как добавить в Fail2Ban какой-либо сервис на мониторинг, например SSH, FTP т.д.
Шаг 1 — Установка Fail2ban на CentOS 8
Прежде всего, нужно установить пакет epel-release для настройки репозитория EPEL yum в вашу операционную систему, например CentOS 8. После этого установите RPM-пакет Fail2Ban с помощью команды:
sudo dnf install epel-release
sudo dnf install fail2ban
Шаг 2 — Настройка Fail2ban
Fail2ban хранит файлы конфигурации в каталоге /etc/fail2ban но нам нужно создать копию файла этого конфига под именем как jail.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Теперь нужно отредактировать файл jail.local для создания правил блокировки и доступа, это можно сделать в любом редакторе, например vi:
sudo vi /etc/fail2ban/jail.local
Для создания первого правила, внесем некоторые изменения в раздел [DEFAULT]:
[DEFAULT]
# «ignoreip» can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
# will not ban a host which matches an address in this list. Several addresses
# can be defined using space (and/or comma) separator.
ignoreip = 127.0.0.1/8 192.168.1.0/24
# «bantime» is the number of seconds that a host is banned.
bantime = 60m
# A host is banned if it has generated «maxretry» during the last «findtime» seconds. as per below
# settings, 2 minutes
findtime = 5m
# «maxretry» is the number of failures before a host get banned.
maxretry = 5
Шаг 3 — Защита SSH / SFTP
После завершения настройки по умолчанию в файле jail.local найдите раздел [ssh-iptables], и отредактируйте как показано ниже:
[DEFAULT]
ignoreip = 192.168.56.2/24
bantime = 21600
findtime = 300
maxretry = 3
banaction = iptables-multiport
backend = systemd
[sshd]
enabled = true
Давайте кратко объясним параметры в приведенной выше конфигурации:
- ignoreip: указывает список IP-адресов или имен хостов, которые нельзя забанить.
- bantime: указывает количество секунд, на которое хост забанен (т.е. эффективная длительность бана).
- maxretry: указывает количество сбоев до того, как хост будет забанен.
- findtime: fail2ban заблокирует хост, если он генерировал «maxretry» в течение последних секунд «findtime».
- Banaction: запрет действия.
- backend: указывает бэкэнд, используемый для получения модификации файла журнала.
systemctl start fail2ban
systemctl enable fail2ban
systemctl status fail2ban
Будьте внимательны при указании порта SSH, на некоторых хостингаг он может быть отличным от стандартного.
Шаг 4 — Защита FTP
Давайте защитим ваш сервер FTP (vsFTPd), найдите следующую запись в разделе [vsftpd-iptables] и внесите изменения, как показано ниже. Но это только в том случае, если вы используете vsFTPd.
[vsftpd-iptables] enabled = true filter = vsftpd action = iptables[name=VSFTPD, port=21, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800
Шаг 5 — Перезапуск и тестирование
После втого как Вы внесли все нужные настройки, сохраните файл и перезапустите службу Fail2ban с помощью следующей команды.
sudo systemctl start fail2ban.service
sudo systemctl enable fail2ban.service
В целях тестирования я попробовал подключится по SSH с неверными учетными данными с другого компьютера. После 3-х неудачных попыток Fail2ban заблокировал этот IP через iptables с отклонением ICMP. НА скриншоте показано созданное правило блокировки IP-адреса.
Внимание! Если Вы подключаетесь к серверу только по SSH, убедитесь, что у вас есть будет доступ по SSH с другого IP, прежде чем начать тестирование.
Разблокирование IP
Чтобы разбанить IP-адрес в fail2ban (во всех jails и базе данных), выполните следующую команду:
# fail2ban-client unban 192.168.56.1
Чтобы разбанить IP-адрес в fail2ban (во всех jails и базе данных), выполните следующую команду:
# fail2ban-client unban 192.168.56.1