Настройка безопасности для SSH-сервера

.
Время чтения — 3 мин.
software security ssh

SSH (Secure Shell) - это протокол прикладного уровня с шифрованием трафика, а также самый распространённый протокол удалённого доступа к Linux\Unix-серверам. Самая популярная реализация серверной части называется OpenSSH.

Терминал Linux

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

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

  1. Разрешён удалённый доступ пользователю root;
  2. Не указан список пользователей, которым разрешён доступ.

В некоторых дистрибутивах разрешён вход для пользователей с пустыми паролями. Проблема безопасности усугубляется ещё и тем что по умолчанию команда useradd создаёт пользователя с пустым паролем.

Перебор логинов и паролей

Несмотря на то что существуют различные векторы атак на службу SSH, самая популярная атака это перебор логинов и паролей. Перебор ведут по самым распространённым именам пользователей и паролей: root, admin, user, test и т. д.

В наши дни перебор паролей ведут чаще автоматизированными средствами нежели вручную. Поэтому при входе на удалённый сервер неудивительно увидеть такую картину:

[user@pc] # ssh server
Last failed login: Sun Nov 15 16:12:10 MSK 2020 from 112.85.42.174 on ssh:notty
There were 13925 failed login attempts since the last successful login.
Last login: Fri Nov 13 17:08:30 2020 from 123.33.12.100

Далее мы настроим сервер так чтобы существенно усложнить жизнь злоумышленникам.

Настройка минимально рекомендуемой конфигурации

Несмотря на то что это минимально-рекомендуемая конфигурация, она отразит более 99% атак на SSH-сервер.

# Запрещаем вход пользователю root через удалённый доступ
PermitRootLogin no

# Разрешаем подключение только для указанных пользователей
AllowUsers user1 user2 user3

# Меняем порт на нестандартный
Port 14819

# Запрещаем вход пользователям с пустыми паролями
PermitEmptyPasswords no

# Отключаем неиспользуемые способы аутентификации
KerberosAuthentication no
GSSAPIAuthentication no

# Отключаем возможность доступа к графическим приложениям
X11Forwarding no

# Отключаем возможности туннелирования, использовать сервер в качестве промежуточного узла
AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no

Настройка усиленной безопасности

Помимо минимально рекомендуемых настроек, можно запретить доступ к порту сервиса и отключить вход по логину и паролю.

Блокируем доступ к порту SSH для всех кроме доверенных IP

Например, с помощью firewalld:

firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --permanent --zone=trusted --add-service=ssh
firewall-cmd --reload

Отключаем доступ по логину и паролю

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

PasswordAuthentication no

После этого потребуется создать ключ для пользователя:

ssh-keygen

А затем скопировать его на удалённый сервер:

ssh-copy-id user@server

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

Проверяем что настройки корректные:

sshd -t

Если приложение не сообщило об ошибках, значит всё хорошо.

Перезапускаем службу:

systemctl restart sshd