16. Служба ssh

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

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

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

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

Настройка службы ssh осуществляется на следующем уровне конфигурации:

[edit service ssh]

16.1. Настройка серверной части

Для активации службы и обеспечения возможности удалённого подключения к узлу необходимо запустить службу.

Для запуска службы применяется команда:

[edit service ssh]
# set enable

По данной команде служба настраивается на приём SSH-соединений на всех интерфейсах через TCP-порт 22.

Для изменения номера порта прослушивания по умолчанию применяется команда:

[edit service ssh]
# set listen port <port-number>

где <port-number> – число от 1 до 65535.

Для настройки прослушивания соединений на указанных IP-адресах (и портах) интерфейсов применяется команда:

[edit service ssh]
# set listen ipv4|ipv6 address <address> [port <port-number>]

где

  • ipv4|ipv6 – уровень конфигурации IPv4/IPv6;

  • <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:...:H в зависимости от уровня конфигурации;

  • <port-number> – число от 1 до 65535.

Параметр port является необязательным. Если в команде параметр не задан, используется значение номера порта по умолчанию.

Для настройки прослушивания соединений на всех IPv4-адресах применяется команда:

[edit service ssh]
# set listen ipv4 address 0.0.0.0 [port <port-number>]

где <port-number> – число от 1 до 65535.

Параметр port является необязательным. Если в команде параметр не задан, используется значение номера порта по умолчанию.

Для настройки прослушивания соединений на всех IPv6-адресах применяется команда:

[edit service ssh]
# set listen ipv6 address :: [port <port-number>]

где <port-number> – число от 1 до 65535.

Параметр port является необязательным. Если в команде параметр не задан, используется значение номера порта по умолчанию.

16.1.1. Настройка контроля доступа

По умолчанию служба предоставляет доступ извне ко всем учётным записям администраторов, за исключением учётной записи администратора root, которая является служебной. Для предоставления удалённого доступа к учётной записи root применяется команда:

[edit service ssh]
# set access root-login

В службе ssh предусмотрены несколько режимов аутентификации: с использованием пароля и с использованием ключевой информации (без пароля). По умолчанию активированы оба режима работы. Для отключения аутентификации с использованием паролей и применения только аутентификации по ключам применяется команда:

[edit service ssh]
# set access no-password

В службе реализованы различные настройки для обеспечения контроля доступа: возможно указание учётных записей и IP-адресов, с которых разрешено или запрещено удалённое управление. Кроме того, при определении имени учётной записи поддерживаются шаблоны, по которым осуществляется проверка на соответствие правилу доступа. Шаблон может содержать символ “*” для обозначения набора символов любой длины, в том числе нулевой, и символ “?” для обозначения одного символа. При отсутствии IP-адреса в настройке правило применяется для любого адреса.

Для разрешения доступа с указанной учётной записи (и IP-адреса) применяется команда:

[edit service ssh]
# set access allow login <user-name> [address <address>]

где

  • <user-name> – строка;

  • <address> – IPv4-адрес в формате A.B.C.D[/mask] или IPv6-адрес в формате A:B:...:H[/mask].

По данной команде предоставляется доступ для указанных учётных записей. Если указан IP-адрес (диапазон адресов, указанный с помощью маски), он также проверяется на соответствие правилу. Подключение учётных записей, которые не соответствуют правилу, отклоняется.

Для запрета доступа с указанной учётной записи (и IP-адреса) применяется команда:

[edit service ssh]
# set access deny login <user-name> [address <address>]

где

  • <user-name> – строка;

  • <address> – IPv4-адрес в формате A.B.C.D[/mask] или IPv6-адрес в формате A:B:...:H[/mask].

По данной команде предоставляется доступ для всех учётных записей, за исключением указанных в команде.

Предупреждение

Приоритет команды deny выше приоритета команды allow. Если используется команда allow, доступ предоставляется только указанным учётным записям (и адресам).

Предупреждение

Команды allow и deny являются наиболее приоритетными при настройке контроля доступа, поэтому для предоставления доступа с учётной записи администратора root необходимо использовать команду access root-login совместно с указанными командами – добавить разрешающее правило для учётной записи администратора root с помощью команд:

[edit service ssh]
# set access root-login
# set access allow login root

16.1.2. Списки доступа

Для осуществления контроля доступа также применимы списки соответствий (доступа). Список может содержать шаблоны имён учётных записей или IP-адресов, для которых разрешён доступ. Для списков возможно отключение аутентификации с использованием паролей. Имена списков используются исключительно для удобства администрирования.

Настройка списков доступа осуществляется на следующем уровне конфигурации:

[edit service ssh access match-list <match-list-name>]

где <match-list-name> – строка.

Для добавления шаблона имени учётной записи в список применяется команда:

[edit service ssh access match-list <match-list-name>]
# set user <pattern>

где <pattern> – строка.

Для добавления шаблона адреса удалённого узла в список применяется команда:

[edit service ssh access match-list <match-list-name>]
# set host <pattern>

где <pattern> – строка.

Для отключения аутентификации с использованием пароля для подключений, соответствующих списку, применяется команда:

[edit service ssh access match-list <match-list-name>]
# set no-password

16.1.2.1. Настройка параметров соединения

Служба ssh позволяет контролировать некоторые параметры уже установленного соединения.

Для определения тайм-аута ожидания сервером (службой ssh) сигнала от клиента применяется команда:

[edit service ssh]
# set access alive-interval <alive-interval-value>

где <alive-interval-value> – число секунд от 0 до 4294967295.

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

Для определения максимального количества попыток повторной передачи данных применяется команда:

[edit service ssh]
# set access alive-count <alive-count-value>

где <alive-count-value> – число от 0 до 4294967295.

16.1.2.2. Настройка параметров беспарольного доступа

Для настройки беспарольного доступа используются открытые ключи. Для предоставления доступа без пароля к ПАК “Фортикс” необходимо добавить открытый ключ удалённого узла в настройки учётной записи в системе.

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

Для добавления значения ключа в настройки учётной записи применяется команда:

# setup login <user-name> ssh-pubkey text <ssh-pubkey-text>

где

  • <user-name> – имя существующей учётной записи;

  • <ssh-pubkey-text> – строка.

Для добавления файла, содержащего открытый ключ удалённого узла, в настройки учётной записи применяется команда:

# setup login <user-name> ssh-pubkey file <ssh-pubkey-file-path>

где

  • <user-name> – имя существующей учётной записи;

  • <ssh-pubkey-file-path> – полное имя файла или имя файла относительно домашней директории пользователя.

Для предоставления ПАК “Фортикс” беспарольного доступа к удалённому узлу необходимо сгенерировать на ПАК “Фортикс” ключевую пару (открытый и закрытый ключ), а затем добавить на удалённый узел полученный открытый ключ.

Для генерации ключевой пары применяется команда:

> ssh key generate [dsa|rsa|ecdsa] [comment <comment-text>]

где

  • dsa|rsa|ecdsa – алгоритм шифрования (по умолчанию – rsa);

  • <comment-text> – строка.

Необязательный параметр comment указывается для записи описания в файл открытого ключа.

16.1.3. Настройка алгоритмов

Служба поддерживает настройку алгоритмов шифрования, аутентификации (MAC), обмена ключей (KEX) и алгоритмов ключей хоста.

Для настройки использования указанного алгоритма шифрования в режиме конфигурации службы применяется команда:

[edit service ssh]
# set algo cipher <algorithm-cipher> true|false

где <algorithm-cipher> – алгоритм шифрования (см. ниже).

Доступные алгоритмы шифрования:

  • des3-cbc – по умолчанию отключён;

  • aes128-cbc – по умолчанию отключён;

  • aes192-cbc – по умолчанию отключён;

  • aes256-cbc – по умолчанию отключён;

  • aes128-ctr – по умолчанию включён;

  • aes192-ctr – по умолчанию включён;

  • aes256-ctr – по умолчанию включён;

  • aes128-gcm-openssh.com – по умолчанию включён;

  • aes256-gcm-openssh.com – по умолчанию включён;

  • chacha20-poly1305-openssh.com – по умолчанию включён.

Для настройки использования указанного алгоритма аутентификации применяется команда:

[edit service ssh]
# set algo mac <algorithm-mac> true|false

где <algorithm-mac> – алгоритм аутентификации (см. ниже).

Доступные алгоритмы аутентификации:

  • hmac-sha1 – по умолчанию включён;

  • hmac-sha1-96 – по умолчанию отключён;

  • hmac-sha2-256 – по умолчанию включён;

  • hmac-sha2-512 – по умолчанию включён;

  • hmac-md5 – по умолчанию отключён;

  • hmac-md5-96 – по умолчанию отключён;

  • umac-64-openssh.com – по умолчанию включён;

  • umac-128-openssh.com – по умолчанию включён;

  • hmac-sha1-etm-openssh.com – по умолчанию включён;

  • hmac-sha1-96-etm-openssh.com – по умолчанию отключён;

  • hmac-sha2-256-etm-openssh.com – по умолчанию включён;

  • hmac-sha2-512-etm-openssh.com – по умолчанию включён;

  • hmac-md5-etm-openssh.com – по умолчанию отключён;

  • hmac-md5-96-etm-openssh.com – по умолчанию отключён;

  • umac-64-etm-openssh.com – по умолчанию включён;

  • umac-128-etm-openssh.com – по умолчанию включён.

Для настройки использования указанного алгоритма обмена ключей применяется команда:

[edit service ssh]
# set algo kex <algorithm-kex> true|false

где <algorithm-kex> – алгоритм обмена ключей (см. ниже).

Доступные алгоритмы обмена ключей:

  • curve25519-sha256 – по умолчанию включён;

  • curve25519-sha256-libssh.org – по умолчанию включён;

  • diffie-hellman-group1-sha1 – по умолчанию отключён;

  • diffie-hellman-group14-sha1 – по умолчанию отключён;

  • diffie-hellman-group14-sha256 – по умолчанию включён;

  • diffie-hellman-group16-sha512 – по умолчанию включён;

  • diffie-hellman-group18-sha512 – по умолчанию включён;

  • diffie-hellman-group-exchange-sha1 – по умолчанию отключён;

  • diffie-hellman-group-exchange-sha256 – по умолчанию включён;

  • ecdh-sha2-nistp256 – по умолчанию включён;

  • ecdh-sha2-nistp384 – по умолчанию включён;

  • ecdh-sha2-nistp521 – по умолчанию включён;

  • sntrup761x25519-sha512-openssh.com – по умолчанию отключён.

Для настройки использования указанного алгоритма формирования ключей хоста применяется команда:

[edit service ssh]
# set algo host-key <algorithm-host-key> true|false

где <algorithm-host-key> – алгоритм формирования ключей хоста.

Доступные алгоритмы формирования ключей хоста:

  • ssh-ed25519 – по умолчанию включён;

  • ssh-ed25519-cert-v01-openssh.com – по умолчанию включён;

  • sk-ssh-ed25519-openssh.com – по умолчанию включён;

  • sk-ssh-ed25519-cert-v01-openssh.com – по умолчанию включён;

  • ssh-rsa – по умолчанию отключён;

  • rsa-sha2-256 – по умолчанию включён;

  • rsa-sha2-512 – по умолчанию включён;

  • ssh-dss – по умолчанию отключён;

  • ecdsa-sha2-nistp256 – по умолчанию включён;

  • ecdsa-sha2-nistp384 – по умолчанию включён;

  • ecdsa-sha2-nistp521 – по умолчанию включён;

  • sk-ecdsa-sha2-nistp256-openssh.com – по умолчанию включён;

  • ssh-rsa-cert-v01-openssh.com – по умолчанию отключён;

  • rsa-sha2-256-cert-v01-openssh.com – по умолчанию включён;

  • rsa-sha2-512-cert-v01-openssh.com – по умолчанию включён;

  • ssh-dss-cert-v01-openssh.com – по умолчанию отключён;

  • ecdsa-sha2-nistp256-cert-v01-openssh.com – по умолчанию включён;

  • ecdsa-sha2-nistp384-cert-v01-openssh.com – по умолчанию включён;

  • ecdsa-sha2-nistp521-cert-v01-openssh.com – по умолчанию включён;

  • sk-ecdsa-sha2-nistp256-cert-v01-openssh.com – по умолчанию включён.

16.2. Команды клиентской части

Для подключения к удалённому узлу применяется команда:

> ssh connect <user-name> <address> [port <port-number>] [source <source-address>] [vrf <vrf-name>]

где

  • <user-name> – учётная запись удалённого узла;

  • <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:...:H или хост SSH-сервера удалённого узла;

  • <port-number> – номер порта от 1 до 65535 SSH-сервера удалённого узла;

  • <source-address> – локальный IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:...:H системы, с которого осуществляется подключение;

  • <vrf-name> – имя виртуальной таблицы маршрутизации (имя интерфейса).

Для копирования файлов c ПАК “Фортикс” на удалённый узел применяется команда:

> ssh put <local-path> <user-name> <address> [port <port-number>] [source <source-address>] [vrf <vrf-name>] [<remote-path>]

где

  • <local-path> – полное имя файла или имя файла относительно домашней директории пользователя в локальной файловой системе ПАК “Фортикс”;

  • <user-name> – учётная запись удалённого узла;

  • <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:...:H или хост SSH-сервера удалённого узла;

  • <port-number> – номер порта от 1 до 65535 SSH-сервера удалённого узла;

  • <source-address> – локальный IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:...:H системы, с которого осуществляется подключение;

  • <vrf-name> – имя виртуальной таблицы маршрутизации (имя интерфейса);

  • <remote-path> – имя файла на удалённом узле.

Для копирования файлов на ПАК “Фортикс” с удалённого узла применяется команда:

> ssh get <user-name> <address> <remote-path> [port <port-number>] [source <source-address>] [vrf <vrf-name>] [<local-path>]

где

  • <user-name> – учётная запись удалённого узла;

  • <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:...:H или хост SSH-сервера удалённого узла;

  • <remote-path> – имя файла на удалённом узле;

  • <port-number> – номер порта от 1 до 65535 SSH-сервера удалённого узла;

  • <source-address> – локальный IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:...:H системы, с которого осуществляется подключение;

  • <vrf-name> – имя виртуальной таблицы маршрутизации (имя интерфейса);

  • <local-path> – полное имя файла или имя файла относительно домашней директории пользователя в локальной файловой системе ПАК “Фортикс”.

Для хранения списка известных SSH-ключей серверов в системе используется файл known_hosts, который расположен в каталоге ssh/ домашней директории администратора:

> ls ssh/
22.03.2024 01:16:36  known_hosts

Файл known_hosts используется для предотвращения атак, связанных с подменой IP-адресов. Файл содержит имя хоста, IP-адрес или ключ сервера и дату последнего обновления информации о сервере. При попытке администратора подключиться к серверу по протоколу SSH служба проверяет наличие записи для данного сервера в файле known_hosts. Если запись присутствует и устарела, служба сообщает о необходимости обновления информации о сервере. Если запись для сервера отсутствует, служба добавляет новую запись и подключается к серверу. Для редактирования файла known_hosts доступны стандартные средства системы.