Стаття також доступна російською (перейти до перегляду).
Зміст
- Характеристики та опис роботи SSH
- Управління роботою SSH
- Основні заходи, що до безпечного використання SSH
- Застосування параметрів ssh_config
- Застосування шаблонів у authorized_keys SSH-серверу
- Застосування PAM-модулів
- Застосування утиліти IPTABLES
- Застосування методів TCPwrappers
Необхідність забезпечення безпечних з'єднань та передачі даних між вузлами мережі, вимагає використання найбільш захищених мережевих протоколів. Одним з них є протокол SSH (Secure SHell), на базі котрого функціонує командна оболонка з тією ж назвою. Він забезпечує тунелювання TCP-з'єднань та дозволяє здійснювати віддалене управління мережевими ОС, зокрема, Linux. Тому актуальним є питання правильного налаштування з метою оптимізації його роботи та підвищення рівня безпеки.
Характеристики та опис роботи SSH
Це є мережевий протокол прикладного рівня, котрий працює на рівні TCP-з`єднань. Найчастіше задіяний порт 22. Вільна реалізація протоколу – OpenSSH. Специфікований RFC 4251. Протокол працює в парі клієнт-сервер. Для аутентифікації сервера використовується алгоритм DH (Diffie–Hellman).
SSH-сервер «прослуховує» з`єднання від клієнтів та здійснює їх аутентифікацію з використанням шифрування із відкритим ключем. Відповідно, сервер та клієнт повинні мати по одній парі ключів – відкритий та закритий. При встановленні з`єднання здійснюється обмін відкритими ключами. Тунель, котрий утворюється посередництвом SSH-з`єднання, використовується для симетричного шифрування даних, котре є достатньо швидким. Тобто, фактично інкапсулюються будь-які дані, в тому числі і протоколи, зокрема, ftp. Це дає можливість передавати дані, навіть, без запуску сервера для протоколу, котрий інкапсулюється.
Таким чином, на відміну від інших подібних протоколів, зокрема, telnet та rlogin, тут увесь трафік шифрується. Тому SSH є стійким до сніфінгу, тобто атак, пов`язаних із прослуховуванням, а також до session hijacking, що унеможливлює втручання «зі сторони» у вже встановлену сесію. Однак, протокол не є стійким до втручань типу man-in-middle, котрі можуть здійснюватися на етапі перевірки користувацького відбитку ключа (key fingerprint) і тому Адміністраторам системи необхідно вживати додаткові заходи безпеки.
Управління роботою SSH
Управління роботою протоколу здійснюється за допомогою параметрів командної строки SSH та параметрів, котрі знаходяться у файлах конфігурації – системному та користувацькому – SSH_CONFIG та CONFIG (для OpenSSH). Параметри у файлах прописуються за форматом «назва: значення» по одному на строку. Це дозволяє Адміністратору керувати як клієнтом, так і сервером.
Розташування користувацького файлу:$home/.ssh/config
Розташування системного файлу (за замовченням):/etc/ssh/ssh_config
Усі ці параметри виконуються SSH відповідно до їх пріоритету. Рівні пріоритету наступні:
- Параметри командної строки.
- Параметри користувацького файлу конфігурації.
- Параметри системного файлу.
Сервер SSH має свій власний набір файлів конфігурації, включаючи основний файл для всієї системи із ім`ям SSHD_CONFIG (Daemon), розташований на віддаленому вузлі за адресою: /etc/ssh/sshd_config.
Основные меры по безопасному использованию SSH
- Заборона підключення із порожнім паролем або відключення входу по паролю.
- Заборона віддаленого root-доступу.
- Обмеження доступу на рівні користувачів та груп.
- Використання довгих RSA-ключів авторизації та потаємної фрази для них.
- Застосування кількох методів аутентифікації, в тому числі, двохфакторної автентифікації.
- Використовувати інший TCP-порт для SSH-сервера замість стандартного.
- Блокування потенційно небезпечних IP-адрес.
- Обмеження кількості IP-адрес, з котрих дозволений доступ.
- Не задіювати популярні логіни для системного доступу по SSH.
- Постійний моніторинг повідомлень про помилки автентифікації.
- Встановлення детекторів IDS (Intrusion Detection System).
Більшість із вказаних кроків реалізуються налаштуванням відповідних параметрів конфігураційних файлів типу SSH_CONFIG, але можуть бути й інші рішення, у тому числі нестандартні. Розглянемо більш детально їхню реалізацію із використанням різних підходів.
Застосування параметрів ssh_config
Як зазначалося вище, всі параметри вказуються у системному конфігураційному файлі. Для демонстрації його вмісту введемо у терміналі команду:
$nano /etc/ssh/ssh_config
Результат виконання представлений нижче. Саме тут можна змінювати значення тих або інших параметрів. Для збереження змін та виходу з редактора, натискаємо клавіші ctrl+O.
Нижче наведені найбільш важливі параметри ssh_config у плані забезпечення захисту, які можна задіяти для реалізації багатьох вищевказаних заходів.
Назва параметра | Призначення |
PermitRootLogin | Забороняє віддалений root-доступ, якщо встановлено значення no. |
AllowUser, AllowGroup | Дозволяє визначити обмежене коло користувачів або груп, яким дозволено реєстрацію. Для цього необхідно прописати імена або назви таких користувачів або груп у якості значень парметрів. За замовчуванням реєстрацію дозволено всім користувачам. |
DenyUser, DenyGroup | Дають змогу заборонити реєстрацію певним користувачам або групам. Для цього необхідно прописати їх імена або назви у якості значень параметрів. За замовчуванням реєстрацію нікому не заборонено. |
AuthenticationMethods | Визначає методи аутентифікації користувачів. |
MaxAuthTries | Обмежує кількість спроб ідентифікації клієнта в межах одного з'єднання. За замовчуванням встановлено значення 6. |
ClientAliveInterval | Вказує час бездіяльності клієнта в секундах, після чого відправляється запит відгуку. Значення за замовчуванням – 0. |
ClientAliveCountMax | Встановлює кількість запитів, які перевіряють доступність клієнта, які можуть залишатися без відповіді. Якщо межа досягнута, SSH-сервер відключає клієнта та завершує сеанс. Значення за замовчуванням – 3. |
AllowTcpForwarding | Визначає, чи буде дозволено перенаправлення TCP. Значення за замовчуванням – yes. |
PasswordAuthentication | Дозволяє аутентифікацію за паролем. За замовчуванням встановлено значення yes. |
PubkeyAuthentication | Дозволяє аутентифікацію за допомогою відкритого ключа. За замовчуванням встановлено значення yes. |
Використання вказаних вище параметрів дозволить значно зменшити ймовірність проникнення в систему зловмисниками.
Наприклад, розглянемо спосіб захисту за рахунок заборони методів аутентифікації, які використовуються за замовчуванням. Так можна дозволити доступ тільки для тих IP-адрес, які будуть відповідати встановленому шаблону. Всі інші хости блокуватимуться, оскільки для них не буде доступного методу аутентифікації.
Для заборони всіх методів аутентифікації необхідно встановити значення no для параметрів PasswordAuthentication та PubkeyAuthentication у файлі конфігурації ssh_config:
PasswordAuthentication no PubkeyAuthentication no
Потым необхідно додати потрібні методи аутентифікації після адреси спывпадыння в кінці файлу. При цьому э обов'язковим розміщення Match у кінці файлу, оскільки всі строки конфігурації після нього поміщуються у середину умовного блоку до наступноъ строки Match. Наприклад:
Match Address 127.0.0.* PubkeyAuthentication yes
Аргументи спывставлення та дозволені умовні параметри описані на довідковій сторінці sshd_config.
Шаблони відповідності задокументовані на довідковій сторінці ssh_config.
Застосування шаблонів в authorized_keys SSH-серверу
У файлі ~/.ssh/authorized_keys на сервері зберігається відкритий ключ, який порівнюється з ключем клієнта під час його аутентифікації. Клієнтський ключ знаходиться на вузлі клієнта у файлі за адресою ~/.ssh/id_rsa.
З метою запобігання несанкціонованому підключенню зі сторонніх мереж шляхом застосування зловмисником вкраденого ключа клієнта, бажано використання шаблонів для фільтрації IP-адрес у файлі authorized_keys. Для цього достатньо замість запису типу:
ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment
вставити інший:
from="pattern" ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment
де pattern – шаблон для фільтрації IP-адрес, що відповідає клієнтському хосту, з якого ви під'єднуєтесь із загальнодоступного DNS-імені, IP-адреси або будь-якого мережного блоку.
Наприклад:
from="192.168.1.0/24" ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment
Цей запис виключає можливість підключення до сервера з інших мереж, крім зазначеного у шаблоні.
Застосування PAM-модулів
Можливості ОС Linux дозволяють використовувати безкоштовні спеціалізовані пакети libpam, що постійно оновлюються. Одним з них є пакет libpam-geoip, який надається geoip-database-contrib<. Він дозволяє здійснювати фільтрацію IP-адрес при доступі по SSH. Більш детальні рекомендації щодо його використання можна знайти на сайті розробників.
Застосування утиліти IPTABLES
Програма забезпечує інтерфейс командного рядка для керування роботою між мережевого екрану netfilter для ОС Linux. Це дає змогу керувати фільтрацією пакетів на рівні IP-адрес. Таким чином, можна дозволити або заборонити трафік з тієї або іншої мережі чи хоста. Наприклад, щоб дозволити трафік лише з мережі 192.168.0.0/24, введемо такі команди:
$iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT $ iptables -A INPUT -p tcp --dport 22-j DROP
Друга команда забезпечує примусове перенаправлення відхиленого трафіку на порт 22. Можна встановлювати багато інших правил для різних типів мереж або хостів, які повинні розміщуватись до останньої команди перенаправлення трафіку. Для того, щоб подивитися правила використання утиліти введемо в терміналі:
$ iptables –h
Результат виконання команди зображений нижче на зображеннях.
Для великої кількості мереж або хостів можна також використовувати модулі ipset або iprange, що дозволить застосувати фільтри для будь-якого довільного діапазону IP-адрес. Однак слід врахувати, що встановлені правила не зберігаються після перезавантаження системи і тому потрібно реалізувати будь-який механізм поновлення даних. Для IPv6-адрес замість iptables необхідно використовувати утиліту ip6tables.
Застосування методів TCPwrappers
За допомогою цього методу можна дозволити або заборонити віддалене підключення тих чи інших хостів. Для цього лише потрібно вказати визначені хости у файлах hosts.allow (дозволені) та hosts.deny (заборонені). Для демонстрації роботи методу введемо у терміналі:
$nano /etc/hosts.allow
Результати виконання команди наведені нижче. У редакторі nano відкрився вміст відповідного файлу. Тут ми можемо вказати будь-яку мережу або хост та зберегти зміни (ctrl+O).
Також можна заборонити підключення з будь-яких IP-адрес до файлі hosts.deny:
$nano /etc/hosts.deny
Результат наведено нижче. Тут ми вносимо ті мережі чи хости, які підлягають забороні. Наприклад, для заборони всіх хостів необхідно вказати параметр ALL, як показано у коментарях файлу. Після внесення змін натискаємо ctrl+O та виходимо з редактора. Слід зазначити, що підтримка tcpwrappers була відключена в OpenSSH 6.7.
Підписуйтесь на наш телеграм-канал t.me/freehostua, щоб знати нові корисні матеріали. Дивіться наш канал YouTube на youtube.com/freehostua.
Ми щось упустили, в чому помилилися?
Повідомте про це в коментарях, і ми обов'язково обговоримо це.
Дата: 12.07.2022 Автор: Євген
|
|
Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus