Захист сервера 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>. - Увійти неможливо взагалі. Останній варіант — перевстановлення з кабінету, воно стирає диск. Резервні копії — ваша відповідальність, тож тримайте копії даних деінде.