Перебор IP-адресов на хостинге: методы защиты и инструменты для веб-мастеров

Представьте: вы заходите в логи сервера, а там — тысячи запросов с одного IP за минуту. Это не сбой. Это атака. Перебор IP-адресов — хлеб с маслом для любого скрипт-кидди. Он сканирует диапазоны, ищет открытые порты, долбит паролями к SSH или FTP. Даже если ваш сайт — это пустая визитка, его могут угнать под прокси или спам-рассылку. Игнорировать такое — значит самому оплачивать счёт за чужой криминал. Разберём, как отсечь эту шваль, от дедовских правил iptables до современных конфигураций fail2ban и nginx.
Как выглядит перебор изнутри
Злоумышленник не сидит и не тыкает пальцем в клавиатуру. Он запускает nmap или masscan. Одна команда — и готово:
nmap -p 22,21,80,443 192.168.1.0/24 --open
Дальше — брутфорс. Инструмент вроде hydra перебирает логины и пароли к найденным сервисам:
hydra -l root -P passwords.txt ssh://192.168.1.100
Это может длиться часами. Нагрузка на сервер растёт, процессор греется, а вы платите за лишние ресурсы. В чём суть? Атакующему плевать на ваш контент. Ему нужна дыра, чтобы войти и использовать ресурсы в своих целях.
Метод №1: iptables — быстрый и злой
Самый простой способ — ограничить количество новых соединений. Модуль connlimit режет одновременные подключения:
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
Это блокирует IP, если он пытается открыть больше 3 сессий на порт 22. Но это не панацея: атака может идти последовательно, по одной попытке. Тут в дело вступает модуль recent. Он запоминает историю:
iptables -A INPUT -p tcp --dport 22 -m recent --name SSH --rcheck --seconds 60 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --name SSH --set -j ACCEPT
Эти правила говорят: если за последние 60 секунд было больше 4 попыток — бан. Просто, дёшево, сердито.
Метод №2: Fail2ban — умный сторож
Iptables — это дубина. Fail2ban — скальпель. Он анализирует логи (auth.log, access.log) и сам создаёт правила блокировки. Настройка — плёвое дело. Правим /etc/fail2ban/jail.local:
- enabled = true — включаем.
- maxretry = 5 — число неудачных попыток.
- findtime = 600 — интервал в секундах (10 минут).
- bantime = 3600 — время блокировки (1 час).
Fail2ban умеет работать с Apache, Nginx, Postfix и десятками других сервисов. Его главный плюс — он не трогает легитимных пользователей, которые просто ошиблись паролем раз в полгода.
Метод №3: Веб-сервер — последняя линия
Если атака идёт на веб-форму (например, /wp-login.php), поможет nginx limit_req. Конфиг:
http {
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
server {
location /login {
limit_req zone=login burst=5;
}
}
}
Это даёт не больше 1 запроса в секунду с одного IP. Параметр burst=5 разрешает кратковременный всплеск — чтобы не заблокировать живого человека, который быстро кликает. Для Apache есть модуль mod_evasive — он работает по тому же принципу: блокирует IP при превышении порога запросов.
Внешние сервисы: Cloudflare как тяжёлая артиллерия
Когда своих сил не хватает, подключайте облачных тяжей. Cloudflare предлагает встроенный Rate Limiting, WAF и блокировку по стране. Настройка в панели:
- Правило: запросы к /wp-login.php.
- Порог: 10 запросов за 1 минуту.
- Действие: блокировка на 1 час.
Личное наблюдение автора: за годы администрирования я заметил, что 80% атак приходят с узкого диапазона IP — часто из одного дата-центра. Блокировка целой подсети /24 через iptables снимает нагрузку мгновенно. Но тут есть риск: случайно можно отрубить доступ нормальным пользователям. Поэтому — всегда тестируйте на песочнице.
Что в итоге?
Не надейтесь на один метод. Комбинируйте: iptables режет очевидных дураков, fail2ban отлавливает хитрецов по логам, nginx сдерживает веб-атаки, а Cloudflare подчищает остатки. Главное — не сидеть сложа руки. Даже маленький сайт могут использовать как трамплин для атаки на кого-то другого. И тогда проблемы будут не только у вас, но и у соседей по дата-центру.













