Перейти к содержанию

Настройка защищенного SSH в Debian

Здесь кратко описана настройка сервера ssh, а также генерация и передача ключа пользователя на сервер. Для этого примера настройка выполнялась в Debian 12.

Генерация ключа пользователя

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

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

При генерации ключа будет создано два файла: один из них будет содержать секретную (закрытую/приватную) часть ключа, а другой - открытую (публичную) часть. Файл закрытой части ключа необходимо держать в надежном хранилище и исключать его распространения, а файл открытой части можно передавать на серверы, где вам необходимо проходить аутентификацию.

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

Выполним генерацию ключевой пары:

ssh-keygen -t ed25519 -C "COMMENT" -f "FILENAME"

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

Передача ключа на сервер

Есть несколько способов передачи файла с открытой частью ключа на сервер:

  • с использованием физического носителя;
  • с использованием утилиты ssh-copy-id;
  • с использованием буфера обмена;
  • путем копирования файла на сервер.

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

Конфигурация сервера ssh

Конфигурация сервера выполняется путем редактирования файла конфигурации /etc/ssh/sshd_config. В этом файле содержатся все необходимые параметры для работы.

Чтобы проверить корректность параметров конфигурации можно выполнить:

sshd -T

Если ошибок нет, можно применить настройки, перезапустив сервер:

systemctl restart sshd

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

systemctl status sshd

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

AddressFamily inet
AllowAgentForwarding no
AllowStreamLocalForwarding no
AllowTcpForwarding no
# AllowUsers administrator@...
AuthenticationMethods publickey
AuthorizedKeysFile /etc/ssh/authorized-keys/%u
Banner none
DebianBanner no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
ClientAliveCountMax 1
ClientAliveInterval 300
DisableForwarding yes
KbdInteractiveAuthentication no
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha256
HostKeyAlgorithms -ecdsa-sha2-nistp256
# ListenAddress ...
LoginGraceTime 20
LogLevel VERBOSE
MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128-etm@openssh.com
MaxAuthTries 3
PermitEmptyPasswords no
PermitRootLogin no
PubkeyAuthentication yes
SyslogFacility AUTHPRIV
# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
X11Forwarding no
X11UseLocalhost no
Compression no
MaxSessions 2
# Port ...
TCPKeepAlive no
UseDNS no
UsePAM yes
# Match User USERNAME
#  ChrootDirectory /home/...
#  AuthenticationMethods publickey password
#  PasswordAuthentication yes

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

На сервере должна быть создана директория /etc/ssh/authorized-keys/, в которую необходимо помещать файлы с открытыми частами ключей пользователей. Имя каждого такого файла должно быть эквивалентным имени пользователя.

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

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

Согласно указанной выше конфигурации, файлы открытых частей ключей всех пользователей размещаются в директории /etc/ssh/authorized-keys. Установите для этой директорию права 755 (владелец по-умолчанию "root" имеет полные права, группа и остальные - только чтение и выполнение):

chmod 755 /etc/ssh/authorized-keys

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

chown USERNAME:USERNAME /etc/ssh/authorized-keys/USERNAME
chmod 400 /etc/ssh/authorized-keys/USERNAME

Проверка безопасности

Для проверки настройки безопасности вашей конфигурации рекомендуется использование сканеров безопасности. Одним из таких сканеров являются ssh-audit и lynis, они входят в стандартный репозиторий Debian.

Рекомендуется периодически обновлять сканер и выполнять проверки конфигурации для профилактики появления в системе небезопасных параметров.