Як налаштувати безпеку нового VPS за 10 хвилин
Покрокова інструкція з захисту сервера: створення користувача sudo, налаштування SSH keys, вимкнення root та конфігурація firewall для захисту від ботів.
Перші 10 хвилин визначають безпеку вашого сервера
Новий VPS не є безпечним. З моменту отримання публічної IP-адреси сканери намагаються здійснити вхід, а стандартний образ створює для них легку ціль: користувач root часто доступний, паролі часто дозволені, фаєрволу немає, нічого не оновлюється за розкладом. Хороша новина полягає в тому, що закриття всіх цих вразливостей займає близько десяти хвилин і кілька команд. Це інструкція (runbook), яку я виконую на кожному новому сервері перед тим, як розміщувати на ньому будь-які дані.
Виконуйте кроки послідовно, оскільки кожен наступний крок базується на попередньому. Кожен крок має власний посібник, посилання на який надається далі; ця сторінка є швидким шляхом, що об'єднує їх.
Хвилина 1: Оновіть все
Увійдіть під користувачем root за допомогою облікових даних, наданих вашим провайдером, і повністю оновіть систему перед будь-якими іншими діями:
apt update && apt upgrade -yНеонова система без патчів — найлегша ціль, тому це виконується першим. Після завершення налаштуйте автоматичні оновлення безпеки, щоб система залишалася захищеною без вашої участі.
Хвилина 2: Створіть звичайного користувача з sudo
Не продовжуйте роботу під root. Створіть користувача для себе та надайте йому права sudo:
adduser matt
usermod -aG sudo mattВідтепер ви входите під цим користувачем і використовуєте sudo для адміністративних завдань. Постійна робота під root означає, що будь-яка помилка або компрометація відбуватиметься з необмеженими правами, що саме і має запобігати робота під непривілегованим користувачем.
Хвилина 4: Налаштуйте SSH-ключі
Паролі можна підібрати; ключі — ні. На своєму ноутбуці, якщо у вас ще немає ключа, створіть його:
ssh-keygen -t ed25519Потім скопіюйте публічну частину на сервер:
ssh-copy-id matt@YOUR_SERVERДля нового користувача ssh-copy-id має бути увімкнено вхід за паролем; якщо він уже вимкнений, скопіюйте ~/.ssh/authorized_keys користувача root у /home/matt/.ssh/authorized_keys (власником якого є matt) або вставте ваш публічний ключ у цей файл вручну.
Модель, за якою працює цей крок (один ключ на пристрій), права доступу, що блокують вхід за ключем, та відкликання втраченого ключа, описані в Основи керування SSH-ключами.
Вийдіть із системи та увійдіть знову під matt за допомогою ключа, і переконайтеся, що він працює, перш ніж переходити до наступного кроку. Блокування SSH до того, як ви зможете увійти за ключем — це спосіб самостійно заблокувати собі доступ.
Хвилина 6: Вимкніть вхід для root та вхід за паролем
Тепер, коли ваш ключ працює, закрийте два канали, якими користуються сканери. Використовуйте окремий файл конфігурації (drop-in file), щоб оновлення пакетів не перезаписали налаштування. Назвіть його 00-, щоб він сортувався перед 50-cloud-init.conf, який постачається в cloud-образах Ubuntu з PasswordAuthentication yes; sshd використовує перше прочитане значення, тому файл, що сортується пізніше, буде проігноровано:
sudo nano /etc/ssh/sshd_config.d/00-hardening.confPasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin noПотім перезавантажте SSH:
sudo systemctl restart sshПотім перевірте налаштування, які насправді використовує sshd, щоб помилковий файл конфігурації не ввів вас в оману:
sudo sshd -T | grep -Ei 'passwordauthentication|permitrootlogin'Коли паролі вимкнено, а вхід для root заборонено, постійний brute-force трафік проти вашого сервера просто не зможе бути успішним. Повний перелік заходів, включаючи опціональну зміну порту, наведено в Посилення безпеки SSH на VPS.
Хвилина 8: Увімкніть фаєрвол
Заблокуйте за замовчуванням усі вхідні з'єднання, а потім дозвольте лише необхідне. Дозвольте SSH до того, як увімкнете фаєрвол, інакше ви розірвете власне з'єднання:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enableДодайте правила allow для будь-якої служби, яку ви запускаєте, наприклад, 80/tcp та 443/tcp для вебсайту. Переконайтеся, що охоплено як IPv4, так і IPv6, оскільки фаєрвол, що фільтрує лише IPv4, залишає сторону IPv6 повністю відкритою. Повний посібник — Основи фаєрволів на VPS.
Хвилина 10: Сповільніть сканери за допомогою Fail2ban
Нарешті, додайте Fail2ban, щоб блокувати адреси, які атакують ваші порти:
sudo apt install -y fail2banВ Ubuntu 24.04 стандартне встановлення захищає SSH з першого запуску. Оскільки ключі вже є обов'язковими, це слугує додатковим захистом, який зменшує шум у логах і блокує порушників, а не основним методом захисту.
Ваш чек-лист
Це і є інструкція. Використовуйте генератор нижче, щоб позначити кожен контроль і створити персоналізований чек-лист, який можна зберігати разом із сервером, включаючи точну команду для кожного кроку:
Виконуйте це один раз для кожного нового сервера, і це стане навичкою. Десять хвилин зараз позбавлять вас дуже поганого дня, який настане після компрометації сервера.
Коли основні налаштування завершено, автоматичні оновлення безпеки на Ubuntu підтримуватимуть актуальність сервера без вашого входу.
FAQ
Що мені зробити насамперед на новому VPS?
Оновіть систему за допомогою apt update && apt upgrade -y, потім створіть звичайного користувача з sudo і припиніть роботу під root. Після цього налаштуйте SSH-ключі, вимкніть вхід для root та автентифікацію за паролем, увімкніть фаєрвол за принципом "заборонено все, що не дозволено" та встановіть Fail2ban. Виконання цих дій у такому порядку гарантує безпеку кожного кроку без ризику втрати доступу.
Як уникнути блокування власного доступу під час посилення безпеки SSH?
Налаштуйте та протестуйте вхід за SSH-ключем перед тим, як вимикати паролі або root. Вийдіть із системи та увійдіть знову за допомогою ключа, щоб підтвердити його роботу, і лише після цього вимкніть PasswordAuthentication та PermitRootLogin. Коли увімкнете фаєрвол, спочатку дозвольте порт 22, перш ніж запускати ufw enable. Якщо ви все ж таки втратите доступ, веб-консоль вашого провайдера дозволить вам увійти без SSH.
Чи справді мені потрібні всі ці налаштування на маленькому сервері?
Так, тому що сканерам байдуже, наскільки малий ваш сервер. Вони атакують кожну публічну IP-адресу однаково. Весь процес займає близько десяти хвилин і усуває найпростіші шляхи атаки: без входу під root, без підбору паролів, без незапланованих відкритих портів та з автоматичним виправленням відомих помилок.
Який крок є найважливішим?
SSH тільки за ключами з вимкненим входом для root. Більшість атак на новий VPS — це автоматизований підбір паролів до root; вимкнення обох функцій робить цей тип атак неможливим. Фаєрвол та Fail2ban потім обмежують те, що залишається доступним, і сповільнюють будь-які інші спроби.
Як переконатися, що сервер дійсно захищений?
Перевірте три речі вручну, перш ніж довіряти серверу. Запустіть sudo ss -tlnp і переконайтеся, що лише потрібні вам порти прослуховують публічну адресу, і що немає жодної служби 0.0.0.0 або [::], про яку ви забули. Запустіть sudo ufw status verbose і переконайтеся, що стандартна політика вхідних з'єднань — deny, а також що присутні правила для звичайного трафіку та (v6). І завжди відкривайте другу SSH-сесію перед тим, як закрити першу, щоб помилка в конфігурації SSH не заблокувала вам доступ до сервера. Якщо всі три пункти правильні, базовий захист встановлено.