Налаштування SSH -тунелю. Огляд можливостей
1. SSH протокол
SSH – це протокол сеансового рівня. SSH-сервер прослуховує з'єднання на TCP-порту 22. Специфікація протоколу SSH-2 міститься в RFC 4251 [1] та інших [2-6]. Для автентифікації сервера в SSH використовується протокол автентифікації сторін на основі алгоритмів електронно-цифрових підписів (ЭЦП) RSA або DSA. Для автентифікації клієнта також може використовуватися ЭЦП RSA або DSA, але допускається також автентифікація за допомогою пароля (режим зворотної сумісності з Telnet) і навіть ip-адреса хоста (режим зворотної сумісності з rlogin). Автентифікація за паролем найбільш поширена; вона безпечна, оскільки пароль передається по зашифрованому віртуальному каналу. Автентифікація за ip-адресом небезпечна, цю можливість найчастіше відключають. Для створення загального секрету (сеансового ключа) використовується алгоритм Діффі-Хеллмана (DH). Для шифрування переданих даних використовується симетричне шифрування, алгоритми AES, Blowfish або 3DES. Цілісність переданих даних перевіряється за допомогою CRC32 в SSH1 або HMAC – SHA1/HMAC – MD5 в SSH2.Для стискування шифрованих даних можливо використовуватися алгоритм LempelZiv (LZ77), який забезпечує такий же рівень стискування, що і архіватор ZIP.
Довжина пакета | Довжина поля вирівнювання | Дані | Поле вирівнювання | Код автентифікації повідомлення |
Рисунок 1 – Формат пакетів SSH
Довжина пакета – 32 бітове значення довжини пакета.
Довжина поля вирівнювання – вказує довжину поля вирівнювання.
Дані – дані для одержувача.
Поле вирівнювання містить байти з випадковим вмістом більше 4 байт для вирівнювання пакета.
Код автентифікації повідомлення вказує на використовуваний алгоритм автентифікації.
Кожен SSH пакет містить байт типу повідомлення. Нижче подані значення цього байта і закріплені специфікацією параметри.
Табл.1 Значення байту типу повідомлень пакету SSH
Значення | Назва |
1-19 | Загальні повідомлення транспортного протоколу |
20-29 | Узгодження алгоритмів |
30-49 | Обмін ключами |
50-59 | Загальні повідомлення протоколу автентифікації |
60-79 | Специфічні повідомлення протоколу автентифікації |
80-89 | Загальні повідомлення протоколу з'єднання |
90-127 | Управління логічними каналами |
128-191 | Резерв |
192-255 | Локальні розширення |
Максимальна довжина SSH повідомлення - 32768 байт, а пакета - 35000 байт.
Програмних реалізацій SSH протоколу досить багато, частина з них і їх можливостей подано в порівняльній таблиці 2.
Табл. 2 Порівння програмних реалізацій SSH протоколу
Програма | Інтер- фейс | SSH1 | SSH2 | Режими тунелювання | Мультиплек-сування сесій | Kerberos | IPV6 | SFTP/SCP | ||
портів | socks проксі | VPN | ||||||||
CopSSH | Граф. | так | так | так | так | так | Ні | так | так | Так |
Dropbear | Кому. | Ні | так | так | так | так | Ні | ні | так | Так |
OpenSSH | Кому. | так | так | так | так | так | Так | так | так | Так |
PenguiNet | Граф. | так | так | так | так | ні | Ні | ні | ні | Так |
Private shell | Граф. | так | так | так | так | ні | Ні | ні | так | так |
PuTTY | Граф. | так | так | так | так | так | Ні | ні | так | так |
Reflection of secure IT | Граф. | так | так | так | так | так | так | так | так | так |
SSH Tectia | Граф. | так | так | так | так | так | так | так | ні | так |
Як видно з цієї таблиці, якнайповніше підтримує різні методи тунелювання - відкрита програмна реалізація OpenSSH і програми зроблені на її основі. У цій лабораторній роботі ми розглянемо програмну реалізацію PuTTY (для Windows), OpenSSH (для Linux) і побудуємо на основі їх SSH тунель.
Хід роботи
2.1. Налаштування SSH сервера під операційною системою Linux
Для виконання лабораторної роботи необхідна версія OpenSSH 5.0 або вище. Для перевірки версії можливо застосувати команду: ssh –v. У випадку відсутності данного пакета необхідно його встановити із репозитарія або з вихідних кодів.
Перевірити конфігураційний файл sshd_config у директорії /etc/ssh. В ньому необхідно перевірити наступні рядки, якщо іх не має, то дописати [7]:
Port 22 # слухаємо 22 порт
Protocol 2 # застосовуємо SSH2
Також перевірити у даній директорії находження файлів з публічним та приватним ключами: ssh_host_key.pub, ssh_host_rsa.key, ssh_host_rsa_key.pub.
Запустити сервіс, наприклад, командою: ./etc/rc.d/rc.sshd start. Якщо немає данного сервісу, то за домопогою, наприклад, слідуючої команди: ./usr/sbin/sshd.
2.2. Налаштування SSH -клієнта на основі відкритої програми PuTTY під
операційною системою Windows
Для роботи тунелю потрібні пара ключів публічний і приватний. Публічний використовується сервером, а приватний повинен зберігатися на робочій машині.
У випадку якщо у вашій робочій директорії немає приватного ключа з розширенням .ppk, то створюємо його за допомогою утиліти puttygen, як показано на рис. 2.
Рисунок 2 – Генерація приватного і публічного ключа
Зберігаємо приватний ключ в робочу директорію.
Запускаємо PuTTY, вибираємо нове з'єднання. У налаштуваннях з'єднання – Дані встановлюємо автоматичне ім'я користувача, під яким ми з'єднуватимемося. Це може бути або root або ін. користувач, вказаний викладачем.
Рисунок 3 – Властивості даних
Вказуємо у властивостях SSH, що не запускатимемо shell - оболонку.
Рисунок 4 – Властивості shell - оболонки
У властивостях авторизації необхідно вказати шлях і приватний ключ.
Рисунок 5 – Шлях до приватного ключа
У властивостях сесії вказати потрібно ip-адресу сервера і порт.
Рисунок 6 – Ім'я сервера і порт для з'єднання
Тепер запускаємо з'єднання (Open) і наш SSH -тунель готовий.
2.3. Додаткове завдання, PPP поверх SSH
Часто буває необхідно настроїти більш гнучку маршрутизацію ніж дозволяє в класичному вигляді тунель SSH. Тоді на допомогу приходить можливість інкапсуляції одних протоколів в інші, звичайно, з обліком обов'язково довжини пакетів цього протоколу та узгодження разів довжини пакета для кожного виду інкапсуляції. Цей приклад демонструє гнучкість протоколів і можливість інкапсулювати PPP пакети в SSH тунель.
Схема з' єднання:
Рисунок 6 Схема з' єднання PPP поверх SSH
Конфігурації сервера.
Якщо немає пакета PPP версії 2.4.1 або вище, то треба встановити. Прописати логін і пароль в pap – secrets:
$ echo 'pppuser * 1pppuser *' >> /etc/ppp/pap - secrets/
Призначити IP-адресу і RSA-ключі у файлі pppuser/.ssh/authorized_keys (one line per key) no – port – forwarding, no – X11 – forwarding, no – agent – forwarding, command="/usr/sbin/pppd remotename pppuser refuse – chap refuse – mschap refuse – mschap – v2 refuse – eap require – pap 192.168.45.1:192.168.45.2 notty debug linkname pppoverssh" ssh – rsa AAAAB3NzaC1...
Не використовувати ніяких додаткових правил маршрутизації і правил файервола, наприклад, в директорії /etc/ppp/ip – up.d/*.
Конфігурація клієнта.
Якщо немає пакета ppp версії 2.4.1 або вище, то треба встановити. Створюємо нове з'єднання для ssh:
$ cat >/etc/ppp/peers/ssh <<EOF
pty 'ssh - e none pppuser@192.168.0.122 false'
user pppuser
nodetach
linkname pppoverssh
# debug
EOF
Прописати логін і пароль в pap – secrets:
$ echo 'pppuser * 1pppuser *' >> /etc/ppp/pap – secrets/
Настроюється /etc/ppp/ip – up.d/* якщо потрібно (наприклад, використовувати, як основний маршрут).
Якщо ви зробили усе правильно, то після запуску команди:
$ /usr/sbin/pppd call ssh
Ви побачите наступне:
Using interface ppp0
Connect: ppp0 <--> /dev/ttyp4
Remote message: Login ok
kernel does not support PPP filtering
Deflate (15) compression enabled
Cannot determine ethernet address for proxy ARP
local IP address 192.168.45.2
remote IP address 192.168.45.1
2.4. Додаткове завдання, автоматичний тунель за допомогою autossh
Буває необхідно автоматизувати процеси контролю та перепідключення ssh -тунелю. Одним з методів рішення є, наприклад, програма autossh написання Carson Harding. Вона вирішує проблеми:
запуску ssh -клієнта;
перевірки з'єднання через тестове закільцюванням двох портів;
проводить регулярно перевірки з'єднання та перезапуск ssh -клієнта у разі обриву з'єднання.
Наступний приклад робить з'єднання до IMAP -сервера - autossh перевіряє ssh -тунель кожні 15 секунд:
$ export AUTOSSH_GATETIME=30
$ export AUTOSSH_POLL=15
$ autossh - M 20000 - g - N - C - L143: localhost :143 192.168.0.122
Для частої установки тунелю можна визначити bash -аліас до ssh:
$ alias ssh=':& a=$! ; port=$(( $a%45536 +20000 )) AUTOSSH_GATETIME=30 AUTOSSH_POLL=15 autossh - M $port'
$ ssh - g - N - C - L143: localhost :143 192.168.0.122
[1] 6418
Дата добавления: 2016-05-11; просмотров: 871;