Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
fail2ban [2023/06/21 14:11] (текущий) – [Fail2ban обязательная защита сервера VPS] darkfire
Строка 1: Строка 1:
 +====== Fail2ban обязательная защита сервера VPS ======
 +{{htmlmetatags>
 +metatag-description=(Как защитить сервера VPS, VE при помощи программы Fail2ban. Fail2ban мониторит системные логи на предмет автоматизированных атак на систему.)
 +}}
  
 +
 +{{ ::fail2ban.png?nolink&400 |}}
 +
 +Основной задачей программы [[https://www.fail2ban.org|Fail2ban]] является обнаружение и блокирование отдельных IP-адресов, с которых производятся попытки несанкционированного проникновения в защищаемую систему. Такие "враждебные" IP-адреса определяются по результатам наблюдения за файлами журналов - log-файлами (например, /var/log/secure, /var/log/auth.log, /var/log/apache/access.log и т.д.). Если с какого-либо IP-адреса выполняется слишком много попыток зарегистрироваться в защищаемой системе или производятся какие-либо другие подозрительные действия, то хост с этим IP-адресом блокируется на некоторый интервал времени, определённый системным администратором, т.е. ни один пакет, посланный с такого заблокированного хоста, не будет принят. Такая блокировка выполняется посредством изменения правил (rules) сетевого экрана (iptables).
 +
 +Описанная выше функциональная схема позволяет защищаться от так называемых "brute force" атак, т.е. от многочисленных попыток войти в систему с различными вариантами паролей. Атаки такого рода достаточно часто практикуются сетевыми взломщиками.
 +
 +===== Fail2ban Ubuntu 18 и выше =====
 +В операционной системе Ubuntu 18.04.4 LTS, 20.04.1 LTS Fail2ban ставиться очень просто, если вам нужна только защита SSH и вы используете для настройки фаервола [[UFW]].
 +
 +<file bash>
 +$ sudo apt install fail2ban
 +</file> И всё, ваш ssh демон -защищен!!!
 +
 +
 +===== Использование и установка Fail2ban Debian  =====
 +
 +  * Установка в Debian<file bash>
 +# apt install fail2ban</file>
 +  * Параметры настройки, содержащиеся в .local-файлах, имеют преимущество над аналогичными параметрами, записанными в .conf-файлах. На практике это означает, что сначала считывается содержимое .conf-файлов, а затем содержимое .local-файлов, поэтому значения ранее определённых параметров могут быть заменены. <file bash>
 +cd /etc/fail2ban;
 +cp -p fail2ban.conf fail2ban.local;
 +cp -p jail.conf jail.local;
 +</file>
 +  * jail.local<file bash>
 +[DEFAULT]
 +
 +# "ignoreip" can be an IP address, a CIDR mask or a DNS host
 +ignoreip = 127.0.0.1/8
 +# bantime в секундах, если указать отрицательное число (-1), то заблокирует навечно.
 +bantime  = 600
 +maxretry = 3
 +
 +# Адрес, на который слать уведомления о событиях
 +destemail = admin@example.org
 +# Имя пользователя от которого приходят сообщения, по умолчанию Fail2Ban
 +sendername = you name computer
 +
 +
 +# Какое из действий выполнить, например  action_mw, action_mwl и др.
 +action = %(action_mwl)s
 +</file>
 +  * рабочий jail.local для SSH, [[pure-ftpd?&#dontresolve|Pure-FTPd]] (syslog вместо auth.log)<file bash jail.local>
 +[DEFAULT]
 +ignoreip = 127.0.0.1/8
 +#bantime  = -1
 +bantime  = 600
 +maxretry = 3
 +backend = auto
 +destemail = admin@example.org
 +
 +# ACTIONS
 +banaction = iptables-multiport
 +#mta = sendmail
 +mta = mail
 +protocol = tcp
 +chain = INPUT
 +action = %(action_mwl)s
 +
 +# JAILS
 +
 +[ssh]
 +
 +enabled  = true
 +#mta = mail[name=ssh Atacced!!!]
 +port     = ssh
 +filter   = sshd
 +logpath  = /var/log/auth.log
 +maxretry = 6
 +
 +[pure-ftpd]
 +
 +enabled  = true
 +#mta = mail[name=pure-ftpd Atacced!!!]
 +port     = ftp,ftp-data,ftps,ftps-data
 +filter   = pure-ftpd
 +#logpath  = /var/log/auth.log
 +logpath  = /var/log/syslog
 +maxretry = 6
 +</file>
 +  * Можно вручную тестировать фильтры, например для [[Pure-FTPd]]<file bash syslog>
 +Nov 19 15:56:17 cz5234 pure-ftpd: (?@10.26.10.251) [WARNING] Authentication failed for user [dark33]
 +Nov 19 15:56:19 cz5234 pure-ftpd: (?@10.26.10.251) [WARNING] Authentication failed for user [dark33]
 +</file><file bash>
 +# fail2ban-regex /var/log/syslog /etc/fail2ban/filter.d/pure-ftpd.conf
 +</file>
 +  * [[RoundCube]]<file>
 +[roundcube-auth]
 +
 +enabled  = true
 +filter   = roundcube-auth-new
 +port     = http,https
 +#logpath  = /var/log/roundcube/userlogins
 +logpath  = /var/log/roundcube/errors
 +</file>Изменим регулярное выражение<file perl roundcube-auth-new.conf>
 +
 +failregex = ^\s*(\[(\s[+-][0-9]{4})?\])?(: IMAP Error)?: (FAILED login|Login failed) for .*? from <HOST>(\. .* in .*?/rcube_imap\.php on line \d+ \(\S+ \S+\))?$
 +
 +</file>Проверим правило<file>
 +# fail2ban-regex /var/log/roundcube/errors /etc/fail2ban/filter.d/roundcube-auth-new.conf
 +</file>
 +===== Установка и использование Fail2ban RHEL/CentOS =====
 +
 +По молчанию утилиты Fail2ban нет в стандартном репозитории. Fail2ban можно поставить например из EPEL repository используя [[yum?&#epel|YUM]].
 +
 +Инсталляция Fail2ba в CentOS
 +<file bash>
 +yum update
 +yum install epel-release
 +yum install fail2ban
 +</file>
 +По умолчанию, в CentOS fail2ban выключен, включаем и запускаем:
 +<file>
 +systemctl enable fail2ban
 +systemctl start fail2ban
 +</file>
 +Создаем jail.local, в котором опишем наши настройки
 +<file>
 +cp -p jail.conf jail.local
 +</file>
 +==== Пример настройки Fail2ban и Nginx ====
 +
 +Настроим Fail2ban nginx-limit-req для связки с [[Nginx|Nginx]]. Предварительно вы должны настроить встроенный модуль [[rate limiting nginx|ngx_http_limit_req_module]]. Добавим в jail.local
 +<file bash>
 +[nginx-limit-req]
 +enabled = true
 +filter  = nginx-limit-req
 +port    = http,https
 +logpath = /var/log/nginx/*error.log
 +bantime = 600
 +maxretry = 5
 +</file>
 +Сам фильтр идет в комплекте с и находится в файле /etc/fail2ban/filter.d/nginx-limit-req.conf
 +Проверяем на ошибки:
 +<file>
 +fail2ban-client status nginx-limit-req
 +</file>
 +===== Управление запрещенными IP и fail2ban-client =====
 +Управление запрещенными IP (manage bans IPs).
 +  * Просмотр запрещенных IP в [[iptables]]:<file bash>
 +iptables -L
 +</file>
 +  * Для разблокирования конкретного IP, нужно узнать номер строки правила и потом удалить строку под этим номером с указанием имени Chain. Например, удалим 60 строку правила для цепи fail2ban-ssh:<file bash>
 +iptables -nvL --line-numbers
 +iptables -D f2b-sshd 60
 +</file>
 +  * Для просмотра состояния и заблокированных ip используйте встроенную утилиту fail2ban-client
 +<file>
 +fail2ban-client status sshd
 +</file>
 +<file>
 +Status for the jail: sshd
 +|- Filter
 +|  |- Currently failed: 3
 +|  |- Total failed:     18
 +|  `- File list:        /var/log/auth.log
 +`- Actions
 +   |- Currently banned: 6
 +   |- Total banned:     6
 +   `- Banned IP list:   106.13.144.207 180.76.246.205 200.160.111.222 157.245.193.50 179.111.233.126 43.154.104.207
 +
 +</file>
 +===== Bug Fail2ban 1970 =====
 +Версия демона Fail2ban 0.8.6 присылает на почту уведомление с неправильной датой 1970-01-01 01:00. Варианты решения:
 +  * Обновить Fail2ban
 +  * Использовать в jail.local mta = mail вместо mta = sendmail
 +  * Во всех конфигурационных файлах "/etc/fail2ban/action.d/sendmail*.conf " заменить строчку<file python>
 +Date: `date -u +"%%a, %%d %%h %%Y %%T +0000"`
 +</file>на<file python>
 +Date: `date --rfc-2822 -u`
 +</file>
 +===== Fail2ban просмотреть полный список заблокированных IP-адресов =====
 +
 +Лучший способ просмотреть полный список заблокированных IP-адресов - проверить файл журнала:
 +<file bash>
 +sudo zgrep 'Ban' /var/log/fail2ban.log*
 +</file>
 +
 +Второй способ, посмотреть чистый список правил iptables:
 +<file bash>
 +sudo iptables -L INPUT -v -n | less
 +</file>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!