Установление безопасных сетевых соединений между клиентскими машинами и сервером является неотъемлемой частью общего механизма обеспечения Интернет-безопасности при работе в сети. В частности, это даёт возможность организовать надёжную систему авторизации пользователей и избежать внешнего вмешательства в передаваемый трафик, то есть, взлома. Протокол SSH (Secure Shell) – один из немногих, который в состоянии обеспечить полную защиту данных при условии соблюдения ряда формальных правил при его конфигурировании. Рассмотрим более детально возможности протокола и его корректную настройку.
Характеристики и работа протокола SSH
Будем рассматривать свободную реализацию протокола SSH – OpenSSH, имеющую наибольший уровень распространения и, соответственно, популярности среди Администраторов хостинг-центров.
OpenSSH реализован в виде набора программных компонентов, каждый из которых отвечает за выполнение определённых функций. Приведём некоторые из его основных компонентов:
- Ssh – устанавливает удалённое соединение;
- Sftp – обеспечивает передачу файлов по сети;
- Sshd – даемон на стороне сервера, управляющий организацией доступа к данным;
- Ssh-keygen – генерирует по запросу закрытый и открытый ключи.
Протокол имеет клиент-серверную архитектуру, в которой сервер отвечает за приём запросов на подключение от клиентов на определённый порт (по умолчанию устанавливается порт 22). Далее происходит процесс аутентификации клиентов, и в случае её успешного завершения, сервер «пропускает» клиента в систему.
Методов аутентификации может быть несколько. Укажем основные из них в порядке возрастания степени надёжности:
- По паролю;
- С помощью пары ключей;
- Двухфакторная аутентификация.
Аутентификация по паролю имеет наименьший уровень защищённости в силу своего принципа построения. В этом случае пароль должен постоянно храниться на сервере, что рано или поздно ведёт к его вскрытию независимо от сложности, это только вопрос времени.
С помощью пары ключей можно организовать достаточно надёжную систему защиты от взлома при соблюдении всех формальных правил, к примеру, никому не передавать свой закрытый ключ. Аутентификация клиента в этом случае происходит следующим образом. С помощью утилиты Ssh-keygen генерируется пара символьных последовательностей, одна из которых является личным паролем владельца (закрытый ключ), а другая последовательность (открытый ключ) должна быть передана на машины, к которым владелец впоследствии планирует подключаться и помещена в директорию .ssh/authorized_keys. В процессе аутентификации сервер запросит у клиента закрытый ключ, и, если он соответствует открытому ключу, доступ открывается.
Двухфакторная аутентификация является наиболее надёжным вариантом системы защиты. Сегодня она используется повсеместно – в банкинге, для доступа к почтовым аккаунтам и личным кабинетам пользователей на торговых Интернет-площадках и т. д. Суть её работы заключается в использовании дополнительного фактора безопасности (токена), который передаётся по независимому каналу связи в реальном режиме времени. К примеру, кодовое слово в SMS-сообщении от банка – это дополнительный токен, а GSM-связь – независимый канал передачи.
Возможности SSH позволяют использовать на сервере любой из указанных методов, их комбинацию или все сразу. Предпочтительнее оставлять наиболее надёжные из них.
Средства управления протоколом SSH
Управлять протоколом можно в командном режиме с терминала, или же изменяя значения параметров конфигурационных файлов, к которым относятся:
- Системный файл ssh_config;
- Пользовательский файл с именем config;
- Серверный файл sshd_config.
Приоритет указанных средств управления следующий (в порядке убывания):
- Команды с параметрами в терминальном режиме;
- Установки пользовательского файла конфигурации;
- Установки системного и серверного файлов конфигурации.
Используя установки конфигурационных файлов можно без труда обеспечить требуемый уровень защиты сетевого соединения или системы аутентификации клиента. Ниже будет рассмотрен один из вариантов защиты.
Параметры безопасности
Условно можно выделить группу параметров конфигурационных файлов SSH, которые напрямую или косвенно влияют на уровень защиты соединения или способ организации аутентификации клиентов. Приведём некоторые из них:
AuthenticationMethods | устанавливает действующие методы аутентификации |
PasswordAuthentication | устанавливает или запрещает аутентификацию по паролю |
PubkeyAuthentication | устанавливает или запрещает аутентификацию по открытому ключу |
ClientAliveInterval | определяет время, когда отсутствуют какие-либо действия со стороны клиента |
MaxAuthTries | определяет максимальное количество попыток подключения со стороны клиента в пределах соединения |
PermitRootLogin | разрешает или запрещает удалённое подключение к серверу с правами root-пользователя |
AllowUser, DenyUser | определяют круг пользователей, которым разрешена (AllowUser) или запрещена (DenyUser) регистрация в системе |
Port | устанавливает порт для подключения клиентов |
CheckHostIP | разрешает или запрещает проверку IP-адреса по перечисленным в файле know_hosts адресам. Это адреса компьютеров, с которыми ранее уже устанавливались соединения, то есть, адреса, заслуживающие доверия. В нём также фиксируются их открытые ключи. |
Практическая реализация схемы защиты
На нашем сервере под управлением ОС Ubuntu 22.04 выставим нужные значения параметров безопасности в конфигурационных файлах SSH.
В терминале с помощью редактора nano откроем содержимое системного файла ssh_config, где и произведём нужные настройки:
$ nano /etc/ssh/ssh_config
Мы изменили значения параметров безопасности, установленные по умолчанию на следующие:
PasswordAuthentication | no |
PubkeyAuthentication | yes |
MaxAuthTries | 3 |
PermitRootLogin | no |
AllowUser | sany, serg |
Port | 27 |
CheckHostIP | yes |
В результате мы получили схему защиты, в которой:
- Запрещёно подключение по паролю;
- Установлена аутентификация на уровне открытого ключа;
- Установили максимальное количество попыток подключения в пределах одного соединения – 3, по умолчанию устанавливается значение 6;
- Запретили удалённое подключение с правами root;
- Ограничили группу пользователей, допущенных для регистрации в системе;
- Сменили порт, установленный по умолчанию на другой, под номером 27;
- Разрешили сверку IP-адреса клиента со списком адресов, зафиксированных в know_hosts. Это означает, что связь будет устанавливаться только с проверенными ранее машинами.
Мы реализовали схему защиты исключительно с помощью средств управления протоколом SSH, не прибегая к стороннему программному обеспечению, например, к такому, как IPTABLES и другому подобному, что, во-первых: ускоряет обработку данных, во-вторых: упрощает процесс настройки.
Конечно же, можно использовать разные схемы защиты в зависимости от конкретной ситуации, однако базовые элементы, которые мы здесь привели, всё равно должны присутствовать.