====== fail2ban ====== [[https://www.fail2ban.org/wiki/index.php/Main_Page|Сайт fail2ban]]\\ [[https://www.fail2ban.org/wiki/index.php/Commands|Список команд fail2ban]]\\ https://github.com/fail2ban/fail2ban/wiki :!: Необходимо отключить подавление повторяющихся строк в логах: Jan 21 16:08:01 vmls-haproxy1 haproxy[1674256]: message repeated 6 times: [ 36.93.174.103:45931 [21/Jan/2024:16:07:12.895] fe_web~ fe_web/ 0/-1/-1/-1/49089 429 225 - - PR-- 827/827/0/0/0 0/0 "GET https://www.example.com/ HTTP/2.0"] Иначе пороги срабатывания будут некорректными. sed -i 's#RepeatedMsgReduction on#RepeatedMsgReduction off#' /etc/rsyslog.conf systemctl restart rsyslog ===== Установка ===== sudo apt-get install fail2ban -y ==== Установка debian upstream-package ==== Пакеты: https://github.com/fail2ban/fail2ban/releases cd /tmp wget https://github.com/fail2ban/fail2ban/releases/download/0.11.2/fail2ban_0.11.2-1.upstream1_all.deb \ https://github.com/fail2ban/fail2ban/releases/download/0.11.2/fail2ban_0.11.2-1.upstream1_all.deb.asc # Проверка контрольной суммы gpg --verify fail2ban_0.11.2-1.upstream1_all.deb.asc fail2ban_0.11.2-1.upstream1_all.deb # Описание пакета dpkg -I fail2ban_0.11.2-1.upstream1_all.deb service fail2ban stop # Остановить предыдущую работающую версию fail2ban-client stop # Как вариант - клиентом apt install nftables python3-pyinotify whois # Установить зависимости (см. описание пакета) dpkg -i fail2ban_0.11.2-1.upstream1_all.deb # Установить пакет apt -f install # Установить оставшиеся зависимости https://github.com/fail2ban/fail2ban/wiki/How-to-install-or-upgrade-fail2ban-manually ===== Настройка ===== ==== Для Nextcloud ==== === Фильтр === nano /etc/fail2ban/filter.d/nextcloud.conf Вставить туда следующий текст: [INCLUDES] before = common.conf [Definition] failregex = Login failed.*Remote IP.*'' ignoreregex = === Тюрьма === nano /etc/fail2ban/jail.d/nextcloud.conf Вставить туда следующий текст: [nextcloud] enabled = true port = http,https filter = nextcloud logpath = /media/sdcard/cloud-data/nextcloud.log ==== Для Wordpress === Чтобы научить Wordpress работать с fail2ban, необходимо установить в Wordpress плагин WP Fail2Ban Redux, который перенаправляет сообщения о входах в Wordpress в стандартный файл /var/log/auth.log. === Фильтры === == Жёсткий == nano /etc/fail2ban/filter.d/wordpress-hard.conf Вставить туда следующий текст: [INCLUDES] before = common.conf [Definition] _daemon = wp failregex = ^%(__prefix_line)sAuthentication attempt for unknown user .* from $ ^%(__prefix_line)sBlocked authentication attempt for .* from $ ^%(__prefix_line)sBlocked user enumeration attempt from $ ^%(__prefix_line)sPingback error .* generated from $ ^%(__prefix_line)sSpammed comment from $ ^%(__prefix_line)sXML-RPC multicall authentication failure $ ignoreregex = == Мягкий == nano /etc/fail2ban/filter.d/wordpress-soft.conf Вставить туда следующий текст: [INCLUDES] before = common.conf [Definition] _daemon = wp failregex = ^%(__prefix_line)sAuthentication failure for .* from $ ignoreregex = === Тюрьма === nano /etc/fail2ban/jail.d/wordpress.conf Вставить туда следующий текст: [wordpress-hard] enabled = true filter = wordpress-hard logpath = /var/log/auth.log maxretry = 2 port = http,https [wordpress-soft] enabled = true filter = wordpress-soft logpath = /var/log/auth.log maxretry = 5 port = http,https === Ссылки === [[https://ru.wordpress.org/plugins/wp-fail2ban-redux/|Страница плагина WP Fail2Ban Redux]] [[https://github.com/thebrandonallen/wp-fail2ban-redux|Страница на Гитхабе]] ==== HAProxy ==== Защита от DoS-атак. ''vi /etc/fail2ban/filter.d/haproxy-ddos.conf'' [INCLUDES] before = common.conf [Definition] failregex = ^%(__prefix_line)s:\d+.*?\sPR--\s.*$ ignoreregex = ^%(__prefix_line)smessage repeated ''vi /etc/fail2ban/jail.local'' [DEFAULT] ignoreip = 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 ::1 banaction = nftables-multiport banaction_allports = nftables-allports [haproxy-ddos] enabled = true filter = haproxy-ddos logpath = /var/log/haproxy.log bantime = 6h findtime = 1m maxretry = 100 https://serverfault.com/a/853817\\ [[https://www.loadbalancer.org/blog/simple-denial-of-service-dos-attack-mitigation-using-haproxy-2/|Simple Denial of Service DOS attack mitigation using HAProxy]]\\ [[https://www.cyberciti.biz/faq/iptables-connection-limits-howto/|Iptables Limits Connections Per IP]] === Скрипт блокировки IP с 5-значными запросами === for ip in $(echo "show table st_per_ip_rate" |socat stdio /var/run/haproxy/admin.sock |egrep "[0-9]{5}$" |cut -d '=' -f 2 |cut -d ' ' -f 1) do fail2ban-client set haproxy-ddos banip $ip done echo "" >> /etc/crontab echo "# fail2ban 5-digit requests IPs" >> /etc/crontab echo "* * * * * root /root/fail2ban-5digit-requests.sh" >> /etc/crontab ===== Полезные команды ===== # Логи: tail -f /var/log/fail2ban.log tail -f /var/log/fail2ban.log |egrep -i "\] ban|unban" # Перечитать конфиг: fail2ban-client reload # Проверить состояние jail: fail2ban-client status nextcloud fail2ban-client status haproxy-ddos # Забанить/разбанить IP-адреса: fail2ban-client set banip ... fail2ban-client set unbanip ... ==== Отчёт по логам Powershell ==== # Исходник 2023-05-22 11:00:05,449 fail2ban.actions [820]: NOTICE [haproxy-ddos] Ban 167.235.195.27 2023-05-22 11:00:05,640 fail2ban.actions [820]: NOTICE [haproxy-ddos] Ban 65.21.246.244 2023-05-22 11:00:06,289 fail2ban.actions [820]: NOTICE [haproxy-ddos] Ban 5.161.228.93 (gc 'D:\temp\2023.05.22 DDoS.txt') -replace ' fail2ban.*Ban ',';'|Convertfrom-Csv -Delimiter ';' -Header Time,IP | select @{n='Time';e={($_.Time -replace ',','.') -as [datetime]}},IP # Результат Time IP ---- -- 22.05.2023 11:00:05 167.235.195.27 22.05.2023 11:00:05 65.21.246.244 22.05.2023 11:00:06 5.161.228.93 ===== Литература ===== [[https://www.fail2ban.org/wiki/index.php/Main_Page|Сайт fail2ban]] [[https://www.fail2ban.org/wiki/index.php/Commands|Список команд fail2ban]] [[https://andew.ru/ru/pages/page/fail2ban-ubuntu|Fail2Ban 0.9.x в Ubuntu 16.04]]