Перейти к содержимому
Начало работы · 6 мин

Настройка безопасности VPS: первые 15 минут на Ubuntu и Debian

Чтобы защитить новый VPS, обновите систему, заведите пользователя с sudo, входите по SSH-ключу, отключите вход по паролю и под root, откройте в ufw только нужные порты, а перебор паролей и патчи безопасности доверьте fail2ban и unattended-upgrades. На Ubuntu 24.04 или Debian 12 это занимает около 15 минут, и сделать это стоит до установки всего остального.

Что понадобится

  • Любой тариф VPS с Ubuntu 24.04 или Debian 12. Чек-лист одинаков для Pulse (2 vCPU, 2 ГБ, $10 в месяц) и для Titan, да и для выделенного сервера тоже.
  • IP-адрес и пароль root из кабинета и первый вход, как описано в статье о подключении по SSH.

Не закрывайте первую сессию под root до самого конца. Это ваш путь назад, если какой-то шаг пойдёт не так.

1. Обновите систему

apt update && apt full-upgrade -y
[ -f /var/run/reboot-required ] && reboot

Если обновилось ядро, сервер перезагрузится. Зайдите снова под root.

2. Создайте пользователя с sudo

apt install -y sudo
adduser deploy
usermod -aG sudo deploy

deploy — просто пример имени. В образах Debian sudo может не быть, поэтому первая строка.

3. Вход по ключу

На своём компьютере (не на сервере):

ssh-keygen -t ed25519
ssh-copy-id deploy@203.0.113.10
ssh deploy@203.0.113.10
sudo whoami

Последняя команда должна вывести root. Продолжайте, только когда вход по ключу и sudo работают в новом окне.

4. Отключите вход по паролю и под root

cat > /etc/ssh/sshd_config.d/00-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF
sshd -t && systemctl restart ssh
sshd -T | grep -Ei 'permitrootlogin|passwordauthentication'

sshd берёт первое найденное значение, а файлы в sshd_config.d/ читает по алфавиту. Префикс 00- гарантирует, что ваш файл победит остальные, например 50-cloud-init.conf, который может снова включить вход по паролю. Последняя команда должна показать no для обоих параметров.

5. Файрвол ufw

apt install -y ufw
ufw allow 22/tcp
ufw enable
ufw status verbose

По умолчанию ufw блокирует входящий трафик и разрешает исходящий. Остальные порты открывайте по мере надобности, например ufw allow 80,443/tcp для сайта. Если пользуетесь Docker, прочитайте про ловушку с ufw: опубликованные порты контейнеров обходят эти правила.

6. fail2ban против перебора

apt install -y fail2ban python3-systemd
cat > /etc/fail2ban/jail.local <<'EOF'
[sshd]
enabled = true
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
EOF
systemctl restart fail2ban
fail2ban-client status sshd

backend = systemd важен на Debian 12: там логи пишутся в журнал, а /var/log/auth.log по умолчанию нет. При входе только по ключу перебор и так не сработает, но fail2ban держит логи чистыми, а ботов — подальше.

7. Автоматические обновления безопасности

apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
unattended-upgrade --dry-run --debug | tail -n 5

В диалоге ответьте «Yes». После этого обновления безопасности ставятся ежедневно. Сам сервер не перезагружается: чтобы разрешить это, задайте Unattended-Upgrade::Automatic-Reboot "true"; в /etc/apt/apt.conf.d/50unattended-upgrades.

8. Защитите и аккаунт

Тот, кто попал в ваш аккаунт, может оттуда переустановить сервер или сбросить пароль root. Включите для аккаунта двухфакторную аутентификацию и храните коды восстановления не на телефоне.

Частые ошибки

  • Нет доступа после шага 4. Обычно ключ скопировали для root, а не для нового пользователя, или взяли не тот файл .pub. Исправьте из сессии root, которую оставили открытой.
  • ufw enable раньше ufw allow 22/tcp. Текущая сессия живёт, новые не подключаются. Разрешите SSH из этой сессии.
  • Забанили сами себя. fail2ban-client set sshd unbanip <ваш IP>.
  • Войти нельзя совсем. Последний вариант — переустановка из кабинета, она стирает диск. Резервные копии — ваша задача, так что держите копии данных в другом месте.

Заказать VPS

Настройка безопасности VPS: первые 15 минут на Ubuntu и Debian · dedisrv