Fail2ban обязательная защита сервера VPS
Основной задачей программы 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 и вы используете для настройки фаервола iptables для начинающих: Простое управление брандмауэром с UFW.
$ sudo apt install fail2ban
И всё, ваш ssh демон -защищен!!!
Использование и установка Fail2ban Debian
- Установка в Debian
# apt install fail2ban
- Параметры настройки, содержащиеся в .local-файлах, имеют преимущество над аналогичными параметрами, записанными в .conf-файлах. На практике это означает, что сначала считывается содержимое .conf-файлов, а затем содержимое .local-файлов, поэтому значения ранее определённых параметров могут быть заменены.
cd /etc/fail2ban; cp -p fail2ban.conf fail2ban.local; cp -p jail.conf jail.local;
- jail.local
[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
- рабочий jail.local для SSH, Pure-FTPd (syslog вместо auth.log)
- 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
- Можно вручную тестировать фильтры, например для Pure-FTPd быстрая установка и настройка в любом Linux
- 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]
# fail2ban-regex /var/log/syslog /etc/fail2ban/filter.d/pure-ftpd.conf
- RoundCube
[roundcube-auth] enabled = true filter = roundcube-auth-new port = http,https #logpath = /var/log/roundcube/userlogins logpath = /var/log/roundcube/errors
Изменим регулярное выражение
- 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+\))?$
Проверим правило
# fail2ban-regex /var/log/roundcube/errors /etc/fail2ban/filter.d/roundcube-auth-new.conf
Установка и использование Fail2ban RHEL/CentOS
По молчанию утилиты Fail2ban нет в стандартном репозитории. Fail2ban можно поставить например из EPEL repository используя YUM.
Инсталляция Fail2ba в CentOS
yum update yum install epel-release yum install fail2ban
По умолчанию, в CentOS fail2ban выключен, включаем и запускаем:
systemctl enable fail2ban systemctl start fail2ban
Создаем jail.local, в котором опишем наши настройки
cp -p jail.conf jail.local
Пример настройки Fail2ban и Nginx
Настроим Fail2ban nginx-limit-req для связки с Nginx. Предварительно вы должны настроить встроенный модуль ngx_http_limit_req_module. Добавим в jail.local
[nginx-limit-req] enabled = true filter = nginx-limit-req port = http,https logpath = /var/log/nginx/*error.log bantime = 600 maxretry = 5
Сам фильтр идет в комплекте с и находится в файле /etc/fail2ban/filter.d/nginx-limit-req.conf Проверяем на ошибки:
fail2ban-client status nginx-limit-req
Управление запрещенными IP и fail2ban-client
Управление запрещенными IP (manage bans IPs).
- Просмотр запрещенных IP в Руководство по iptables: Настройка и оптимизация фаервола Linux:
iptables -L
- Для разблокирования конкретного IP, нужно узнать номер строки правила и потом удалить строку под этим номером с указанием имени Chain. Например, удалим 60 строку правила для цепи fail2ban-ssh:
iptables -nvL --line-numbers iptables -D f2b-sshd 60
- Для просмотра состояния и заблокированных ip используйте встроенную утилиту fail2ban-client
fail2ban-client status sshd
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
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 " заменить строчку
Date: `date -u +"%%a, %%d %%h %%Y %%T +0000"`
на
Date: `date --rfc-2822 -u`
Fail2ban просмотреть полный список заблокированных IP-адресов
Лучший способ просмотреть полный список заблокированных IP-адресов - проверить файл журнала:
sudo zgrep 'Ban' /var/log/fail2ban.log*
Второй способ, посмотреть чистый список правил iptables:
sudo iptables -L INPUT -v -n | less
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах