uz
KA
июня 23, 2025
Обновлено июня 23, 2025

SSH config для сервера: быстро и безопасно

Linux

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

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

Настройка SSH

Напомним, что SSH или же Secure Shell представляет собой протокол удаленного управления и передачи данных. На машине обычно устанавливается сервер и клиент, которые позволяют организовать всю работу по защищенному соединению. Будь то версия ssh windows или ssh linux. Для настройки сервера перейдем в конфигурационный файл:

C:\ProgramData\SSH\sshd_config

Для Linux-подобных систем:

sudo nano /etc/ssh/sshd_config
Откроем конфиг-файл сервера
Скриншот №1 — Откроем конфиг-файл сервера

Именно он загружается сервисом, который обрабатывает соединения пользователей на сетевом сокете системы. Главное не перепутать с аналогичным конфигом, который хранится в той же директории и отвечает за клиентское ПО.

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

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

Port

Port 1024

Директива Port отвечает за порт, на котором сервер будет принимать соединения, в целях безопасности, особенно если сервер открыт в интернет, необходимо поменять его на любой с 1024 по 49151.

AddressFamily

AddressFamily inet

Данная опция позволит выбрать семейство сетевых адресов доступных для подключения к серверу: IPv4 и/или IPv6. Если в вашей инфраструктуре все же не применяется IPv6, то настоятельно рекомендуется его отключить Так как атаки связанные с ним до сих пор остаются насущной проблемой, ведь IPv6, при конфигурации приоритетнее используется, чем IPv4:

  • inet – для IPv4;
  • inet6 – для IPv6;
  • any – для любого семейства.

ListenAddress

ListenAddress 0.0.0.0

Соответственно ListenAddress указывает какой адрес необходимо будет слушать, для настройки SSH внутренним пользователям сети используйте адрес интерфейса, который смотрит внутрь. Для этого можно использовать команду ip a. Или же оставьте доступным его на все интерфейсах со значением, по умолчанию, 0.0.0.0, для всех пользователей сети. Удалите строку с IPv6 адресом :: .

Пропишем адреса сервера
Скриншот №2 — Пропишем адреса сервера

HostKey

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

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

Ciphers and keying

Ciphers aes256-ctr,aes192-ctr,aes128-ctr,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-256,hmac-sha2-512,hmac-sha1
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256

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

Сниффинг трафика
Скриншот №3 — Сниффинг трафика

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

Authentification

LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 6
MaxSessions 8
PasswordAuthentication yes
PubkeyAuthentication yes
AuthenticationMethods publickey,password
UsePAM yes

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

Параметр LoginGraceTime 2m значит, что только 120 секунд у пользователя есть на то, чтобы начать аутентифицироваться. Иначе сессия будет закрыта, во избежании исчерпания ресурсов, при DoS и DDoS.  Запрет на вход PermitRootLogin no по root позволит избежать проблем с перебором ключей и паролей, для пользователя с супер-привилегиями. MaxAuthTries 6 задаст максимальное количество попыток входа, после чего закроет сессию. Подключение по ssh:

Неудачные попытки входа
Скриншот №4 — Неудачные попытки входа

Следующие настройки выставляйте в соответствии с требованиями к вашей инфраструктуре. MaxSessions 8 задаст максимальное количество одновременных сессий. PasswordAuthentication yes разрешит парольную аутентификацию. PubkeyAuthentication yes аналогично разрешит вход по ассиметричным ключам шифрования. AuthenticationMethods publickey,password укажет ту комбинацию, которая в итоге будет использоваться, при аутентификации пользователей.

KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosGetAFSToken no

По желанию, можно так же включить аутентификацию по протоколу Kerberos.

Опциональные настройки

AllowAgentForwarding yes
AllowTcpForwarding no
GatewayPorts no
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
PermitTTY yes
PrintMotd no
PrintLastLog yes
PermitUserEnvironment no

Для того, чтобы не вводить множество раз пароли используется директива AllowAgentForwarding, ssh agent позволяет передать вместо файла ssh, подписанные пакеты закрытым ключом. Если мы уже подключились на сервер и хотим через него попасть на третий, к примеру, из-за сетевой недоступности. Это актуально в тех случаях, когда на ваших ключах для аутентификации установлен мастер-пароль, чтобы хранить их не в открытом виде.

  • AllowTcpForwarding no позволит создавать туннели между машинами по SSH-протоколу. Данное решение, достаточно, часто используют  нарушителю с целью сокрытия реального трафика в туннелях, которые шифрованы, так еще и разрешены для работы внутри инфраструктуры. Если у вас нет требований в работе по использованию туннелей данного протокола, то лучше отключить ее;
  • GatewayPorts no запретит перенаправление ssh портов машины с публичных или внутренних адресов, помимо localhost;
  • X11Forwarding yes позволит перенаправлять трафик системы оконного интерфейса внутри туннеля SSH;
  • PermitTTY yes разрешит интерактивное взаимодействие с оболочкой, а не только выполнением одной команды и закрытием сервера;
  • PrintMotd no или “Сообщение дня” запрет на вывод текстовой строки при аутентификации пользователя, во избежании проблем, при проверках данных;
  • PrintLastLog yes директива говорит, о том что будет записывать в /var/log/auth.log логи о подключениях и событиях безопасности;
  • PermitUserEnvironment no запретит пользователю сохранить переменные среды, которые могли быть потенциально заражены.

В итоге файл будет представлять собой совокупность данных строк, которые необходимо будет сохранить и перезагрузить сервис SSH:

sudo systemctl restart

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

Создание сервераСкриншот №5 — Создание сервера

Оценка:
5 из 5
Аverage rating : 5
Оценок: 1
100029 Ташкент Улица Якка Чинар, дом 2/1
ООО «ИТГЛОБАЛКОМ ЛАБС»

Вам также может быть интересно...