Openssh

Материал из Wikibebra
Перейти к навигацииПерейти к поиску

SSH (англ. Secure Shell — «безопасная оболочка») — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов). Схож по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли. SSH допускает выбор различных алгоритмов шифрования. SSH-клиенты и SSH-серверы доступны для большинства сетевых операционных систем.

SSH позволяет безопасно передавать в незащищённой среде практически любой другой сетевой протокол. Таким образом, можно не только удалённо работать на компьютере через командную оболочку, но и передавать по шифрованному каналу звуковой поток или видео (например, с веб-камеры). Также SSH может использовать сжатие передаваемых данных для последующего их шифрования, что удобно, например, для удалённого запуска клиентов X Window System.

Большинство хостинг-провайдеров за определённую плату предоставляет клиентам доступ к их домашнему каталогу по SSH. Это может быть удобно как для работы в командной строке, так и для удалённого запуска программ (в том числе графических приложений).

Техническая информация о протоколе

SSH — это протокол прикладного уровня. SSH-сервер обычно прослушивает соединения на TCP-порту 22. Спецификация протокола SSH-2 содержится в RFC 4251. Для аутентификации сервера в SSH используется протокол аутентификации сторон на основе алгоритмов электронно-цифровой подписи RSA или DSA, но допускается также аутентификация при помощи пароля (режим обратной совместимости с Telnet) и даже ip-адреса хоста (режим обратной совместимости с rlogin).

  1. Аутентификация по паролю наиболее распространена. При каждом подключении подобно https вырабатывается общий секретный ключ для шифрования трафика.
  2. При аутентификации по ключевой паре предварительно генерируется пара открытого и закрытого ключей для определённого пользователя. На машине, с которой требуется произвести подключение, хранится закрытый ключ, а на удалённой машине — открытый. Эти файлы не передаются при аутентификации, система лишь проверяет, что владелец открытого ключа также владеет и закрытым. При данном подходе, как правило, настраивается автоматический вход от имени конкретного пользователя в ОС.
  3. Аутентификация по ip-адресу небезопасна, эту возможность чаще всего отключают.

Для создания общего секрета (сеансового ключа) используется алгоритм Диффи — Хеллмана (DH). Для шифрования передаваемых данных используется симметричное шифрование, алгоритмы AES, Blowfish или 3DES. Целостность передачи данных проверяется с помощью CRC32 в SSH1 или HMAC-SHA1/HMAC-MD5 в SSH2.

Для сжатия шифруемых данных может использоваться алгоритм LempelZiv (LZ77), который обеспечивает такой же уровень сжатия, что и архиватор ZIP. Сжатие SSH включается лишь по запросу клиента, и на практике используется редко.

История и разработка

Версия 1.x

В 1995 году Тату Юлёнен, исследователь из Технологического университета Хельсинки, разработал первую версию протокола (теперь называемого SSH-1), вызванную атакой по сбору пароля в его университетской сети. Целью SSH было заменить более ранние протоколы rlogin, TELNET, FTP [16] и rsh, которые не обеспечивали строгую аутентификацию и конфиденциальность. Юлёнен выпустил свою реализацию как бесплатное ПО в июле 1995 года, и инструмент быстро завоевал популярность. К концу 1995 года база пользователей SSH выросла до 20 000 пользователей в пятидесяти странах.

В декабре 1995 года Юлёнен основал SSH Communications Security для продвижения и разработки SSH. Первоначальная версия программного обеспечения SSH использовала различные части свободного программного обеспечения, такие как GNU libgmp, но более поздние версии, выпущенные SSH Communications Security, превратились во всё более проприетарное программное обеспечение.

Было подсчитано, что к 2000 году количество пользователей выросло до 2 миллионов.

Версия 2.x

«Secsh» было официальным названием группы инженеров Интернета (IETF) для рабочей группы IETF, ответственной за версию 2 протокола SSH. В 2006 году обновлённая версия протокола SSH-2 была принята в качестве стандарта. Эта версия несовместима с SSH-1. SSH-2 отличается как безопасностью, так и улучшенными функциями по сравнению с SSH-1. Например, лучшая безопасность достигается за счёт обмена ключами Диффи-Хеллмана и строгой проверки целостности с помощью кодов аутентификации сообщений. Новые функции SSH-2 включают возможность запускать любое количество сеансов оболочки через одно соединение SSH. Из-за превосходства и популярности SSH-2 над SSH-1 некоторые реализации, такие как libssh (v0.8.0 +), Lsh и Dropbear, поддерживают только протокол SSH-2.

Версия 1.99

В январе 2006 года, намного позже, чем была создана версия 2.1, RFC 4253 указывал, что сервер SSH, который поддерживает как 2.0, так и предыдущие версии SSH, должен идентифицировать свою прототипную версию как 1.99. Это не актуальная версия, а метод определения обратной совместимости.

OpenSSH и OSSH

В 1999 году разработчики, желающие иметь свободную реализацию, вернулись к старому выпуску 1.2.12 исходной программы SSH, который последний раз выпускался под лицензией с открытым исходным кодом. Пакет OSSH Бьорна Грёнвалля был разработан на основе этой кодовой базы. Вскоре после этого разработчики OpenBSD использовали код Грёнвалля и, проделав большую работу над ним, создали OpenSSH, который поставлялся с версией OpenBSD 2.6. Начиная с этой версии, была сформирована ветвь «переносимости» для переноса OpenSSH на другие операционные системы.

По состоянию на 2005 год OpenSSH был самой популярной реализацией SSH, входящей по умолчанию в большое количество операционных систем. OSSH тем временем устарел. OpenSSH продолжает поддерживаться и поддерживает протокол SSH-2, исключив поддержку SSH-1 из кодовой базы с выпуском OpenSSH 7.6Шаблон:Нет АИ.

Стандарты и программные реализации

Первая версия протокола, SSH-1, была разработана в 1995 году исследователем Тату Улёненом из Технологического университета Хельсинки (Финляндия). SSH-1 был написан для обеспечения большей конфиденциальности, чем протоколы rlogin, telnet и rsh. В 1996 году была разработана более безопасная версия протокола, SSH-2, несовместимая с SSH-1. Протокол приобрёл ещё большую популярность, и к 2000 году у него было около двух миллионов пользователей. В настоящее время под термином «SSH» обычно подразумевается именно SSH-2, так как первая версия протокола ввиду существенных недостатков сейчас практически не применяется.

В 2006 году протокол был утверждён рабочей группой IETF в качестве Интернет‐стандарта.

Распространены две реализации SSH: частная коммерческая и бесплатная свободная. Свободная реализация называется OpenSSH. К 2006 году 80 % компьютеров сети Интернет использовало именно OpenSSH. Частная реализация разрабатывается организацией SSH Communications Security, которая является стопроцентным подразделением корпорации Tectia<ref></ref>, она бесплатна для некоммерческого использования. Эти реализации содержат практически одинаковый набор команд.

Протокол SSH-1, в отличие от протокола telnet, устойчив к атакам прослушивания трафика («снифинг»), но неустойчив к атакам «человек посередине». Протокол SSH-2 также устойчив к атакам путём присоединения посередине (Шаблон:Lang-en), так как невозможно включиться в уже установленную сессию или перехватить её.

Для предотвращения атак «человек посередине» при подключении к хосту, ключ которого ещё не известен клиенту, клиентское ПО показывает пользователю «слепок ключа» (Шаблон:Lang-en). Рекомендуется тщательно сверять показываемый клиентским ПО «слепок ключа» со слепком ключа сервера, желательно полученным по надёжным каналам связи или лично.

Поддержка SSH реализована во всех UNIX‑подобных системах, и на большинстве из них в числе стандартных утилит присутствуют клиент и сервер ssh. Существует множество реализаций SSH-клиентов и для не-UNIX ОС. Большую популярность протокол получил после широкого развития анализаторов трафика и способов нарушения работы локальных сетей, как альтернативное небезопасному протоколу Telnet решение для управления важными узлами.

Для работы по SSH нужен SSH-сервер и SSH-клиент. Сервер прослушивает соединения от клиентских машин и при установлении связи производит аутентификацию, после чего начинает обслуживание клиента. Клиент используется для входа на удалённую машину и выполнения команд.

Для соединения сервер и клиент должны создать пары ключей — открытых и закрытых — и обменяться открытыми ключами. Обычно используется также и пароль.

SSH-серверы

  • BSD: OpenSSH
  • Linux: dropbear, lsh-server, openssh-server, ssh, Tectia SSH Server
  • Windows: freeSSHd, copssh, WinSSHD, KpyM Telnet/SSH Server, MobaSSH, OpenSSH через Cygwin<ref></ref>, Tectia SSH Server

SSH-клиенты и оболочки

  • GNU/Linux, *BSD: kdessh, lsh-client, openssh-client, putty, ssh, Vinagre, Tectia SSH (SSH Communications Security) Client
  • MS Windows и Windows NT: PuTTY\KiTTY, SecureCRT, ShellGuard, Axessh, ZOC, SSHWindows, ProSSHD, XShell, Tectia SSH (SSH Communications Security) Client
  • MS Windows Mobile: PocketPuTTy, mToken, sshCE, PocketTTY, OpenSSH, PocketConsole, Tectia SSH (SSH Communications Security) Client
  • Mac OS: iTerm2, NiftyTelnet SSH, vSSH, Шаблон:Нп5
  • Symbian OS: PuTTY
  • Java: MindTerm, AppGate Security Server
  • J2ME: MidpSSH
  • iPhone: i-SSH, ssh (в комплекте с Terminal), Termius, OpenTerm, LibTerm, Shelly
  • Android: connectBot, Admin Hands, Server Auditor, JuiceSSH
  • Blackberry: BBSSH
  • MAEMO 5: OpenSSH
  • MeeGo 1.2 Harmattan: OpenSSH

Советы по безопасности использования SSH

  1. Запрет на удалённый root-доступ.
  2. Запрет подключения с пустым паролем или отключение входа по паролю.
  3. Выбор нестандартного порта для SSH-сервера.
  4. Использование длинных SSH2 RSA-ключей (2048 бит и более). Системы шифрования на основе RSA считаются надёжными, если длина ключа не менее Шаблон:Число<ref></ref>.
  5. Ограничение списка IP-адресов, с которых разрешён доступ (например, настройкой файрвола).
  6. Запрет доступа с некоторых потенциально опасных адресов.
  7. Отказ от использования распространённых или широко известных системных логинов для доступа по SSH.
  8. Регулярный просмотр сообщений об ошибках аутентификации.
  9. Установка систем обнаружения вторжений (IDS)Шаблон:Нет АИ.
  10. Использование ловушек, подделывающих SSH-сервис (honeypot).
  11. Реализация технологии.

OpenSSH (Шаблон:Lang-enоткрытая безопасная оболочка) — набор программ, предоставляющих шифрование сеансов связи по компьютерным сетям с использованием протокола SSH. Он был создан под руководством Тео де Раадта как открытая альтернатива проприетарного ПО от SSH Communications Security.

История

OpenSSH был создан командой OpenBSD как альтернатива SSH, который все ещё является проприетарным ПО. Разработчики OpenSSH утверждают, что он более безопасен чем оригинальный Secure Shell, благодаря их политике чистки и аудита кода. Хотя исходный код также длительное время был доступен для оригинального SSH<ref></ref>, ограничения его лицензии изначально делали OpenSSH более привлекательным проектом для большинства программистов.

OpenSSH впервые появился в OpenBSD 2.6.

В версии 5.9 вышедшей 6 сентября 2011 появился экспериментальный режим «песочницы», с ограничениями на определённые системные вызовы. Цель этого — предотвращение атаки на другие узлы сети, например, посредством запуска прокси или открытия сокетов.

Торговые марки

В феврале 2001 года, Тату Илонен (Шаблон:Lang-fi), председатель и технический директор SSH Communications Security, сообщил через почтовую рассылку OpenSSH, что после общения с ведущими разработчиками OpenSSH компания утвердила право собственности на торговые марки «SSH» и «Secure Shell». Он также искал возможности изменить название протокола на SecSH или secsh и предложил сменить имя OpenSSH, во избежание судебных исков.

В то же время, «SSH», «Secure Shell» и «ssh» были использованы в документах определяющих протокол как открытый стандарт и было проделано много работы без принадлежности к торговым маркам. Были высказаны сомнения в правильности претензий, ведь прошло уже 6 лет с создания компании и тем моментом, когда она начала защищать торговую марку от свободных альтернатив, вроде OpenSSH, и что только OpenSSH подвергся их судебным нападкам.

Оба разработчика OpenSSH и Илонен были членами рабочей группы IETF, разрабатывающей новые стандарты, которые после небольшого обсуждения отвергла любые притязания Илонена на переименование протокола, ссылаясь на то, что это создаст нежелательный прецедент для других торговых марок. Члены рабочей группы утверждали, что обозначения «Secure Shell» и «SSH» являются базовыми понятиями и не могут являться торговыми марками.

Переносимость

Частично потому, что OpenSSH необходимо выполнять аутентификацию, выполнение которой может сильно отличаться на различных операционных системах, была создана мощная инфраструктура для обеспечения переносимости. То, что не включалось напрямую в OpenBSD, было выделено отдельно группой разработчиков в составе Дамьена Миллера (Шаблон:Lang-en), Филиппа Хэндса (Шаблон:Lang-en) и других как субпроект Шаблон:Lang-en2. Теперь параллельно и одновременно с релизом OpenSSH «для OpenBSD» стали выпускаться так называемые «Шаблон:Lang-en2». Эти релизы обозначаются в конце буквой «p», например: Шаблон:Lang-en2. Такая организация процесса разработки позднее стала использоваться и в других проектах, разрабатываемых внутри OpenBSD, например, OpenNTPD.

Состав

Набор OpenSSH содержит следующие компоненты:

ssh
Замена для rlogin и telnet.
scp
Замена для rcp, использующая в современных версиях OpenSSH протокол SFTP (ранее использовался менее надёжный и гибкий SCP).
sftp
Замена для FTP-клиента, использующая протокол SFTP.
sshd
Демон, собственно предоставляющий защищённый доступ к ресурсам. Включает реализацию серверной части SFTP, пригодную для организации chroot-доступа для пользователей без необходимости копирования каких-либо файлов внутрь chroot.
sftp-server
Отдельная реализация подсистемы SFTP (серверная часть). Обладает бо́льшими возможностями, чем встроенная в sshd.
ssh-keygen
Генератор пар ключей.
ssh-keysign
Утилита для проверки ключей хостов. Задействуется при использовании аутентификации по хостам (аналогично rsh) вместо проводимой по умолчанию аутентификации по пользователям.
ssh-keyscan
Вспомогательная утилита. Позволяет собирать публичные ключи с других хостов.
ssh-agent
Вспомогательная утилита. Поддерживает кэш закрытых ключей. Кэширование позволяет избегать частого ввода пароля для расшифровки ключей перед их использованием.
ssh-add
Вспомогательная утилита. Добавляет ключи в кэш ssh-agent.

Безопасные туннели

Перенаправление портов

Большинство программ для установления соединения используют протокол TCP, трафик которого можно передавать через безопасный туннель. Таким образом можно устанавливать множество дополнительных TCP-соединений поверх одного SSH-соединения. Это удобно для сокрытия соединений и шифрования протоколов, которые являются небезопасными, а также для обхода ограничений фаерволлов. UDP-соединения иногда тоже возможно туннелировать при помощи дополнительных программ, таких как netcat. Простыми для туннелирования являются такие протоколы как, например, HTTP, POP3 и VNC.

Перенаправление портов возможно в любую сторону.

Кроме того, некоторое ПО может автоматически использовать OpenSSH для создания туннеля. Например DistCC, CVS, rsync, и fetchmail.

Из протоколов, которые сложнее туннелировать, стоит отметить FTP, который часто можно заменить SFTP, и SMB. В некоторых операционных системах удаленные файловые системы можно монтировать через ssh используя shfs, lufs и другие аналогичные компоненты.

X Window System

OpenSSH позволяет безопасно организовывать подключения к X Window System с учётом «переворота» семантики: хост-клиент SSH для X Window System является сервером, и наоборот. Для этого OpenSSH осуществляет дополнительные операции вроде установки переменной окружения DISPLAY.

SOCKS

OpenSSH возможно использовать как специальный SOCKS прокси сервер поддерживающий более гибкое проксирование, чем просто перенаправление портов.

VPN

Начиная с версии 4.3, OpenSSH может использовать туннельные сетевые интерфейсы 2-го и 3-го уровней модели OSI (tun). Таким образом можно организовать защищённую VPN и обойтись без необходимости переделки приложений для поддержки SOCKS.

Аутентификация

OpenSSH сервер может аутентифицировать пользователей, используя встроенные механизмы аутентификации:

  • Публичные ключи,
  • Клавиатурный ввод (пароли и запрос-ответ),
  • Kerberos/GSS-API.

В дополнение OpenSSH Portable обычно может использовать методы аутентификации, доступные в конкретной операционной системе, например, BSD Authentication или PAM.

См. Также

HQ-SRV и BR-SRV

apt-get update

apt-get install openssh-server

*При установке, могут возникнуть ошибки с работой пакета, в таком случае пишем systemctl daemon-reload Дополнительно повторно проводим команду установки пакета

systemctl enable --now sshd

mcedit /etc/openssh/sshd_config

#Port 22 - изменяем на "port 2024" # - убираем

#MaxAuthTries 6 изменить "6" на "2"

в строке #AllowGroups wheel users - добавить снизу AllowUsers sshuser

в строке #no default banner path - добавить снизу #Banner 42admbanner

mcedit /etc/42admbanner - прописать Authorized access only

systemctl restart sshd

Проверяем работу с другого устройства (HQ-RTR) - ssh sshuser@192.168.1.2