Тематические термины: Fail2ban, CentOS, Ubuntu
Описывая Fail2ban в двух словах, можно сказать, что он позволяет на основе анализа логов блокировать тех, кто злоупотребляет доступностью сервера по сети. Например, защитить почтовые ящики от взлома путем перебора паролей или многократного запроса какого-либо ресурса.
Читая некоторые статьи в интернете, может сложиться неправильное мнение, что Fail2ban нужен только для защиты от брут-форс атак (перебор паролей). На самом деле, данный программный продукт — система реагирования на подозрительные действия.
Для систем на базе пакетов Debian или Red Hat команды будут немного отличаться.
CentOS / Red Hat:
yum install fail2ban
Ubuntu / Debian:
apt-get install fail2ban
CentOS 6:
Добавляем репозиторий:
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Устанавливаем пакет:
Для запуска службы вводим следующие команды:
systemctl enable fail2ban
systemctl start fail2ban
* Для старых систем без systemd это будут команды chkconfig fail2ban on / update-rc.d fail2ban defaults и service fail2ban start.
Процесс настройки fail2ban не зависит от дистрибутива Linux. Основной конфигурационный файл находится по пути /etc/fail2ban/jail.conf. Однако, его не рекомендуется менять и для настройки используют подключаемые файлы из каталога /etc/fail2ban/jail.d.
Для начала создаем первый файл, в котором будут храниться настройки по умолчанию:
vi /etc/fail2ban/jail.d/default.conf
Приведем его к виду:
[DEFAULT]maxretry = 4findtime = 480bantime = 720action = firewallcmd-ipsetignoreip = 127.0.0.1/8
* где:
* В данном примере, если в течение 8 минут (480) будет найдено 5 строк (maxretry = 4), содержащих критерий фильтра, Fail2ban заблокирует IP-адрес, с которого идет подключение на 12 минут (720);* В секции [DEFAULT] хранятся общие настройки для всех правил. Каждую из настроек можно переопределить при конфигурировании самого правила.
Для нового правила необходимо создать конфигурационный файл в каталоге /etc/fail2ban/jail.d, например:
vi /etc/fail2ban/jail.d/service.conf
[ssh]enabled = trueport = sshfilter = sshdaction = iptables[name=sshd, port=ssh, protocol=tcp]logpath = /var/log/auth.logmaxretry = 10findtime = 600
* обратите внимание, что мы переопределили параметры по умолчанию maxretry, findtime и action.
Чтобы изменения вступили в силу, перезапускаем сервис:
systemctl restart fail2ban
* в старых версиях service fail2ban restart.
Для гарантии, что fail2ban не заблокирут компьютер администратора или другой важный узел, предусмотрена настройка исключений с помощью опции ignoreip. Опция может быть применена как на глобальном уровне (default), так и для конкретного правила.
Для того, чтобы задать общую настроку, откроем наш файл default:
… и добавим:
[DEFAULT]…ignoreip = 192.168.0.0/24 95.95.95.95
* в данном примере под фильтры не будут попадать адреса с 192.168.0.1 по 192.168.0.255 и адрес 95.95.95.95.
Для конкретного правили настройки будут, примерно, следующие:
vi /etc/fail2ban/jail.d/ssh.conf
[ssh]…ignoreip = 192.168.1.22
* в данном примере мы добавили в белый список один адрес 192.168.1.22, который не будет блокироваться.
Обязательно перезагружаемся, чтобы настройки применились:
* добавление адреса в белый список не удаляет его из блокировки. Поэтому, если IP попал в блок, нужно будет его удалить вручную.
Файлы с настройкой действий находятся в каталоге /etc/fail2ban/action.d. Чтобы блокировать адрес, Fail2ban создает правило в брандмауэре netfilter. Для этого, чаще всего, используются утилиты iptables или firewall-cmd. Последняя применяется в последних версиях CentOS / Red Hat / Fedora. iptables более универсальная и может использоваться, почти, во всех системах Linux.
Остановимся на описании самых используемых действий:
Подробнее, как создаются правила в netfilter при помощи iptables и firewalld.
Фильтры, в основном, представляют набор регулярных выражений для поиска ключевых слов в log-файлах. Они находятся в каталоге /etc/fail2ban/filter.d.
Для создания и настройки своих фильтров, можно использовать имеющиеся файлы в качестве шпаргалки.
В данных примерах блокировка IP-адреса будет происходить на 12 минут после 4-х попыток ввода пароля в течение 8 минут. Эти параметры берутся из настроек [DEFAULT]. Если их нужно переопределить, просто добавляем их при описании правила.
[ssh]enabled = trueport = sshfilter = sshdaction = firewallcmd-new[name=sshd]logpath = /var/log/secure
[ssh]enabled = trueport = sshfilter = sshdaction = iptables[name=sshd]logpath = /var/log/auth.log
vi /etc/fail2ban/jail.d/asterisk.conf
[asterisk]enabled = truefilter = asteriskaction = iptables-allports[name=asterisk, protocol=all]logpath = /var/log/asterisk/messages
vi /etc/fail2ban/jail.d/nginx.conf
[nginx]enabled = trueport = http,httpsfilter = nginx-http-authaction = iptables-multiport[name=nginx, port=”http,https”, protocol=tcp]logpath = /var/log/nginx/error.log
Данное правило поможет защитить веб-сервер nginx от DDoS-атак. В некоторых сборках, для данного правило может не оказаться готового фильтра, поэтому в данном примере, мы его создадим вручную.
Для начала, необходимо настроить NGINX:
vi /etc/nginx/nginx.conf
В раздел http добавим:
http { … limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s; …
* данная настройка создает зону с интенсивностью запросов в 1 запрос в секунду.
После настраиваем лимит для конкретного виртуального домена в разделе server – location:
server { … location / { … limit_req zone=one burst=5 nodelay; …
* данная настройка вместе с предыдущей зоной, созданной в секции http, позволит лимитировать запросы — 1 запрос в секунду при всплеске 5 запросов.
Проверяем конфигурационный файл nginx и перезапускаем сервис:
systemctl reload nginx
В лог-файле /var/log/nginx/error.log мы должны увидеть запись на подобие:
2020/11/16 19:11:08 [error] 1330844#1330844: *16640836 limiting requests, excess: 10.520 by zone “one”, client: xxx.xxx.xxx.xxx, server: admins24.com, request: “GET / HTTP/1.1”, host: “admins24.com”, referrer: “https://admins24.com/page1”
Теперь можно приступать к настройке fail2ban. Создаем фильтр:
vi /etc/fail2ban/filter.d/nginx-limit-req.conf
[Definition]ngx_limit_req_zones = [^”]+failregex = ^\s*\[error\] \d+#\d+: \*\d+ limiting requests, excess: [\d\.]+ by zone “(?:%(ngx_limit_req_zones)s)”, client: <HOST>ignoreregex =
Создаем правило в fail2ban:
vi /etc/fail2ban/jail.d/nginx-ddos.conf
[nginx-ddos]enabled = trueport = http,httpsfilter = nginx-limit-reqaction = iptables-multiport[name=nginxddos, port=”http,https”, protocol=tcp]logpath = /var/log/nginx/error.log
После настройки не забываем перезапустить fail2ban:
Получить статистику заблокированных адресов можно следующей командой:
fail2ban-client status <имя правила>
Получить список правил можно командой:
fail2ban-client status
При наличие заблокированных IP-адресов мы увидим, примерно, следующее:
`- action |- Currently banned: 2 | `- IP list: 31.207.47.55 10.212.245.29
С помощью iptables:
iptables -L -n –line
С помощью firewall-cmd:
firewall-cmd –direct –get-all-rules
Средствами fail2ban:
Для удаление адреса из списка вводим:
fail2ban-client set <имя правила> unbanip <IP-адрес>
например:
fail2ban-client set ssh unbanip 31.207.47.55
iptables -D <цепочка правил> -s IP-адрес
iptables -D fail2ban-ssh -s 10.212.245.29
firewall-cmd –direct –permanent –remove-rule <правило>
firewall-cmd –direct –permanent –remove-rule ipv4 filter f2b-sshd 0 -s 188.134.7.221
После необходимо перечитать правила:
firewall-cmd –reload
Если быть честным, достойных аналогов нет. Вот что-то похожее:
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies