Защита SSH-подключения к виртуальному выделенному серверу критически важна для обеспечения безопасности машины, к которой осуществляется удалённый доступ. SSH — это основной протокол для безопасного взаимодействия с удалёнными Linux-системами, и защита такого рода соединений помогает предотвратить ряд серьёзных угроз и уязвимостей.
В данной статье рассмотрим некоторые очевидные меры, которые необходимо реализовать на сервере, работающем под управлением одной из операционных систем семейства Linux.
Использование ключей SSH вместо паролей
Один из наиболее эффективных способов обеспечения безопасности при подключении к удалённому Linux-серверу — использование SSH-ключей вместо паролей.
Ключи SSH представляют собой пару криптографических ключей, которые используются для аутентификации на сервере: открытый ключ, который можно безопасно передавать другим и размещать на сервере, и секретный ключ, который должен храниться на клиентской машине и его нельзя передаваться никому.
Процесс выглядит следующим образом: пользователь создаёт пару ключей на своём локальном компьютере, после чего открытый ключ размещается на удалённом сервере. При попытке подключения к серверу клиент использует секретный ключ для создания цифровой подписи. Сервер, в свою очередь, проверяет эту подпись с помощью открытого ключа. Если подпись верна, то сервер предоставляет доступ пользователю. Это происходит без передачи пароля по сети, что значительно повышает безопасность соединения.
То, как создать и начать использовать SSH-ключи при подключении к Linux-серверу, описано в большом количестве мануалов, опубликованных в нашем справочнике. Вот — некоторые из них:
- Добавление SSH-ключа через личный кабинет RUVDS
- Как загрузить открытый ключ SSH на VPS
- Как подключиться через PuTTY с использованием SSH-ключей
- Как создать SSH-ключи с помощью PuTTY и добавить их в личном кабинете RUVDS
- Первоначальная настройка VPS сервера с Ubuntu 20.04
- Первоначальная настройка сервера с CentOS Stream
- Первоначальная настройка сервера с Debian 11
Отключение входа по паролю
Другая важная мера безопасности, которая помогает защитить серверы от атак методом подбора паролей и других подобных угроз — отключение входа по паролю. Данный метод применяется, как правило, как дополнение к использованию SSH-ключей вместо паролей.
Чтобы отключить возможность аутентификации при помощи пароля, необходимо отредактировать конфигурационный файл SSH, например, с помощью текстового редактора nano
:
$ sudo nano /etc/ssh/sshd_config
Здесь следует установить значение no
для параметра PasswordAuthentication
:
PasswordAuthentication no
Если перед названием данного параметра установлен символ #
, это означает, что данная строка закомментирована, и значение параметра не влияет на настройку подключения с помощью паролей. В таком случае необходимо удалить символ #
, чтобы активировать данный параметр.
По окончании редактирования файла следует сохранить внесённые в него изменения и перезапустить службу sshd
:
$ sudo systemctl restart sshd
Блокировка входа пользователя root
Пользователь root
имеет неограниченные права в системе. Если злоумышленник получает доступ к учётной записи root
, он может полностью контролировать систему, включая изменение системных файлов, установку вредоносного ПО и получение доступа к конфиденциальной информации. В то же время, команды, выполненные от имени пользователя root
, могут иметь необратимые последствия. Неправильно набранная команда или некорректно составленный скрипт могут повредить или удалить критические системные файлы, что приведёт к сбоям системы или потере данных. Руководствуясь этим, администраторы Linux-систем, как правило, не позволяют себе работать с удалёнными машинами, регистрируясь в ОС с использованием учётных данных пользователя root
.
Для того, чтобы временно получить привилегии суперпользователя для тех команд, которые требуют повышенных прав, рекомендуется использовать утилиту sudo
. И поскольку привилегии пользователя root
можно получить без необходимости подключаться к системе под учётной записью суперпользователя, есть смысл закрыть для него возможность входа на сервер.
Чтобы это сделать, необходимо также отредактировать конфигурационный файл SSH, где нужно установить значение no
параметру PermitRootLogin
:
PermitRootLogin no
Также, как и в случае с отключением входа по паролю, по окончании редактирования файла конфигурации необходимо сохранить внесённые изменения и перезапустить службу sshd
.
При этом следует иметь в виду, что для получения привилегий суперпользователя учётная запись должна состоять в группе sudo
. Для добавления пользователя в данную группу при работе на Ubuntu и Debian необходимо использовать команду:
# usermod -aG sudo your-user
В CentOS аналогичная команда выглядит как:
# usermod -aG wheel your-user
Изменение порта по умолчанию
Ещё одна мера повышения уровня безопасности Linux-системы — это изменение дефолтного порта для подключения по SSH. По умолчанию для SSH-подключений используется порт под номером 22.
Номер порта для подключения по SSH прописан в конфигурационном файле /etc/ssh/sshd_config
. Чтобы его изменить, нужно открыть данный файл и установить номер порта в качестве значения для параметра Port
. Например, вместо номера 22 можно указать номер 2222:
Port 2222
Чтобы новая настройка порта вступила в силу, необходимо сохранить изменения в конфигурационном файле и перезапустить сервис sshd
.
При этом также следует внести некоторые изменения в настройки брандмауэра. А именно, необходимо создать разрешающее правило для подключения к Linux-системе через новый порт. Например, для UFW, используемого в Ubuntu и Debian, это можно сделать при помощи команды:
$ sudo ufw allow 2222/tcp
Плюс к этому, рекомендуется закрыть возможность подключения к серверу по старому порту:
$ sudo ufw delete allow 22/tcp
Если при этом появляется ошибка, говорящая о том, что команда не может удалить несуществующее правило, то удалить его можно командой:
$ sudo ufw delete allow OpenSSH
После внесения всех соответствующих изменений выглядит логичным проверить возможность подключиться с использованием нового номера порта. Например, так выглядит команда для подключения по SSH через порт 2222
к виртуальному Linux-серверу, IP-адрес которого — 10.10.10.11
:
ssh -p 2222 your-user@10.10.10.11
В случае использования такого популярного SSH-клиента, как PuTTY, подключение к вышеобозначенному VPS выглядит как на скриншоте ниже:
Применение политики истечения срока действия паролей
Улучшить безопасность, минимизировать риски, связанные с компрометацией паролей, и обеспечить системе соответствие определённым требованиям безопасности помогает применение политики истечения срока действия паролей. Данная мера также способствует поддержанию актуальности паролей и осведомлённости пользователей в отношении данных аспектов безопасности.
В Linux для применения политики истечения срока действия паролей используется команда chage
и конфигурационный файл /etc/login.defs
.
Использование команды chage
Данная команда при помощи опции -l
позволяет увидеть текущие параметры пароля, например, для учётной записи your-user
:
$ sudo chage -l your-user
Команда для установки срока действия пароля учётной записи your-user
в 90 дней выглядит следующим образом:
$ sudo chage -M 90 your-user
Следующая команда позволяет установить предупреждение о необходимости смены пароля за 5 дней до истечения срока его действия:
$ sudo chage -W 5 your-user
А таким образом выглядит команда для блокировки аккаунта your-user
через 30 дней после истечения срока действия его пароля, если он не был изменён:
$ sudo chage -I 30 your-user
Настройка с помощью /etc/login.defs
Файл /etc/login.defs
содержит глобальные параметры для управления паролями и пользователями.
Параметр PASS_MAX_DAYS
указывает на максимальный срок действия пароля:
PASS_MAX_DAYS 90
Следующий параметр содержит в своём значении минимальный срок между изменениями пароля:
PASS_MIN_DAYS 5
В свою очередь, параметр PASS_WARN_AGE
отвечает за период предупреждения перед истечением срока действия пароля:
PASS_WARN_AGE 5
Обратите внимание, что политики, указанные в файле /etc/login.defs
, будут применяться только на пользователей, созданных после внесения изменений в данный файл. Для корректировки политик уже существующих учётных записей следует использовать команду chage
.