MAATRIX / Блог / Как установить и настроить защиту от брутфорса на VPS

Как установить и настроить защиту от брутфорса на VPS

Как установить и настроить защиту от брутфорса на VPS

MAATRIX

Любой сервер с белым IP уже через час после запуска начинают перебирать боты: тысячи попыток войти по SSH со случайными паролями. Это брутфорс, и без защиты рано или поздно подберут слабый пароль. Ниже — как установить и настроить защиту от брутфорса на VPS: fail2ban, вход по ключу, фаервол и разумные умолчания, которые закрывают проблему. Важно сразу понять принцип: одной волшебной настройки, которая раз и навсегда останавливает перебор, не существует. Защита работает слоями, и каждый слой закрывает свою часть угрозы. Вход по ключу лишает перебор смысла, потому что подбирать становится нечего. fail2ban отсекает сам поток попыток, блокируя адреса ещё до того, как они успеют что-то подобрать. Фаервол убирает с глаз лишние сервисы, сокращая число целей. Смена порта снижает шум автоматических сканеров. Автообновления закрывают уязвимости в самом ПО, через которые тоже ломают доступ. По отдельности каждый слой можно обойти, но вместе они превращают обычный сервер в цель, которую боту невыгодно грызть — он уходит искать жертву полегче. Дальше разберём каждый слой по порядку, от самого важного к дополнительному.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Как выглядит брутфорс и почему это опасно

Откройте журнал авторизации свежего сервера — и вы увидите поток чужих попыток входа:

grep "Failed password" /var/log/auth.log | tail -20

Десятки строк с разными именами (root, admin, user, test) и с адресов со всего мира — это автоматический перебор. Опасность в том, что боты работают круглосуточно и терпеливо: слабый или повторно используемый пароль они рано или поздно подберут, а дальше — полный доступ к серверу. Защита строится в несколько слоёв: убрать вход по паролю, банить перебор, спрятать и закрыть лишнее.

Слой первый: вход по SSH-ключу вместо пароля

Самая сильная мера — вообще отключить парольный вход. Ключ подобрать перебором нереально. Сначала создайте ключ на своём компьютере (если ещё нет) и скопируйте его на сервер:

ssh-keygen -t ed25519
ssh-copy-id root@ВАШ_IP

Убедитесь, что заходите по ключу без запроса пароля, и только потом отключайте парольную аутентификацию в /etc/ssh/sshd_config:

PasswordAuthentication no
PermitRootLogin prohibit-password

Перезапустите SSH:

systemctl restart ssh

Важно: не отключайте пароль, пока не проверили вход по ключу в отдельной сессии — иначе рискуете закрыть себе доступ. Держите одну активную сессию открытой на время правок.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Слой второй: fail2ban против перебора

fail2ban читает логи и банит адреса, с которых идёт перебор, во временный или постоянный блок. Установите:

apt update
apt install fail2ban

Не правьте файл jail.conf напрямую — создайте локальный оверрайд /etc/fail2ban/jail.local:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true
port = ssh

Здесь логика такая: если с одного адреса за findtime (10 минут) набирается maxretry (5) неудачных попыток — адрес блокируется на bantime (1 час). Запустите и включите автозапуск:

systemctl enable --now fail2ban

Проверьте, что джейл работает и кого-то уже поймал:

fail2ban-client status sshd

Ужесточаем бан для настойчивых

Боты возвращаются. Чтобы не банить один и тот же адрес по кругу, включите «рецидив»: за повторные баны — длинный срок. Добавьте в jail.local:

[recidive]
enabled = true
bantime = 1w
findtime = 1d
maxretry = 3

Теперь адрес, который за сутки набрал три бана, улетает в блок на неделю. Для совсем агрессивной политики можно поднять основной bantime до 1d и снизить maxretry до 3 — но не перестарайтесь, чтобы не забанить себя при опечатке. После правок:

systemctl restart fail2ban

Разбанить свой адрес вручную, если что:

fail2ban-client set sshd unbanip ВАШ_IP

Слой третий: фаервол и смена порта SSH

Закройте всё лишнее. По умолчанию наружу должны смотреть только те порты, что реально нужны. Настройте ufw:

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Перенос SSH с порта 22 на нестандартный (например, 2222) резко снижает шум автоматических ботов — большинство сканеров стучатся только в 22. Это не защита сама по себе (порт находят сканированием), но фона в логах становится на порядок меньше. Поменяйте Port в sshd_config, откройте новый порт в ufw до перезапуска и закройте старый:

ufw allow 2222/tcp

Не забудьте обновить порт в fail2ban (port = 2222 в секции [sshd]) и подключаться теперь через ssh -p 2222.

Защита от брутфорса веб-приложений

Перебирают не только SSH, но и формы входа сайтов — WordPress, панели, почту. fail2ban умеет банить и по логам веб-сервера. Для типовой защиты Nginx включите готовые джейлы в jail.local:

[nginx-http-auth]
enabled = true

[nginx-limit-req]
enabled = true

Первый ловит перебор HTTP Basic-авторизации, второй — работает в связке с ограничением частоты запросов в Nginx (limit_req_zone), отсекая тех, кто молотит по форме входа. Для WordPress есть отдельные фильтры, реагирующие на неудачные попытки логина в wp-login.php. Логика та же: много неудач с адреса — бан.

Стоит понимать, чем перебор веб-форм отличается от перебора SSH и почему для него нужен отдельный подход. SSH — это один вход с предсказуемым логом неудачных попыток, а веб-приложение может иметь несколько точек входа: форму администратора, API, восстановление пароля, XML-RPC у WordPress. Боты бьют по всем сразу, и каждая точка пишет в свой формат лога. Поэтому для веба важно не только включить готовые джейлы, но и убедиться, что fail2ban читает правильные файлы логов вашего сайта — путь к ним задаётся параметром logpath в настройках джейла. Если путь указан неверно, джейл включён, но никого не ловит, создавая ложное чувство защищённости. После настройки обязательно спровоцируйте несколько неудачных входов и проверьте статусом джейла, что адрес действительно попал в бан — только так вы убедитесь, что защита веб-формы реально работает, а не просто числится включённой.

Держим защиту в тонусе

Защита не «поставил и забыл». Несколько привычек, которые закрывают остаток рисков. Включите автоматические обновления безопасности, чтобы дыры в SSH и веб-ПО закрывались сами:

apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

Раз в неделю поглядывайте, кого банит fail2ban и не появились ли новые типы атак:

fail2ban-client status

И держите список открытых портов минимальным — каждый лишний сервис наружу это новая цель для перебора. Комбинация «вход по ключу + fail2ban + фаервол + обновления» отражает практически весь автоматический брутфорс, с которым сталкивается обычный сервер.

Настроив эти слои один раз, вы превращаете сервер из лёгкой мишени в крепкий орешек, который боты бросают после первых банов. Такой VPS с чистым белым IP в MAATRIX можно оплатить картой российского банка, по СБП или криптой — без иностранной карты.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Достаточно ли одного fail2ban?

Он сильно снижает риск, но лучший эффект даёт связка: вход по SSH-ключу (перебор паролей теряет смысл), fail2ban против перебора, фаервол и обновления безопасности.

Не забанит ли fail2ban меня самого?

Может, при нескольких неудачных попытках. Разбаньте себя командой fail2ban-client set sshd unbanip ВАШ_IP и не задавайте слишком агрессивный maxretry.

Помогает ли смена порта SSH?

Она резко уменьшает шум ботов, которые стучатся в порт 22, но не защищает сама по себе — порт находят сканированием. Это дополнение к ключам и fail2ban, а не замена.

Как понять, что сервер сейчас брутфорсят?

Посмотрите журнал: grep "Failed password" /var/log/auth.log. Поток неудачных попыток с разных адресов и есть автоматический перебор.

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.