Найкращі практики захисту Windows SSH сервера
SSH-сервер відкриває доступ до віддаленого управління сервером, дозволяє адмініструвати системи та обмінюватися даними. Але наскільки безпечно використовувати цей інструмент?
Доступ по SSH є одним з найбільш популярних способів підключення до серверів, та разом з цим він залишається привабливою ціллю для кіберзлочинців. Захист SSH-сервера — це не просто технічний нюанс, а необхідність для всіх, хто прагне захистити свої дані та уникнути неприємних сюрпризів. У цій статті ми зосередимося на найкращих практиках захисту Windows SSH сервера.
Інструкція, як отримати доступ по SSH
Чому потрібно захищати SSH-сервер?
Попри високий рівень безпеки протоколу SSH, сам сервер може бути вразливим через неправильні налаштування або слабкі паролі.
Основні причини захисту:
- захист від брутфорс-атак, коли зловмисники підбирають паролі;
- уникнення несанкціонованого доступу до критично важливих систем;
- запобігання використанню сервера як точки доступу для атак на інші системи.
Найкращі методи захисту Windows SSH Server
1. Використання ключів замість паролів
Один з найефективніших способів захисту SSH-серверу – це перехід на ключову аутентифікацію замість використання паролів. Ключі складніше вгадати, і це значно знижує ризик брутфорс-атак. Для цього необхідно виконати декілька кроків, а саме:
- згенеруйте пару ключів (публічний та приватний);
- додавайте публічний ключ до сервера, а приватний зберігайте на клієнтському комп’ютері.
Зверніть увагу! Для підключення до вашого Windows VPS через SSH за допомогою ключів, ключі потрібно генерувати на вашому локальному комп’ютері, а не на самому сервері.
Якщо у вас встановлений OpenSSH-клієнт (вбудований у сучасні версії Windows 10/11), ви можете створити ключі безпосередньо в PowerShell.
Виконайте команду для створення ключів:
# ssh-keygen -t rsa -b 4096
Укажіть шлях для збереження ключів (або натисніть Enter, щоб використовувати стандартний шлях C:\Users\Ваш_користувач\.ssh\id_rsa). За бажанням задайте пароль для захисту приватного ключа (або залиште поле порожнім, натиснувши Enter).
У результаті створяться два файли:
- приватний ключ: id_rsa (нікому не передавайте!);
- публічний ключ: id_rsa.pub (його потрібно завантажити на сервер).
Тепер, коли ви маєте пару ключів, вам потрібно передати публічний ключ на ваш Windows VPS. Для цього виконайте наступні кроки.
Крок 1. Підключіться до сервера за допомогою пароля
Спочатку вам потрібно підключитися до вашого сервера за допомогою звичайного пароля (до того, як ви налаштуєте ключі):
# ssh Administrator@IP_вашего_VPS
Крок 2. Створіть директорію .ssh на сервері
Після підключення до сервера створіть папку .ssh в домашній директорії користувача Administrator:
# mkdir $HOME\.ssh
Крок 3. Додайте публічний ключ в authorized_keys
Відкрийте файл authorized_keys, де будуть зберігатися дозволені публічні ключі для входу:
# notepad $HOME\.ssh\authorized_keys
Ця команда відкриває текстовий редактор, у якому потрібно вставити вміст вашого публічного ключа. Відкрийте на вашому локальному комп’ютері файл id_rsa.pub, скопіюйте вміст і вставте його в редактор на сервері. Збережіть файл.
Крок 4. Перевірте права доступу
Переконайтеся, що у файлу authorized_keys правильні права доступу:
# icacls $HOME\.ssh\authorized_keys /inheritance:r /grant:r Administrator:F
Тепер ви можете спробувати підключитися до вашого сервера через SSH, і він повинен використовувати ключ для аутентифікації замість пароля.
2. Вимкнення входу через пароль
Якщо ви хочете дозволити підключення тільки через ключі (без паролів), вам потрібно відредагувати конфігурацію SSH-сервера на вашому Windows VPS. Відкрийте файл sshd_config, який міститься за шляхом C:\ProgramData\ssh\sshd_config, і змініть або додайте такі параметри:
# PasswordAuthentication no
# PubkeyAuthentication yes
Потім перезапустіть службу SSH, щоб зміни почали діяти:
# Restart-Service sshd
Ці кроки дозволять вам безпечно вимкнути вхід через пароль і перейти на автентифікацію лише за ключами.
3. Зміна стандартного порту
Стандартний порт SSH — 22. Більшість ботів і зловмисників автоматично сканують сервери саме на цьому порту для підбору паролів або ключів. Зміна стандартного порту на нестандартний значно ускладнює такі атаки, адже ваш сервер буде менш помітний для автоматизованих сканерів.
Важливо зауважити! Переконайтеся, що обраний порт не використовується іншими програмами на сервері. Ви можете перевірити це за допомогою команди PowerShell:
# netstat -ano | findstr :<порт>
Тобто, якщо ви хочете змінити порт на 2222, необхідно для перевірки спочатку виконати наступну команду:
# netstat -ano | findstr :2222
Якщо ви не отримаєте ніякого результату – це означатиме, що порт вільний та не використовується іншими службами. Якщо ж порт уже використовується, ви отримаєте приблизний результат, який наведено на скриншоті:
Для зміни стандартного порту на інший вам необхідно буде виконати декілька кроків.
Крок 1. Відкрийте файл конфігурації SSH
Виконайте команду в PowerShell для відкриття файлу конфігурації sshd_config в текстовому редакторі:
# notepad 'C:\ProgramData\ssh\sshd_config'
Крок 2 . Змініть стандартний порт
У файлі знайдіть рядок, що починається зі слова Port. Якщо цього рядка немає, додайте його вручну. Вкажіть бажаний порт, наприклад, Port 2222.
Зверніть увагу! Переконайтеся, що рядок не коментується символом #.
Збережіть файл (натисніть Ctrl + S) і закрийте редактор.
Крок 3. Відкрийте порт у брандмауері Windows
Тепер необхідно відкрити порт у брандмауері Windows, щоб SSH-з’єднання могло працювати на новому порту. У PowerShell введіть команду для створення правила брандмауера, яке дозволить вхідні з’єднання на зазначений порт.
# New-NetFirewallRule -DisplayName «SSH New Port» -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow
де 2222 – це ваш обраний порт.
Щоб перевірити, чи було успішно створено правило брандмауера для нового порту в Windows, можна скористатися командою PowerShell:
# Get-NetFirewallRule | Where-Object DisplayName -eq «SSH New Port»
Ця команда виконує пошук усіх правил брандмауера, у яких ім’я відображення (DisplayName) відповідає “SSH New Port”. Якщо правило було створено, ви побачите деталі цього правила, включно з його статусом, напрямком (Inbound), дією (Allow) та іншими параметрами.
Крок 4. Перезавантажте службу SSH
Тепер потрібно перезапустити службу SSH, щоб зміни в конфігурації набрали чинності. У PowerShell виконайте команду для перезапуску служби sshd.
# Restart-Service sshd
Це дозволить серверу SSH почати слухати новий порт. Для перевірки роботи на новому порту виконайте команду:
# netstat -ano | findstr :2222
де 2222 – це ваш обраний порт.
Якщо все налаштовано правильно, команда покаже, що порт прослуховується. Тепер ви можете підключатися до SSH за новим портом. Якщо ви використовуєте клієнт SSH, не забудьте вказати новий порт під час підключення.
Тепер зловмисникам доведеться витратити більше часу на пошук вашого нестандартного порту. Це не єдиний захист, але дає додатковий рівень безпеки (зокрема, у поєднанні з іншими методами, такими як ключі SSH або блокування IP).
4. Обмеження доступу за IP-адресами
Обмеження доступу до SSH-сервера за IP-адресами є одним з найчастіше використовуваних безпекових заходів для сервера. Ви можете дозволити доступ до сервера лише з певних, довірених IP-адрес і водночас зменшити кількість потенційно небезпечних IP, які можуть підключитися до вашого SSH сервера.
Ви можете використовувати брандмауер Windows для обмеження доступу. Для цього потрібно створити правило брандмауера, яке дозволяє підключення до SSH-сервера лише з конкретних IP-адрес або діапазонів адрес.
Відкрийте PowerShell з правами адміністратора та створіть правило, яке дозволить підключення лише з певної IP-адреси:
# New-NetFirewallRule -DisplayName «Allow SSH from Specific IP» -Direction Inbound -Protocol TCP -LocalPort 2222 -RemoteAddress 111.111.111.111.111 -Action Allow
Це правило дозволяє доступ до порту 2222 тільки з IP-адреси 111.111.111.111. Додатково перевірити це налаштування можна через графічний інтерфейс.
Важливо зауважити! Дізнатися свою IP-адресу ви можете за посиланням – https://2ip.ua/ua/.
Якщо ви хочете дозволити доступ з кількох IP-адрес або з діапазону адрес, додайте їх до списку RemoteAddress через кому. Наприклад:
# New-NetFirewallRule -DisplayName «Allow SSH from Trusted IPs» -Direction Inbound -Protocol TCP -LocalPort 2222 -RemoteAddress 111.111.111.111.111, 111.111.111.111.111 -Action Allow
Це дозволить підключення з декількох вказаних IP-адрес.
Щоб забезпечити максимальний захист, можна додати правило для блокування доступу з усіх інших IP-адрес після того, як дозволено доступ з довірених IP:
# New-NetFirewallRule -DisplayName «Block SSH from All Other IPs» -Direction Inbound -Protocol TCP -LocalPort 2222 -RemoteAddress Any -Action Block
Це правило блокуватиме всі з’єднання до SSH-сервера, крім тих, що вказані в правилах “Allow”.
Таким чином, обмеження доступу за IP-адресами забезпечує доступ лише з певних IP, тим самим зменшуючи кількість можливих атак на сервер. Завдяки цьому легко контролювати, хто може підключатися до сервера SSH, і гарантувати, що доступ мають тільки авторизовані користувачі.
Однак, якщо ви працюєте в мережі, де IP-адреси можуть змінюватися (наприклад, динамічні IP в інтернет-підключеннях), вам може знадобитися часто оновлювати правила брандмауера. Ви повинні уважно стежити за IP-адресами, щоб випадково не заблокувати себе або авторизованих користувачів.
5. Налаштування інтервалу часу бездіяльності
Idle Timeout (час очікування бездіяльності) – це механізм або параметр, який визначає, скільки часу може тривати з’єднання без активності, після чого воно автоматично буде закрите або розірване.
Наприклад, якщо ви підключаєтеся до сервера через SSH і не вводите команд протягом визначеного часу (наприклад, 15 хвилин), з’єднання може автоматично закритися. Це допомагає уникнути ситуацій, коли відкриті SSH-сеанси залишаються активними без нагляду.
Щоб налаштувати інтервал часу бездіяльності (Idle Timeout) для SSH-сервера на Windows, вам слід змінити параметри конфігурації SSH-сервера. Відкрийте файл конфігурації sshd_config за допомогою текстового редактора або використовуйте наступну команду:
# notepad C:\ProgramData\ssh\sshd_config
У файлі sshd_config знайдіть або додайте наступні рядки для налаштування Idle Timeout:
ClientAliveInterval — це інтервал у секундах, після якого сервер надішле повідомлення клієнту, щоб перевірити його активність. Якщо ви хочете, щоб сервер перевіряв клієнтську активність кожні 5 хвилин (300 секунд), вкажіть наступне:
# ClientAliveInterval 300
ClientAliveCountMax — це кількість таких перевірок, після яких, якщо клієнт не відповідає, з’єднання буде закрито. Наприклад, якщо ви хочете дозволити 3 спроби перевірки перед відключенням:
# ClientAliveCountMax 3
Таким чином, з’єднання буде автоматично закрите після 15 хвилин бездіяльності (3 спроби по 5 хвилин).
Після зміни файлу конфігурації потрібно перезапустити службу SSH для застосування нових налаштувань, тобто в PowerShell введіть команду:
# Restart-Service -Name sshd
Ви можете перевірити, чи працюють нові налаштування, підключившись до сервера через SSH та перевіривши, чи відбувається розрив з’єднання після заданого часу бездіяльності.
6. Резервне копіювання файлу конфігурації SSH на Windows
Резервне копіювання файлу конфігурації SSH є важливою частиною адміністративної практики, особливо на серверах, де SSH використовується для віддаленого доступу. Це дозволяє забезпечити безпеку та стабільність системи в разі будь-яких змін або помилок, а також є необхідним кроком у збереженні працездатності сервера після оновлень або некоректних налаштувань.
Конфігураційний файл sshd_config на сервері визначає, як саме SSH буде працювати. Він включає:
- Порти і адреси: вказується, на яких портах і IP-адресах сервер буде приймати з’єднання.
- Методи аутентифікації: визначає, чи дозволяти аутентифікацію за паролем, чи тільки за допомогою ключів.
- Обмеження доступу: встановлюються правила доступу для певних користувачів або груп.
- Таймаути: визначає час, після якого з’єднання буде автоматично закрите, якщо немає активності.
Цей файл є основним елементом для налаштування та безпеки сервера, і його коректне налаштування має критичне значення для безпечної роботи вашого сервера.
Щоб вручну створити копію, перейдіть до директорії, де зберігається конфігураційний файл sshd_config. Для цього відкрийте Провідник Windows або Командний рядок (Cmd), і перейдіть до наступної директорії:
# C:\ProgramData\SSH\
Важливо зауважити! Директорія ProgramData є прихованою, тому вам потрібно ввімкнути відображення прихованих файлів у налаштуваннях Провідника або вручну перейти до цієї директорії через командний рядок.
Щоб створити резервну копію файлу конфігурації, можна просто скопіювати його в інше місце на комп’ютері (наприклад, на робочий стіл). Або виконати наступну команду через PowerShell:
# copy C:\ProgramData\SSH\sshd_config C:\Users\Administrator\Desktop\sshd_config.bak
Так резервна копія файлу буде збережена на вашому робочому столі.
Якщо вам потрібно відновити конфігурацію з резервної копії, просто скопіюйте її назад в оригінальне місце. Після відновлення конфігураційного файлу потрібно перезапустити службу SSH, щоб зміни набрали чинності.
7. Обмеження доступу для користувачів з адміністративними правами
Обліковий запис root на сервері має повний доступ до системи. Це дозволяє виконувати будь-які операції, включаючи зміну важливих системних файлів і налаштувань. Якщо зловмисник отримає доступ до root-акаунту, він зможе виконати будь-які шкідливі дії, що значно підвищує ризик компрометації сервера.
Заборона доступу для root (або для адміністратора в Windows) на SSH-сервері Windows здійснюється за допомогою налаштування параметра PermitRootLogin у файлі sshd_config і перезапуску служби SSH. Для заборони відкрийте файл sshd_config:
# notepad C:\ProgramData\SSH\sshd_config
Додайте або змініть наступний рядок:
# PermitRootLogin no
Це заборонить прямий доступ до root через SSH. Після змін перезапустіть службу SSH для їх застосування:
# Restart-Service sshd
Це допоможе уникнути потенційних проблем з безпекою, оскільки доступ до серверу з правами адміністратора буде обмежений або заборонений.
На завершення
Захист SSH сервера на Windows є важливою частиною безпеки вашого сервера, оскільки SSH надає віддалений доступ до системи, і неправильні налаштування або відсутність заходів безпеки можуть призвести до серйозних наслідків.
Наведені вище практики захисту допоможуть мінімізувати ризики, пов’язані з несанкціонованим доступом та зловживаннями, забезпечать цілісність вашої системи та надійно захистять сервер від потенційних атак.
Потужні Windows VPS
з безплатним адмініструванням 24/7
Можливо, вас зацікавить
Як налаштувати SSH сервер на Windows
SSH (Secure Shell) – це мережевий протокол, який надає безпечний доступ до віддалених систем...
Оновлено: 06.11.2024
|Як отримати доступ по SSH?
SSH (Secure SHell – безпечна оболонка) – це мережевий протокол, який використовується для безпечного...
Оновлено: 04.03.2024
|Як додати на сервер NVMe-диск
Наші нові швидкі VPS тарифи вже включають в себе NVMe-диски. Оберіть свій потужний VPS...
Оновлено: 22.06.2021
|
Наш телеграм
з важливими анонсами, розіграшами й мемами
Приєднатися