Что такое Secure Shell (SSH) и как его правильно использовать

Что такое Secure Shell (SSH) и как его правильно использовать

Лучшие практики безопасности куда проще, чем кажутся на первый взгляд.

image

Навигация по панели управления вашего сайта WordPress может предоставить значительный контроль над его функциональностью и внешним видом. Однако что касается управления сервером, тут WordPress не предлагает вариантов для прямого взаимодействия. На помощь приходит Secure Shell Access (SSH).

SSH — это протокол, который обеспечивает безопасный и эффективный способ подключения к вашему веб-сайту или веб-серверу для внесения любых изменений.

В этой статье мы углубимся в то, что такое Secure Shell (SSH), как он работает и почему он полезен. Мы рассмотрим всё: от основ подключения по SSH до общих команд и рекомендаций по обеспечению безопасной связи и передачи файлов.

Что вообще такое Secure Shell (SSH)?

Secure Shell или SSH — это сетевой протокол связи, который обеспечивает безопасный метод взаимодействия компьютеров и обмена данными через незащищённую сеть.

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

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

Пример подключения SSH с использованием OpenSSH в терминале Windows

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

Представьте, что вы работаете удалённо и подключаетесь к общедоступной сети Wi-Fi для удалённого доступа к серверу вашего веб-сайта. Без SSH ваши данные для входа и все передаваемые данные потенциально могут быть перехвачены любым, кто прослушивает эту сеть.

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

Краткая история SSH

Ранние интернет-протоколы, такие как Telnet и FTP, в первую очередь были ориентированы на подключение. Эти протоколы передавали данные (включая конфиденциальную информацию, например пароли) в виде обычного текста. Это сделало их уязвимым для так называемого «сниффинга» — метода, с помощью которого злоумышленники могли легко перехватывать и читать передаваемые данные.

В 1995 году, после атаки со сниффингом паролей в Хельсинкском технологическом университете, один из студентов этого университета по имени Тату Юлёнен быстро обнаружил уязвимости в интернет-коммуникациях.

Чтобы решить эту проблему, Тату разработал SSH (Secure Shell), зашифрованный протокол, предназначенный для защиты передачи данных и гарантирующий, что пароли и конфиденциальная информация не будут переданы в открытом виде. Это нововведение, принятое в рамках одного университета, в конечном итоге превратилось в важный инструмент для безопасной связи в глобальном масштабе.

Как работают открытые и закрытые ключи SSH?

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

Для этого SSH использует пары открытого и закрытого ключей. Когда пользователь хочет получить доступ к серверу, он использует свой закрытый ключ, который соответствует открытому ключу, хранящемуся на сервере. Если ключи совпадают, доступ предоставляется.

Давайте посмотрим на различные этапы этого процесса.

Этап 1. Обмен ключами

Сначала клиент отправляет серверу запрос на соединение SSH вместе с открытым ключом клиента.

Обмен закрытыми и открытыми ключами SSH

Этап 2. Проверка ключа

Получив открытый ключ клиента, сервер отправляет клиенту случайный текст. Затем клиент шифрует этот случайный текст с помощью закрытого ключа и отправляет его обратно на сервер.

Проверка частного открытого ключа SSH

Поскольку это шифрование с асимметричным ключом, сервер теперь может использовать открытый ключ клиента для расшифровки полученного текста. Если расшифрованный текст соответствует тексту, отправленному сервером, сервер подтверждает, что у него правильный открытый ключ, и отправляет подтверждение клиенту.

Этап 3. Передача данных

После аутентификации соединения начинается непосредственно передача данных.

Установленный сеанс SSH-соединения

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

Преимущества SSH перед FTP

Использование SSH вместо FTP имеет несколько основных преимуществ, большинство из которых связаны с безопасностью веб-сайтов и серверов.

  • Шифрование: SSH шифрует все данные, отправляемые по сети. Это означает, что ваши имена пользователей, пароли и любая другая конфиденциальная информация находятся в безопасности.
  • Аутентификация: SSH использует пары открытого и закрытого ключей для аутентификации, обеспечивая дополнительный уровень безопасности по сравнению с FTP и его парольной защитой.
  • Целостность данных: SSH гарантирует, что отправленные или полученные данные остаются неизменными во время передачи, защищая от несанкционированного доступа или банального повреждения.
  • Переадресация портов: SSH обеспечивает безопасную переадресацию портов, позволяя надёжно туннелировать другие протоколы.
  • Простота использования: современные клиенты SFTP (SSH File Transfer Protocol) имеют удобный интерфейс, что делает переход с программного обеспечения для FTP крайне простым и комфортным.

Как настроить SSH и подключиться к вашему сайту (Windows)

Пользователи Windows могут следовать пошаговым инструкциям ниже, чтобы настроить SSH и подключиться к своему веб-сайту.

Шаг 1. Загрузите и установите SSH-клиент.

Пользователям Windows необходимо будет использовать приложение командной строки, такое как Cmder, или выделенный SSH-клиент, чтобы установить SSH-соединение с веб-сайтом. В этом примере мы будем использовать PuTTY, поэтому для начала стоит загрузить последнюю версию PuTTY с официального сайта и установите её на свой компьютер.

Шаг 2. Подключитесь к серверу с помощью SSH.

Откройте PuTTY, где вам будет предложено ввести имя хоста и указать номер порта. На первый взгляд это даже похоже на подключение по FTP.

SSH-клиент PuTTY для Windows имеет открытый исходный код и прост в использовании.

Введите хост или IP-адрес вашего сервера. Расположение этой информации зависит от вашего хостинг-провайдера, но многие провайдеры предоставляют к ней доступ через вашу панель управления.

После ввода имени хоста и номера порта в PuTTY и нажатия кнопки «Открыть» запустится командная строка. Теперь вам будет предложено ввести имя пользователя и пароль. Если они не работают, проверьте панель управления хостингом на наличие раздела «Доступ по SSH» для получения более подробных инструкций.

Шаг 3. Взаимодействуйте с вашим сервером через командную строку.

Командная строка позволяет выполнять различные действия, такие как перемещение файлов, удаление папок, создание новых каталогов и изменение разрешений пользователя с помощью соответствующих команд.

Например, после входа на сервер вашего сайта через SSH вы окажетесь в корневой папке сервера. Чтобы увидеть, какие файлы и каталоги он содержит, введите команду «ls» и нажмите Enter. Имена, выделенные синим текстом, представляют собой папки, а белый текст — обычные файлы.

Чтобы получить доступ к конкретной папке, используйте следующую команду:

cd имя_каталога

Чтобы вернуться в предыдущий каталог, наберите «cd» и примените без каких-либо дополнений. По мере того, как вы освоитесь с командной строкой, вы сможете изучить более сложные команды и функции.

Как подключиться к вашему сайту через SSH (Linux и macOS)

Пользователи macOS или Linux могут просто использовать системную командную строку для установки SSH-соединения с вашим веб-сайтом, не прибегая к помощи сторонних программ.

Используя терминальную оболочку, напишите следующую команду:

ssh exampleuser@serverip

Чтобы продолжить, вам нужно будет заменить exampleuser своим фактическим именем пользователя, а serverip вашим общим или выделенным IP-адресом.

Подключение к WordPress через SSH

Хотя панель администратора WordPress удобна для пользователя и оснащена множеством функций, навигация по ней иногда может быть длительным и не самым удобным процессом. Для более простого метода управления вашим веб-сайтом вы можете рассмотреть возможность использования интерфейса командной строки WordPress (WP-CLI).

WP-CLI предоставляет высокоэффективное и надёжное решение для управления вашей установкой WordPress. Он позволяет обновлять основные файлы и плагины, настраивать многосайтовые установки и даже создавать резервные копии вашего веб-сайта WordPress.

С помощью официального инструмента WP-CLI вы можете напрямую взаимодействовать со средой WordPress с помощью текстовых команд. Эти команды вводятся в окно Secure Shell, которое подключено к серверу вашего веб-сайта.

Общие команды Secure Shell (SSH) в Linux

Чтобы помочь новым пользователям легко ориентироваться в среде своего сервера, рекомендуем воспользоваться вот этим списком из самых распространённых команд SSH, которые вы можете использовать для выполнения задач через оболочку терминала.

Лучшие практики безопасности SSH

Существует ряд шагов, которые вы можете предпринять, чтобы минимизировать риск для протокола SSH и защитить ваш сервер Linux или среду VPS.

1. Измените порт SSH по умолчанию

Чтобы свести к минимуму потенциальные автоматические атаки на ваш сервер, используйте нестандартный порт для вашего SSH-соединения. Это помогает снизить вероятность появления вашего сервера на радаре хакеров.

Как изменить номер порта SSH:

  • Подключитесь к вашему серверу через SSH, как обычно.
  • Переключитесь на пользователя root с помощью команды «su».
  • Отредактируйте файл конфигурации sshd в каталоге «etc/ssh/» с помощью текстового редактора. Воспользуйтесь командой «nano /etc/ssh/sshd_config», чтобы отредактировать файл конфигурации.
  • Найдите строку «Порт 22» и измените номер порта на другой по вашему усмотрению.
  • Выйдите из редактора и сохраните изменения.
  • Перезапустите службу sshd с помощью «service sshd restart».
  • Убедитесь, что SSH прослушивает указанный вами порт, подключившись к нему.

Какой порт SSH по умолчанию?

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

2. Повысьте безопасность с помощью пар ключей SSH.

Пары ключей SSH — один из наиболее безопасных методов аутентификации клиент-сервер. Чтобы настроить ключи SSH, сгенерируйте пару ключей на клиентском компьютере, который используется для подключения к серверу. После создания пары ключей поместите открытый ключ на нужный сервер с помощью инструмента «ssh-copy-id».

Как генерировать пары частных и общедоступных ключей SSH в Windows

Генератор ключей PuTTY позволяет легко генерировать пары открытого и закрытого ключей для Windows:

Putty Windows Key Generator легко генерирует новые пары открытого и закрытого ключей для Windows

Чтобы начать, просто откройте генератор ключей Putty, затем нажмите кнопку «Создать», чтобы создать новую пару открытого и закрытого ключей для вашего использования.

Как генерировать пары частных/публичных ключей SSH в Linux/macOS

Чтобы создать пару частного/открытого ключей для вашей среды Linux, вы можете использовать инструмент ssh-keygen, который представляет собой утилиту командной строки. Просто выполните команду «ssh-keygen» на своём терминале, чтобы сгенерировать пару частного и открытого ключей SSH.

3. Отключить root-вход по SSH на сервере

Из соображений безопасности рекомендуется отключить вход в систему с правами root и использовать обычную учётную запись и команду «su» — для переключения на пользователя root.

Процесс создания пары открытого и закрытого ключей в Linux и macOS с терминала

Важно: убедитесь, что вы добавили учётную запись, которая может получать root-доступ, прежде чем фактически отключать root-вход.

4. Отключить вход по паролю

Если вы используете ключи для аутентификации, рассмотрите возможность полного отключения аутентификации по паролю на сервере. Это добавляет ещё один уровень защиты от атак методом брутфорс.

Чтобы отключить вход по паролю для SSH, необходимо:

  • Войти на удалённый сервер

Используйте команду SSH или клиент, например PuTTY, для входа в систему:

ssh root@serverip 
(где serverip — IP-адрес вашего сервера)
  • Создайте новую учётную запись пользователя.

В системе на базе Linux используйте следующую команду, чтобы создать нового пользователя с именем «user»:

useradd -m -s /bin/bash user

Затем установите пароль пользователя с помощью команды «passwd»:

passwd user 

Добавьте пользователя в группу sudo (повышенные привилегии):

— для Ubuntu/Debian

usermod -aG sudo user 

— для CentOS/RHEL/Fedora

usermod -aG wheel user
  • Установите ключи SSH на удалённый компьютер.

Создайте пару ключей:

ssh-keygen -t rsa 

Установите открытый ключ на удалённом сервере с помощью команды «ssh-copy-id» следующим образом:

ssh-copy-id -i $HOME/.ssh/id_rsa.pub user@serverip
  • Отключить root-вход и вход по паролю.

Войдите на сервер, используя вновь созданного пользователя:

ssh user@serverip

Отредактируйте файл «/etc/ssh/sshd_config»:

sudo vi /etc/ssh/sshd_config

Найдите и добавьте или отредактируйте следующие записи:

  • ChallengeResponseAuthentication — установить значение «нет»;
  • PasswordAuthentication — установить значение «нет»;
  • UsePAM — установить «нет»;
  • PermitRootLogin — установить значение «нет»;

Сохраните и закройте файл. Теперь перезагрузите или перезапустите SSH-сервер в Linux командой ниже:

/etc/init.d/ssh reload
  • Проверьте настроенные ограничения доступа

Попробуйте войти в систему как root:

ssh root@serverip 

Вы должны увидеть надпись «Отказано в доступе (открытый ключ)».

Далее попробуйте войти только с паролем:

ssh user@serverip -o PubkeyAuthentication=no

Вы также должны увидеть «Отказано в доступе (открытый ключ)».

Наконец, проверьте все настройки с помощью следующей команды (одной строкой):

sudo sshd -T | grep -E -i 
'ChallengeResponseAuthentication|PasswordAuthentication|UsePAM|PermitRootLogin'

Прежде чем отключать вход с правами root, убедитесь, что вы создали обычную учётную запись пользователя и предоставили этому пользователю разрешение на получение доступа на уровне root с помощью команд «su» или «sudo». Не забывайте перезапускать или перезагружать SSHD после редактирования файла.

5. Ограничить доступ по SSH с помощью iptables

iptables — утилита Linux, которая включена в большинство дистрибутивов Linux и может использоваться для установки правил брандмауэра, которые ограничивают или разрешают трафик на основе IP-адреса, порта или сетевого протокола. Вы можете использовать его для определения правил, которые ограничивают входящий SSH-трафик определённым IP-адресом или подсетью, тем самым повышая безопасность вашего сервера.

Блокировка порта 22, который по умолчанию используется для SSH-подключений, может помочь предотвратить несанкционированный доступ и даже смягчить многие DDoS-атаки. Однако важно убедиться, что вы случайно не заблокируете собственный SSH-трафик.

Вот краткий пример того, как вы можете использовать iptables для ограничения входящего SSH-трафика, разрешая доступ к нему только определённому IP-адресу или подсети.

Замените «123.456.78.90» на IP-адрес, который вы хотите внести в белый список, в команде ниже. Если вы используете подсеть, это может выглядеть примерно так: «10.10.10.0/24»:

sudo iptables -A INPUT -p tcp -s 123.456.78.90 --dport 22 -j ACCEPT

Сохраните правила iptables, чтобы они сохранялись после перезагрузки системы:

 sudo iptables-save

Чтобы просмотреть все правила iptables, используйте команду «iptables -L». Вы также можете добавить параметр «-v» для получения более подробной информации и «-n» для отображения вывода в числовом формате.

Если вы хотите очистить все правила iptables и начать с нуля, используйте команду «iptables -F». Это особенно полезно, если вы не уверены, всё ли настроено правильно.

Почему SSH отлично подходит для обеспечения безопасности веб-сайтов

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

Если вы владелец или администратор веб-сайта и все ещё используете FTP для передачи файлов, самое время подумать о переходе на SSH в качестве более безопасной альтернативы. Учитывая рост числа автоматических атак и вредоносных действий, использование устаревших протоколов, таких как FTP, не стоит риска.

Однако важно помнить, что безопасность — это непрерывный процесс. Регулярные обновления, мониторинг веб-сайтов и своевременное реагирование на потенциальные угрозы необходимы для поддержания безопасной серверной среды.

Лишь сохраняя бдительность и узнавая о новейших методах обеспечения безопасности, вы сможете эффективно бороться с потенциальными угрозами и гарантировать, что ваш веб-сайт останется безопасным и надёжным.

Красная или синяя таблетка?

В Матрице безопасности выбор очевиден

Выберите реальность — подпишитесь