Перейти до вмісту
Початок роботи · 6 хв

Захист сервера Ubuntu і Debian: перші 15 хвилин на новому VPS

Щоб захистити новий 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: там журнали пишуться в journald, а /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

Захист сервера Ubuntu і Debian: перші 15 хвилин на новому VPS · dedisrv