====== 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]]