Встановлення безпечних мережних з'єднань між клієнтськими машинами та сервером є невід'ємною частиною загального механізму забезпечення Інтернет-безпеки під час роботи в мережі. Зокрема, це дає можливість організувати надійну систему авторизації користувачів і уникнути зовнішнього втручання в трафік, що передається, тобто, злому. Протокол SSH (Secure Shell) – один з небагатьох, який може забезпечити повний захист даних за умови дотримання ряду формальних правил при його конфігуруванні. Розглянемо детальніше можливості протоколу та його коректне настроювання.
Характеристики та робота протоколу SSH
Розглянемо вільну реалізацію протоколу SSH – OpenSSH, що має найбільший рівень поширення та, відповідно, популярності серед Адміністраторів хостинг-центрів.
OpenSSH реалізовано у вигляді набору програмних компонентів, кожен із яких відповідає за виконання певних функцій. Наведемо деякі з його основних компонентів:
- Ssh – встановлення віддаленого з'єднання;
- Sftp – забезпечує передачу файлів по мережі;
- Sshd – даемон на стороні сервера, що управляє організацією доступу до даних;
- Ssh-keygen – генерує на запит закритий та відкритий ключі.
Протокол має клієнт-серверну архітектуру, де сервер відповідає за прийом запитів на підключення від клієнтів на певний порт (за замовчуванням встановлюється порт 22). Далі відбувається процес аутентифікації клієнтів, і у разі успішного завершення, сервер «пропускає» клієнта в систему.
Методів аутентифікації може бути кілька. Вкажемо основні їх у порядку зростання ступеня надійності:
- За паролем;
- За допомогою пари ключів;
- Двофакторна автентифікація.
Аутентифікація за паролем має найменший рівень захищеності через свій принцип побудови. У цьому випадку пароль повинен постійно зберігатися на сервері, що рано чи пізно веде до розтину незалежно від складності, це лише питання часу.
За допомогою пари ключів можна організувати досить надійну систему захисту від злому за дотримання всіх формальних правил, наприклад, нікому не передавати свій закритий ключ. Аутентифікація клієнта у разі відбувається так. За допомогою утиліти Ssh-keygen генерується пара символьних послідовностей, одна з яких є особистим паролем власника (закритий ключ), а інша послідовність (відкритий ключ) має бути передана на машини, до яких власник згодом планує підключатися та поміщена до директорії .ssh/authorized_keys. У процесі автентифікації сервер запросить у клієнта закритий ключ, і якщо він відповідає відкритому ключу, доступ відкривається.
Двофакторна автентифікація є найбільш надійним варіантом системи захисту. Сьогодні вона використовується повсюдно – у банкінгу, для доступу до поштових облікових записів та особистих кабінетів користувачів на торгових Інтернет-майданчиках тощо. . Наприклад, кодове слово у SMS-повідомленні від банку – це додатковий токен, а GSM-зв'язок – незалежний канал передачі.
Можливості SSH дозволяють використовувати на сервері будь-який із зазначених методів, їхню комбінацію або все відразу. Переважно залишати найбільш надійні з них.
Засоби керування протоколом SSH
Керувати протоколом можна в командному режимі з терміналу або змінюючи значення параметрів конфігураційних файлів, до яких належать:
- Системний файл ssh_config;
- Файл користувача з іменем config;
- Серверний файл sshd_config.
Пріоритет зазначених засобів управління наступний (у порядку зменшення):
- Команди з параметрами в термінальному режимі;
- Налаштування файлу конфігурації користувача;
- Налаштування системного та серверного файлів конфігурації.
Використовуючи установки конфігураційних файлів можна легко забезпечити необхідний рівень захисту мережевого з'єднання або системи аутентифікації клієнта. Нижче буде розглянуто один із варіантів захисту.
Параметри безпеки
Умовно можна виділити групу параметрів конфігураційних файлів SSH, які безпосередньо чи опосередковано впливають рівень захисту з'єднання чи спосіб організації аутентифікації клієнтів. Наведемо деякі з них:
AuthenticationMethods | встановлює діючі методи автентифікації |
PasswordAuthentication | встановлює або забороняє аутентифікацію за паролем |
PubkeyAuthentication | встановлює або забороняє аутентифікацію за відкритим ключ |
ClientAliveInterval | визначає час, коли відсутні будь-які дії зі сторони клієнта |
MaxAuthTries | визначає максимальну кількість спроб підключення зі сторони клієнта у межах з'єднання |
PermitRootLogin | дозволяє або забороняє віддалене підключення до сервера з правами root-користувача |
AllowUser, DenyUser | визначають коло користувачів, яким дозволено (AllowUser) або заборонена (DenyUser) реєстрація у системі |
Port | встановлює порт для підключення клієнтів |
CheckHostIP | дозволяє або забороняє перевірку IP-адреси за перерахованим у файлі know_hosts адресам. Це адреси комп'ютерів, з якими раніше вже встановлювалися з'єднання, тобто, адреси, що заслуговують на довіру. В ньому також фіксуються їх відкриті ключі. |
Практична реалізація схеми захисту
На нашому сервері під керуванням ОС Ubuntu 22.04 виставимо необхідні значення параметрів безпеки в конфігураційних файлах SSH.
У терміналі за допомогою редактора nano відкриємо вміст системного файлу ssh_config, де і зробимо потрібні налаштування:
$ nano /etc/ssh/ssh_config
Ми змінили параметри безпеки, встановлені за замовчуванням на наступні:
PasswordAuthentication | no |
PubkeyAuthentication | yes |
MaxAuthTries | 3 |
PermitRootLogin | no |
AllowUser | sany, serg |
Port | 27 |
CheckHostIP | yes |
В результаті ми отримали схему захисту, в якій:
- Заборонено підключення за паролем;
- Встановлено автентифікацію на рівні відкритого ключа;
- Встановили максимальну кількість спроб підключення в межах одного з'єднання – 3, за замовчуванням встановлюється значення 6;
- Заборонили видалене підключення з правами root;
- Обмежили групу користувачів, допущених для реєстрації в системі;
- Змінили стандартний порт на інший під номером 27;
- Дозволили звірку IP-адреси клієнта зі списком адрес, зафіксованих у know_hosts. Це означає, що зв'язок встановлюватиметься лише з перевіреними раніше машинами.
Ми реалізували схему захисту виключно за допомогою засобів управління протоколом SSH, не вдаючись до стороннього програмного забезпечення, наприклад, такого, як IPTABLES та іншого подібного, що, по-перше: прискорює обробку даних, по-друге: спрощує процес налаштування.
Звичайно ж, можна використовувати різні схеми захисту залежно від конкретної ситуації, проте базові елементи, які ми тут навели, все одно мають бути присутніми.