Почему это важно
Любой публичный VPS брутфорсят и сканируют 24/7 — это начинается через минуты после поднятия. Дефолтные настройки, вход по паролю и работа под root превращают одну дыру в полный захват машины: майнеры, спам, бот-нет, кража данных и удаление бэкапов.
Живой сценарий. Подняли сервер, оставили SSH на 22-м порту с парольным входом под root. За ночь боты перебрали слабый пароль, зашли root-ом, поставили майнер и зачистили логи. CPU в полке, сервер в чёрных списках, восстановление — с нуля. Пять минут базовой настройки это бы предотвратили.
Что делать (по шагам)
- Отдельный пользователь с sudo вместо работы под root:
adduser deploy && usermod -aG sudo deploy
- Вход по SSH-ключам, пароль отключить:
ssh-copy-id deploy@SERVER # сначала залить свой ключ
# в /etc/ssh/sshd_config:
# PasswordAuthentication no
# PermitRootLogin no
sudo systemctl restart ssh
- Firewall: закрыть всё лишнее, открыть только нужное:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH # 22
sudo ufw allow 80,443/tcp # web
sudo ufw enable
- fail2ban против перебора:
sudo apt install fail2ban -y && sudo systemctl enable --now fail2ban
- Регулярные обновления безопасности (можно автоматом):
sudo apt update && sudo apt upgrade -y
sudo apt install unattended-upgrades -y # авто security-апдейты
- БД и админки — не на публичный IP: слушай
127.0.0.1/приватную сеть, доступ через SSH-туннель/VPN.
Чего НЕ делать
- Не работай и не запускай сервисы под
rootбез необходимости. - Не оставляй вход по паролю и
PermitRootLogin yes. - Не вешай PostgreSQL/Redis/Mongo/админки на
0.0.0.0без firewall. - Не забивай на обновления — непропатченный сервис ломают по известному CVE.
- Не открывай порты «про запас» — каждый открытый порт это поверхность атаки.
Как проверить себя
-
sudo ufw statusпоказывает только нужные порты, остальное — deny. - Парольный вход и root-логин по SSH отключены; захожу по ключу.
- Работаю под отдельным sudo-пользователем, не под root.
- fail2ban активен; авто-обновления безопасности включены.
- БД/Redis/админки не торчат на публичном IP (проверил
ss -tlnp).
Инструменты
- Firewall: ufw, firewalld, nftables.
- Защита от перебора: fail2ban, CrowdSec.
- SSH/доступ: ключи ed25519, Tailscale/WireGuard для приватного доступа к админкам/БД.
- Аудит: Lynis (хардненинг-скан), ss/nmap для проверки открытых портов.
- Авто-обновления: unattended-upgrades (Debian/Ubuntu), dnf-automatic (RHEL).