Основной задачей программы Fail2ban является обнаружение и блокирование отдельных IP-адресов, с которых производятся попытки несанкционированного проникновения в защищаемую систему. Такие "враждебные" IP-адреса определяются по результатам наблюдения за файлами журналов - log-файлами (например, /var/log/secure, /var/log/auth.log, /var/log/apache/access.log и т.д.). Если с какого-либо IP-адреса выполняется слишком много попыток зарегистрироваться в защищаемой системе или производятся какие-либо другие подозрительные действия, то хост с этим IP-адресом блокируется на некоторый интервал времени, определённый системным администратором, т.е. ни один пакет, посланный с такого заблокированного хоста, не будет принят. Такая блокировка выполняется посредством изменения правил (rules) сетевого экрана (iptables).
Описанная выше функциональная схема позволяет защищаться от так называемых "brute force" атак, т.е. от многочисленных попыток войти в систему с различными вариантами паролей. Атаки такого рода достаточно часто практикуются сетевыми взломщиками.
В операционной системе Ubuntu 18.04.4 LTS, 20.04.1 LTS Fail2ban ставиться очень просто, если вам нужна только защита SSH и вы используете для настройки фаервола iptables для начинающих: Простое управление брандмауэром с UFW.
$ sudo apt install fail2ban
И всё, ваш ssh демон -защищен!!!
# apt install fail2ban
cd /etc/fail2ban; cp -p fail2ban.conf fail2ban.local; cp -p jail.conf 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
[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
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-auth] enabled = true filter = roundcube-auth-new port = http,https #logpath = /var/log/roundcube/userlogins logpath = /var/log/roundcube/errors
Изменим регулярное выражение
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 нет в стандартном репозитории. 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-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 (manage bans IPs).
iptables -L
iptables -nvL --line-numbers iptables -D f2b-sshd 60
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
Версия демона Fail2ban 0.8.6 присылает на почту уведомление с неправильной датой 1970-01-01 01:00. Варианты решения:
Date: `date -u +"%%a, %%d %%h %%Y %%T +0000"`
на
Date: `date --rfc-2822 -u`
Лучший способ просмотреть полный список заблокированных IP-адресов - проверить файл журнала:
sudo zgrep 'Ban' /var/log/fail2ban.log*
Второй способ, посмотреть чистый список правил iptables:
sudo iptables -L INPUT -v -n | less