Як захистити SSH на VPS
Налаштуйте безпечний доступ до VPS: вимкніть root login та password authentication, використовуйте SSH keys та встановіть Fail2ban для захисту порту 22.
Чому SSH — це перше, що потрібно захистити
SSH — це спосіб керування сервером, тому він є основною ціллю для будь-якої атаки. Як тільки VPS з'являється в мережі, сканери починають підбирати username та password на port 22. Ви можете побачити це у своїх logs вже за кілька хвилин. Захист SSH полягає у виключенні можливостей для підбору: повністю вимкніть password login, вимкніть root login та дозвольте вхід лише за допомогою cryptographic keys. Після цього підбори стануть марними, оскільки пароля не існуватиме.
Це припускає, що SSH вже працює. Якщо ви можете увійти в систему, ви можете його захистити. Виконуйте кроки послідовно. Тримайте поточну сесію відкритою, доки не перевірите роботу нової сесії, щоб помилка не призвела до втрати доступу.
Step 1: Переконайтеся, що автентифікація за ключами працює
Автентифікація за ключами замінює пароль на пару ключів: приватний ключ зберігається на вашому комп'ютері, а публічний ключ розміщується на сервері. Сервер перевіряє наявність приватного ключа, при цьому сам ключ не передається на сервер. Перед вимкненням паролів переконайтеся, що ключі працюють, інакше ви втратите доступ до системи.
Якщо у вас немає ключа, створіть його на своєму комп'ютері:
ssh-keygen -t ed25519Скопіюйте публічну частину на сервер:
ssh-copy-id user@your-serverПотім відкрийте нову SSH-сесію. Якщо вхід виконано без запиту пароля, ключ працює, і ви можете безпечно вимкнути паролі. Якщо ви вперше використовуєте ключі або маєте кілька комп'ютерів, основи керування SSH-ключами пояснює принцип роботи: один ключ на кожен пристрій, необхідні права доступу для sshd та спосіб відкликання ключа у разі втрати ноутбука.
Step 2: Налаштування безпеки sshd за допомогою drop-in файлу
Не редагуйте /etc/ssh/sshd_config безпосередньо. Ubuntu 24.04 зчитує drop-in файли з /etc/ssh/sshd_config.d/. Використання невеликого файлу у цій директорії є чистішим методом, він зберігається після оновлення пакетів і його легко видалити у разі помилки. Назва має значення: sshd використовує перше прочитане значення для кожного параметра. В образах Ubuntu cloud директорія PasswordAuthentication yes містить 50-cloud-init.conf. Назвіть свій файл 00- так, щоб він сортувався раніше за оригінальний файл і мав пріоритет; файл 99- буде проігноровано. Створіть файл:
sudo nano /etc/ssh/sshd_config.d/00-hardening.confВставте цей вміст у:
# Key-only login: no passwords to guess.
PasswordAuthentication no
KbdInteractiveAuthentication no
# No direct root login. Log in as your user, then use sudo.
PermitRootLogin noКожен рядок закриває вхід для зловмисника. PasswordAuthentication no — це основний параметр: без паролів атака методом перебору (brute-force) стає неможливою. KbdInteractiveAuthentication no закриває другий шлях авторизації за допомогою пароля. PermitRootLogin no означає, що зловмисник повинен знати ваше ім'я користувача та мати ваш ключ, а не просто націлюватися на обліковий запис root, який є у кожній системі.
Step 3: Перевірка конфігурації та перезавантаження
Перевірте конфігурацію на наявність помилок перед застосуванням. Це запобігає збою сервісу через друкарську помилку:
sudo sshd -tЯкщо команда не вивела жодного повідомлення, конфігурація коректна. Перезавантажте SSH:
sudo systemctl reload sshПотім перевірте налаштування, які фактично використовує sshd. Це допоможе виявити конфлікт, якщо налаштування було перекрите іншим файлом:
sudo sshd -T | grep -Ei 'passwordauthentication|permitrootlogin'Обидва результати мають містити no. Тепер, не закриваючи поточну сесію, відкрийте нову сесію в іншому терміналі. Якщо вхід за ключем відбувся успішно, налаштування завершено. Якщо виникла помилка, ваша перша сесія залишається відкритою для виправлення. Таке дублювання сесій є засобом безпеки, тому ніколи не пропускайте цей крок.
Step 4: Необов'язковий нестандартний порт
Зміна порту SSH з 22 на 2222 не підвищує реальний рівень безпеки, оскільки цілеспрямований зловмисник сканує всі порти. Це лише зменшує кількість записів у логах, оскільки більшість автоматизованих сканерів перевіряють лише порт 22. Якщо це необхідно, додайте Port 2222 у ваш конфігураційний файл, спочатку дозвольте новий порт у firewall, потім виконайте sudo systemctl daemon-reload && sudo systemctl restart ssh.socket і підключіться за допомогою ssh -p 2222. В Ubuntu 24.04 порт прослуховування контролює ssh.socket, тому звичайний reload ssh залишає sshd на порту 22; новий порт застосовується лише після перезапуску сокета. Розглядайте це як засіб упорядкування, а не захисту.
Step 5: Додаткові рівні захисту
Надійні SSH-ключі є основою, а зверху додаються ще два рівні захисту.
Fail2ban аналізує логи та блокує адреси, які постійно роблять невдалі спроби підключення. Це зменшує кількість шуму від сканерів та блокує їх на ранніх етапах. Цей метод добре поєднується з автентифікацією лише за ключами: див. Fail2ban на Ubuntu для захисту від SSH-атак.
Ще надійнішим методом є повне вимкнення SSH у відкритому інтернеті. Якщо ви налаштуєте SSH через WireGuard VPN і обмежите доступ до port 22 лише для тунелю, користувачі поза VPN не зможуть навіть побачити цей порт. У такому разі перебір паролів стає не просто складним, а неможливим. Це передбачає використання фаєрвола з політикою "заборонено все, що не дозволено", як у налаштуванні UFW на VPS.
SSH — це лише один пункт у загальному списку перевірок: перші 10 хвилин на новому VPS визначають послідовність дій, а автоматичні оновлення безпеки на Ubuntu забезпечують актуальність патчів у майбутньому.
FAQ
Як вимкнути вхід за паролем для SSH на Ubuntu 24.04?
Створіть drop-in файл за шляхом /etc/ssh/sshd_config.d/00-hardening.conf (префікс 00 дозволяє йому сортуватися перед 50-cloud-init.conf, чий параметр PasswordAuthentication yes мав би пріоритет, оскільки sshd використовує перше прочитане значення), що містить PasswordAuthentication no та KbdInteractiveAuthentication no. Виконайте sudo sshd -t для перевірки, а потім sudo systemctl reload ssh. Перед тим як покладатися на цей метод, підтвердьте роботу входу за ключем у новій сесії. Редагування drop-in файлу замість sshd_config дозволяє зберегти налаштування після оновлення пакетів і дозволяє легко скасувати зміни.
Чи варто вимикати вхід для root через SSH?
Так. Встановіть PermitRootLogin no, щоб ніхто не міг увійти безпосередньо як root. Використовуйте звичайного користувача та команду sudo для адміністрування. Користувач root є у кожної Linux-системи, тому доступ до нього надає зловмиснику відоме ім'я користувача для атаки. Вимкнення доступу означає, що зловмисник повинен знати ваше ім'я користувача та мати ваш ключ.
Чи робить зміна порту SSH сервер безпечнішим?
Це не дає значного ефекту. Перехід з порту 22 приховує вас від простих сканерів, які перевіряють лише 22 порт, що зменшує кількість зайвих записів у логах. Проте реальний зловмисник просканує всі порти та все одно знайде його. Саме автентифікація лише за ключами реально зупиняє зломи. Якщо ви змінюєте порт, спочатку відкрийте новий порт у firewall, а потім виконайте sudo systemctl daemon-reload && sudo systemctl restart ssh.socket; в Ubuntu 24.04 сокет керує прослуховуванням, тому звичайний reload залишить sshd на порту 22.
Чи потрібен Fail2ban, якщо я використовую SSH-ключі?
Це необов'язково, але все ще корисно. При автентифікації лише за ключами підбір пароля неможливий, тому Fail2ban не є основним засобом захисту від зловмисників. Він обмежує кількість спроб після повторюваних помилок з однієї адреси, що очищує логи від шуму сканерів та блокує порушників. Повільна розподілена атака все одно залишається нижче порогу блокування. Використовуйте його разом із ключами, і в ідеалі тримайте SSH за VPN.
Як відновити доступ, якщо я заблокував собі SSH?
Використовуйте веб-консоль вашого провайдера. Вона забезпечує доступ до сервера через serial або VNC з'єднання, які не залежать від SSH. Через неї ви зможете увійти, виправити drop-in файл sshd та перезавантажити службу. Саме тому потрібно перевіряти новий конфіг SSH у другому терміналі перед закриттям поточної сесії, і саме тому автентифікація за ключами має працювати ще до того, як ви вимкнете паролі.