service:fail2ban
Различия
Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
service:fail2ban [29.03.2017 18:03] – создано viacheslav | service:fail2ban [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== fail2ban ====== | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | https:// | ||
+ | :!: Необходимо отключить подавление повторяющихся строк в логах: | ||
+ | < | ||
+ | Jan 21 16:08:01 vmls-haproxy1 haproxy[1674256]: | ||
+ | </ | ||
+ | Иначе пороги срабатывания будут некорректными. | ||
+ | |||
+ | <code bash> | ||
+ | sed -i ' | ||
+ | systemctl restart rsyslog | ||
+ | </ | ||
+ | |||
+ | ===== Установка ===== | ||
+ | <code bash> | ||
+ | sudo apt-get install fail2ban -y | ||
+ | </ | ||
+ | ==== Установка debian upstream-package ==== | ||
+ | Пакеты: | ||
+ | <code bash> | ||
+ | cd /tmp | ||
+ | wget https:// | ||
+ | https:// | ||
+ | # Проверка контрольной суммы | ||
+ | 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:// | ||
+ | ===== Настройка ===== | ||
+ | ==== Для Nextcloud ==== | ||
+ | === Фильтр === | ||
+ | <code bash> | ||
+ | nano / | ||
+ | </ | ||
+ | |||
+ | Вставить туда следующий текст: | ||
+ | < | ||
+ | [INCLUDES] | ||
+ | before = common.conf | ||
+ | |||
+ | [Definition] | ||
+ | failregex = Login failed.*Remote IP.*'< | ||
+ | ignoreregex = | ||
+ | </ | ||
+ | |||
+ | === Тюрьма === | ||
+ | <code bash> | ||
+ | nano / | ||
+ | </ | ||
+ | |||
+ | Вставить туда следующий текст: | ||
+ | < | ||
+ | [nextcloud] | ||
+ | enabled = true | ||
+ | port = http,https | ||
+ | filter | ||
+ | logpath = / | ||
+ | </ | ||
+ | |||
+ | ==== Для Wordpress === | ||
+ | Чтобы научить Wordpress работать с fail2ban, необходимо установить в Wordpress плагин WP Fail2Ban Redux, который перенаправляет сообщения о входах в Wordpress в стандартный файл / | ||
+ | === Фильтры === | ||
+ | == Жёсткий == | ||
+ | <code bash> | ||
+ | nano / | ||
+ | </ | ||
+ | |||
+ | Вставить туда следующий текст: | ||
+ | < | ||
+ | [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 = | ||
+ | </ | ||
+ | |||
+ | == Мягкий == | ||
+ | <code bash> | ||
+ | nano / | ||
+ | </ | ||
+ | |||
+ | Вставить туда следующий текст: | ||
+ | < | ||
+ | [INCLUDES] | ||
+ | before = common.conf | ||
+ | |||
+ | [Definition] | ||
+ | _daemon = wp | ||
+ | failregex = ^%(__prefix_line)sAuthentication failure for .* from < | ||
+ | ignoreregex = | ||
+ | </ | ||
+ | |||
+ | === Тюрьма === | ||
+ | <code bash> | ||
+ | nano / | ||
+ | </ | ||
+ | |||
+ | Вставить туда следующий текст: | ||
+ | < | ||
+ | [wordpress-hard] | ||
+ | enabled = true | ||
+ | filter = wordpress-hard | ||
+ | logpath = / | ||
+ | maxretry = 2 | ||
+ | port = http,https | ||
+ | |||
+ | [wordpress-soft] | ||
+ | enabled = true | ||
+ | filter = wordpress-soft | ||
+ | logpath = / | ||
+ | maxretry = 5 | ||
+ | port = http,https | ||
+ | </ | ||
+ | === Ссылки === | ||
+ | [[https:// | ||
+ | |||
+ | [[https:// | ||
+ | ==== HAProxy ==== | ||
+ | Защита от DoS-атак. | ||
+ | |||
+ | '' | ||
+ | <code bash> | ||
+ | [INCLUDES] | ||
+ | before = common.conf | ||
+ | |||
+ | [Definition] | ||
+ | failregex = ^%(__prefix_line)s< | ||
+ | ignoreregex = ^%(__prefix_line)smessage repeated | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | <code bash> | ||
+ | [DEFAULT] | ||
+ | ignoreip = 127.0.0.0/8 10.0.0.0/8 172.16.0.0/ | ||
+ | banaction = nftables-multiport | ||
+ | banaction_allports = nftables-allports | ||
+ | |||
+ | [haproxy-ddos] | ||
+ | enabled | ||
+ | filter | ||
+ | logpath | ||
+ | bantime | ||
+ | findtime = 1m | ||
+ | maxretry = 100 | ||
+ | </ | ||
+ | https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | === Скрипт блокировки IP с 5-значными запросами === | ||
+ | <file bash fail2ban-5digit-requests.sh> | ||
+ | for ip in $(echo "show table st_per_ip_rate" | ||
+ | do | ||
+ | fail2ban-client set haproxy-ddos banip $ip | ||
+ | done | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | echo "" | ||
+ | echo "# fail2ban 5-digit requests IPs" >> / | ||
+ | echo "* * * * * | ||
+ | </ | ||
+ | |||
+ | ===== Полезные команды ===== | ||
+ | <code bash> | ||
+ | # Логи: | ||
+ | tail -f / | ||
+ | tail -f / | ||
+ | |||
+ | # Перечитать конфиг: | ||
+ | fail2ban-client reload | ||
+ | |||
+ | # Проверить состояние jail: | ||
+ | fail2ban-client status nextcloud | ||
+ | fail2ban-client status haproxy-ddos | ||
+ | |||
+ | # Забанить/ | ||
+ | fail2ban-client set < | ||
+ | fail2ban-client set < | ||
+ | </ | ||
+ | |||
+ | ==== Отчёт по логам Powershell ==== | ||
+ | <code powershell> | ||
+ | # Исходник | ||
+ | 2023-05-22 11: | ||
+ | 2023-05-22 11: | ||
+ | 2023-05-22 11: | ||
+ | |||
+ | (gc ' | ||
+ | select @{n=' | ||
+ | |||
+ | # Результат | ||
+ | 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:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | [[https:// |