Базовая защита сервера: ssh, фаервол, fail2ban
Прежде чем ставить панель и ноды, сервер надо закрыть. Это база, которую я прогоняю на каждом свежем VPS за пять минут: фаервол, ssh по ключу, fail2ban. Без неё любой чистый сервер за сутки собирает тысячи попыток брутфорса из интернета.
Свежий VPS с белым IP — это не «чистый лист», а сервер, который уже через час начнут сканировать и перебирать. Базовая защита — это три фронта: фаервол (что вообще торчит наружу), ssh (как ты заходишь) и fail2ban (что делать с теми, кто ломится). Прогоняем по порядку.
Фаервол: закрыть всё лишнее
Правило простое — по умолчанию запрещаем входящее, открываем только то, что реально нужно. На Ubuntu/Debian это ufw:
ufw default deny incoming # всё входящее — закрыто
ufw default allow outgoing # исходящее — свободно
ufw allow 22/tcp # SSH
ufw allow 443/tcp # рабочий порт inbound
ufw --force enableНа ноде добавляется правило под порт демона, открытый только для IP панели:
# порт демона ноды — принимаем только с сервера панели
ufw allow from PANEL_IP to any port 2222 proto tcpСмысл в том, чтобы наружу торчал минимум. Всё внутреннее — панель, БД, страница подписки — слушает 127.0.0.1 и не видно из интернета. Меньше открытых портов — меньше поверхность атаки.
SSH: только по ключу
Пароль на ssh брутфорсят круглосуточно. Переводим вход на ключ и вырубаем пароль совсем.
Сначала на своей машине заводим ключ (если ещё нет) и копируем на сервер:
# на СВОЁМ компьютере
ssh-keygen -t ed25519 -C "server-admin"
ssh-copy-id root@SERVER_IPТеперь на сервере отключаем парольный вход и рутовый логин по паролю:
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
systemctl restart sshКритично: проверь вход по ключу в новом окне терминала, не закрывая текущую сессию. Если что-то пошло не так с ключом, а пароль ты уже выключил, — запрёшь себя снаружи, и придётся лезть в консоль хостера.
fail2ban: банить перебор автоматически
Даже с выключенным паролем лог забивается попытками входа. fail2ban читает лог и временно банит тех, кто ломится:
apt -y install fail2ban
cat >/etc/fail2ban/jail.d/local.conf <<'EOF'
[sshd]
enabled = true
maxretry = 4
bantime = 1h
findtime = 10m
EOF
systemctl enable --now fail2banЛогика правил: четыре неудачных попытки за десять минут — бан на час. Значения можно ужесточить, но не увлекайся: слишком агрессивный бан рискует отрезать тебя самого при опечатке.
Проверить, что fail2ban живой и кого-то уже ловит:
# статус джейла и список забаненных IP
fail2ban-client status sshdДержать систему свежей
Половина взломов — это не хитрые атаки, а непропатченные дыры в старом софте. Регулярное обновление закрывает их бесплатно:
apt update && apt -y upgradeНа проде имеет смысл включить автоматические security-обновления (unattended-upgrades), чтобы критичные патчи прилетали без твоего участия. Ноду и панель обновляй отдельно, читая их changelog.
Чеклист
- [ ] ufw включён, по умолчанию deny incoming.
- [ ] Наружу открыты только нужные порты, внутреннее — на
127.0.0.1. - [ ] Порт демона ноды открыт только для IP панели.
- [ ] SSH по ключу, пароль и рутовый парольный вход выключены.
- [ ] fail2ban поднят и ловит перебор.
- [ ] Система обновлена, автопатчи включены.
Это фундамент под любой сервер сервиса. Дальше, когда на нём стоит панель, её закрывают отдельным слоем — reverse-proxy, allowlist, скрытый сабдомен — про это в статье «Харднинг панели: закрываем доступы».
Следующий гайд Детект шеринга ключей: как ловят раздачу → ↗ Не понравилась статья или что-то непонятно? Напишите мне — помогу или поправлю. @notrealvpn →