ДЕНИС КОЛИСНИЧЕНКО
Настройка сервера SSH
Сервис Telnet обеспечивает базовую эмуляцию терминалов удаленных систем, поддерживающих протокол Telnet над протоколом TCP/IP. Обеспечивается эмуляция терминалов Digital Equipment Corporation VT 100, Digital Equipment Corporation VT 52, TTY. Любые команды, выполняемые с помощью Telnet, обрабатываются telnet-сервером, а не локальным компьютером. Пользователь лишь видит результат выполнения этих команд.
Для использования Telnet на удаленном компьютере должен быть установлен telnet-демон. На компьютере пользователя нужно установить программу-клиент. Практически в каждой операционной системе существует утилита telnet, которая является клиентом для протокола telnet.
Сервис Telnet был и остается одним из самых популярных способов удаленной регистрации и работы на удаленной машине. Основным его недостатком является то, что любая информация, в том числе и пароли, передается в открытом виде без какого-либо кодирования.
SSH (Secure Shell) – программа, позволяющая вам зарегистрироваться на удаленных компьютерах и установить зашифрованное соединение. Существует также «безопасная» версия telnet – stelnet.
SSH использует криптографию открытого ключа для шифрования соединения между двумя машинами, а также для опознавания пользователей. Оболочку ssh можно использовать для безопасной регистрации на удаленном сервере или копировании данных между двумя машинами, в то же время предотвращая атаки путем присоединения посредине (session hijacking) и обманом сервера имен (DNS spoffing).
Оболочка Secure Shell поддерживает следующие алгоритмы шифрования:
- BlowFish – это 64-разрядная схема шифрования. Этот алгоритм часто используется для высокоскоростного шифрования данных больших объемов.
- Тройной DES (Data Encryption Standard) – стандарт для шифрования данных. Данный алгоритм довольно старый, поэтому не рекомендуется его использовать. Обычно DES используется для шифрования несекретных данных.
- IDEA (International Data Encryption Algorithm) – международный алгоритм шифрования информации. Этот алгоритм работает со 128-разрядным ключом и поэтому он более защищен, чем BlowFish и DES.
- RSA (Rivest-Shamir-Adelman algorithm) – алгоритм Ривеста-Шамира-Адельмана. Представляет собой схему шифрования с открытым и секретным ключами.
При выборе алгоритма шифрования нужно исходить из конфиденциальности информации, которую вам нужно передать. Если информация секретна, лучше использовать алгоритмы IDEA или RSA. Если же вы просто не хотите передавать данные в открытом виде, используйте алгоритм BlowFish, поскольку он работает значительно быстрее, чем DES.
Оболочка ssh очень эффективна против анализаторов протоколов, так как она не только шифрует, но и сжимает трафик перед его передачей на удаленный компьютер.
Программу ssh можно скачать по адресу http://www.cs.hut.fi/ssh. Версия ssh для UNIX распространяется бесплатно, а за Windows-версию (имеется в виду клиент для Windows) нужно заплатить.
Оболочка ssh незаменима в тех случаях, когда удаленно нужно администрировать сервер или когда сервер не имеет собственного монитора. При использовании telnet все данные, которые передаются через telnet-соединение, доступны в открытом виде. А значит, имена пользователей и пароли будут доступны всем, кто прослушивает трафик с помощью анализатора. SSH выполняет шифрование, используя несколько различных алгоритмов, включая DES и 3DES.
Программа состоит из демона sshd, который запускается на Linux/UNIX-машине, и клиента ssh, который распространяется как для Linux, так и для Windows. Чтобы установить ssh, возьмите исходные тексты и поместите их по традиции в каталог /usr/src/. Затем распакуйте архив и установите программу, выполнив следующую последовательность действий:
cd /usr/src/
tar xzf ssh-2.4.0.tar.gz
cd ssh-2.4.0
./configure
make
make install
Чтобы ssh начал работать, необходимо запустить демон sshd на той машине, к которой предполагается подключение. Желательно добавить команду запуска в сценарий загрузки системы для автоматического запуска. Демон sshd работает по 22 порту (см. листинг 1). Если не ошибаюсь, ssh невозможно использовать вместе с xinetd/inetd – его нужно запускать подобно httpd-серверу в режиме standalone.
Листинг 1. Фрагмент файла /etc/services
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp # SSH Remote Login Protocol
Обычно с настройкой sshd не возникает никаких неприятных моментов. Подробно о настройке sshd поговорим чуть позже. Теперь попробуйте зарегистрироваться на этой машине через ssh. Для этого нужно установить этот же пакет на другую машину под управлением Linux/UNIX (или установить Windows-клиент ssh) и ввести команду:
# ssh hostname.domain
ssh запросит вас ввести пароль пользователя. В качестве имени пользователя для установки соединения будет использовано имя текущего пользователя, то есть имя, под которым вы сейчас зарегистрированы в системе. В случае если аутентификация пройдет успешно, начнется сеанс связи. Прекратить сеанс можно комбинацией клавиш Ctrl+D. Если вам нужно указать другое имя пользователя, используйте параметр -l программы ssh:
ssh -l user hostname.ru
Так можно указать программе ssh, от имени какого пользователя нужно регистрироваться на удаленной машине (см. рис. 1).
Рисунок 1. Регистрация на удаленной машине
При использовании Windows-клиента имя компьютера, имя пользователя и пароль нужно ввести в диалоговом окне программы. Если соединение не устанавливается, попробуйте выбрать метод кодирования blowfish. Если и это не поможет, выберите 3DES. Работа в ssh аналогична работе в telnet. Вы можете администрировать удаленную машину также легко, как и локальную.
Оболочка ssh использует два файла конфигурации ssh_conf и sshd_conf. Думаю, что нет смысла говорить о том, что они находятся в директории /etc/ssh. Рекомендую в файле sshd_conf прописать следующую строчку:
allowedadress 10.1.1.1 10.1.2.1 10.1.3.1
Это означает, что доступ по ssh может быть выполнен только с машин с адресами 10.1.1.1, 10.1.2.1, 10.1.3.1. Это оградит ваш компьютер от нежелательных вторжений извне. Программа stelnet во всем полностью аналогична программе telnet, но она выполняет шифрование трафика, который передается во время telnet-соединения.
Демон sshd – это программа-демон для оболочки ssh. Обычно sshd запускается на машине, к которой подключаются клиенты SSH. Последние версии демона sshd поддерживают две версии протокола SSH: SSH версия 1 и SSH версия 2.
Протокол SSH версия 1
У каждого узла есть свой RSA-ключ (обычно 1024 бит), который используется для идентификации узла. Этот ключ еще называется открытым. Дополнительно при запуске демона генерируется еще один RSA-ключ – ключ сервера (обычно 768 бит). Этот ключ создается заново каждый час и никогда не сохраняется на диске.
Каждый раз при установке соединения с клиентом демон отправляет ему в ответ свой открытый ключ и ключ сервера. Клиент сравнивает полученный открытый ключ со своей базой данных, чтобы проверить, не изменился ли он. Затем клиент случайным образом генерирует 256-разрядное число и кодирует его, используя одновременно два ключа – открытый ключ и ключ сервера. Обе стороны используют этот случайный номер как ключ сессии, который используется для кодирования всех передаваемых во время сессии данных. Затем клиент пытается аутентифицировать себя, используя .rhosts-аутентификацию, аутентификацию RSA или же аутентификацию с использованием пароля. Обычно .rhosts-аутентификация небезопасна и поэтому она отключена.
Протокол SSH версия 2
Версия 2 работает аналогично: каждый узел имеет определенный DSA-ключ, который используется для идентификации узла. Однако при запуске демона ключ сервера не генерируется. Безопасность соединения обеспечивается благодаря соглашению Диффи-Хелмана (Diffie-Hellman key agreement).
Сессия может кодироваться следующими методами: 128-разрядный AES, Blowfish, 3DES, CAST128, Arcfour, 192-разрядный AES или 256-разрядный AES.
Опции демона sshd указаны в таблице 1.
Таблица 1. Опции демона sshd
Опция
|
Описание
|
-b биты
|
Определяет число битов для ключа сервера (по умолчанию 768). Данную опцию можно использовать, только если вы используете протокол SSH версии 1.
|
-d
|
Режим отладки (DEBUG). В этом режиме сервер не переходит в фоновый режим и подробно протоколирует свои действия в системном журнале. Использование данной опции особенно полезно при изучении работы сервера.
|
-e
|
Если указана это опция, демон sshd отправляет отладочные сообщения не в системный журнал, а на стандартный поток ошибок.
|
-f конфиг_файл
|
Задает альтернативный файл конфигурации. По умолчанию используется /etc/ssh/sshd_config.
|
-g время
|
Предоставляет клиенту, не прошедшему аутентификацию, дополнительное время, чтобы аутентифицировать себя. По умолчанию время равно 600 секундам. Если за это время клиент не смог аутентифицировать себя, соединение будет прекращено. Значение 0 интерпретируется как бесконечное ожидание.
|
-h файл_ключа
|
Задает альтернативный файл открытого ключа (ключ узла). По умолчанию используется файл /etc/ssh/ssh_host_key. Эта опция может понадобиться чтобы sshd мог выполняться не только от имени суперпользователя root. Кроме этого частым использованием этой опции является запуск sshd из сценариев, задающих различные настройки в зависимости от времени суток. Например, в дневное (рабочее) время устанавливаются одни опции, а в вечернее(нерабочее) время – другие.
|
-i
|
Используется, если нужно запускать sshd через суперсервер xinetd (inetd). Обычно демон sshd не запускается суперсервером xinetd (inetd), а запускается при загрузке системы, потому что демону sshd требуется некоторое время (10 секунд) для генерирования ключа сервера, прежде чем он сможет ответить на запросы клиентов.
|
-k время
|
Задает время, спустя которое ключ сервера будет создан заново. По умолчанию время составляет 3600 секунд (1 час). Данную опцию можно использовать, только если вы используете протокол SSH версии 1.
|
-p порт
|
Указывает альтернативный порт, который демон sshd будет прослушивать. По умолчанию используется порт 22.
|
-q
|
«Тихий режим». В данном режиме протоколирование сессии производиться не будет. Обычно протоколируется начало аутентификации, результат аутентификации и время окончания сессии.
|
-t
|
Тестовый режим. Данный режим применяется для проверки корректности файла конфигурации.
|
-D
|
При использовании этой опции демон не будет переходит в фоновый режим.
|
-4
|
Разрешается использовать IP-адреса только в формате IPv4.
|
-6
|
Разрешается использовать IP-адреса только в формате IPv6.
|
Файл конфигурации демона /etc/ssh/sshd_config довольно большой, поэтому я не стану приводить в статье его полный листинг. Сейчас мы остановимся только на самых важных директивах файла конфигурации.
Директива Port предназначена для указания порта, которые демон будет прослушивать (данная директива аналогична опции -p):
Port 22
Следующая директива – это директива Protocol. С помощью этой директивы можно указать в порядке предпочтения номера поддерживаемых протоколов SSH:
Protocol 2,1
Такое определение директивы означает, что сначала сервер будет пытаться установить соединение с клиентом по протоколу SSH версии 2, а потом – по протоколу SSH версии 1. Можно указать использование только одной версии протокола, например: Protocol 1. Директива ListenAddress указывает локальный адрес, который должен прослушивать демон.
Директива определяет файлы ключей. Файлами по умолчанию являются:
/etc/ssh/ssh_host_key
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_dsa_key
Директива ServerKeyBits определяет разрядность ключа сервера для протокола SSH первой версии. По умолчанию используется 768-разрядный ключ (768 бит).
Директива LoginGraceTime аналогична опции -g : предоставляет клиенту дополнительное время, чтобы аутентифицировать себя. По умолчанию время равно 600 секундам. Если за это время клиент не смог аутентифицировать себя, соединение будет прекращено.
Директива KeyRegenerationInterval аналогична опции -k. Она определят время, спустя которое ключ сервера будет создан заново. По умолчанию время составляет 3600 секунд (1 час).
Директива PermitRootLogin определяет, разрешено ли пользователю root регистрироваться по ssh. Значение по умолчанию:
PermitRootLogin yes
Еще две директивы, имеющие непосредственное отношение к аутентификации – это PasswordAuthentication и PermitEmptyPasswords. Первая разрешает (при значении yes) аутентификацию с помощью пароля, а вторая разрешает (при значении yes) использовать пустые пароли. Значения по умолчанию:
PasswordAuthentication yes
PermitEmptyPasswords no
Описание остальных опций вы найдете в справочной системе, введя команду man sshd. Ваши вопросы и комментарии присылайте на dhsilabs@mail.ru.