• База знань
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Стаття також доступна російською (перейти до перегляду).

ssh_config

 

Зміст

 

 Необхідність забезпечення безпечних з'єднань та передачі даних між вузлами мережі, вимагає використання найбільш захищених мережевих протоколів. Одним з них є протокол 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.

Вміст файлу /etc/ssh/ssh_config

Нижче наведені найбільш важливі параметри 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&lt. Він дозволяє здійснювати фільтрацію 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

Результат виконання команди зображений нижче на зображеннях.

Демонстрація виконання команди iptables –h

Демонстрація виконання команди iptables –h

Для великої кількості мереж або хостів можна також використовувати модулі ipset або iprange, що дозволить застосувати фільтри для будь-якого довільного діапазону IP-адрес. Однак слід врахувати, що встановлені правила не зберігаються після перезавантаження системи і тому потрібно реалізувати будь-який механізм поновлення даних. Для IPv6-адрес замість iptables необхідно використовувати утиліту ip6tables.

Застосування методів TCPwrappers

За допомогою цього методу можна дозволити або заборонити віддалене підключення тих чи інших хостів. Для цього лише потрібно вказати визначені хости у файлах hosts.allow (дозволені) та hosts.deny (заборонені). Для демонстрації роботи методу введемо у терміналі:

$nano /etc/hosts.allow

Результати виконання команди наведені нижче. У редакторі nano відкрився вміст відповідного файлу. Тут ми можемо вказати будь-яку мережу або хост та зберегти зміни (ctrl+O).

Демонстрація методу роботи hosts.allow

Також можна заборонити підключення з будь-яких IP-адрес до файлі hosts.deny:

$nano /etc/hosts.deny

Результат наведено нижче. Тут ми вносимо ті мережі чи хости, які підлягають забороні. Наприклад, для заборони всіх хостів необхідно вказати параметр ALL, як показано у коментарях файлу. Після внесення змін натискаємо ctrl+O та виходимо з редактора. Слід зазначити, що підтримка tcpwrappers була відключена в OpenSSH 6.7.

Демонтсррація методу роботи hosts.deny

Підписуйтесь на наш телеграм-канал t.me/freehostua, щоб знати нові корисні матеріали. Дивіться наш канал YouTube на youtube.com/freehostua.

Ми щось упустили, в чому помилилися?
Повідомте про це в коментарях, і ми обов'язково обговоримо це.

Дата: 12.07.2022
Автор: Євген
Голосування

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:

comments powered by Disqus
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA