Введение
В этом практическом занятии (лабораторной работе) вы научитесь основным методам повышения безопасности SSH в OpenSSH с помощью аутентификации по ключу и усиления конфигурации. Вы научитесь заменять аутентификацию по паролю на безопасную аутентификацию с использованием пар ключей, отключать доступ под учетной записью root и изменять стандартные порты, чтобы предотвратить брутфорс-атаки.
Практические упражнения помогут вам сгенерировать криптографические ключи, настроить правильные права доступа к файлам и проверить свою безопасную настройку SSH. Вы также научитесь использовать основные команды для управления службами SSH и проверки своих конфигураций безопасности.
Установка OpenSSH
На этом этапе вы установите пакет сервера OpenSSH на виртуальную машину (VM) LabEx. OpenSSH (Open Secure Shell) представляет собой бесплатную и открытый исходный код реализацию протокола SSH, которая обеспечивает безопасную зашифрованную связь между двумя недоверенными хостами по небезопасной сети. Это стандартный инструмент для удаленного администрирования серверов и безопасного передачи файлов.
Прежде чем приступить, важно понять, что SSH работает по клиент-серверной модели. Сервер (который мы сейчас устанавливаем) ожидает входящих подключений, а клиенты (например, терминал на вашем локальном компьютере) подключаются к нему. Вся связь шифруется, что обеспечивает защиту ваших учетных данных и данных.
Поскольку виртуальная машина LabEx использует контейнеры Docker, в которых команда systemctl недоступна (контейнеры Docker обычно запускают один процесс, а не полноценную операционную систему), мы будем использовать команду service для управления демоном SSH. Это более простой альтернативный вариант systemctl, который хорошо работает в контейнеризованных средах.
Следуйте этим шагам для установки OpenSSH:
Сначала обновите список пакетов, чтобы убедиться, что вы получите последнюю версию. Это извлекает самую свежую информацию о пакетах из репозиториев Ubuntu:
sudo apt updateУстановите пакет сервера OpenSSH. Флаг
-yавтоматически подтверждает все запросы во время установки:sudo apt install -y openssh-serverПосле установки проверьте, запущен ли сервис SSH. Команда
statusпоказывает, активен ли сервис и ожидает ли он входящих подключений:service ssh statusВы должны увидеть вывод, указывающий, что сервис активен (запущен). Если он не запущен, мы запустим его на следующем шаге.
Если сервис не запущен (что будет отображаться как "inactive" в выводе статуса), запустите его вручную:
service ssh startПроверьте, прослушивает ли SSH на стандартном порту (22). Команда
netstatпоказывает сетевые подключения и прослушиваемые порты, аgrepфильтрует записи, связанные с SSH:sudo netstat -tulnp | grep sshdВы должны увидеть вывод, аналогичный следующему, показывающий, что SSH прослушивает все сетевые интерфейсы (0.0.0.0) на порту 22:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
Настройка аутентификации по ключу
На этом этапе вы настроите аутентификацию по ключу SSH, которая обеспечивает более высокий уровень безопасности, чем традиционная аутентификация по паролю. В отличие от паролей, которые могут быть подобраны или взломаны методом перебора, аутентификация по ключу использует пару криптографических ключей: один приватный (должен быть секретным) и один публичный (должен быть передан на серверы).
Когда вы подключаетесь к серверу SSH, он использует математические алгоритмы для проверки того, что у вас есть приватный ключ, соответствующий публичному ключу, который он имеет в файле. Этот метод более безопасен и удобен после настройки.
Давайте создадим и настроим эти ключи пошагово:
Сначала сгенерируем новую пару ключей SSH. Эта команда создает два файла в вашей директории
~/.ssh:ssh-keygen -t rsa -b 4096 -f ~/.ssh/labex_key -N ""-t rsaзадает тип ключа (алгоритм RSA)-b 4096создает надежный 4096-битный ключ-fзадает имя файла для пары ключей-N ""означает отсутствие парольной фразы (для упрощения лабораторной работы)
Теперь у вас будут:
- Приватный ключ:
~/.ssh/labex_key(никогда не передавайте его!) - Публичный ключ:
~/.ssh/labex_key.pub(этот ключ передается на серверы)
Правильные права доступа к файлам являются важной частью безопасности SSH. Эти команды обеспечивают доступ к ключам только для вас:
chmod 700 ~/.ssh chmod 600 ~/.ssh/labex_key chmod 644 ~/.ssh/labex_key.pubТеперь мы авторизуем ваш ключ, добавив публичный ключ в специальный файл
authorized_keys, который проверяет SSH:cat ~/.ssh/labex_key.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keysДалее настроим сам сервер SSH. Отредактируем основной файл конфигурации:
sudo nano /etc/ssh/sshd_configНайдите и измените следующие важные настройки:
PubkeyAuthentication yes PasswordAuthentication noЭто сообщает SSH:
- Разрешить аутентификацию по ключу (по умолчанию включено, но полезно проверить)
- Отключить вход по паролю (только доступ по ключу)
После изменения конфигурации всегда перезапустите службу SSH:
service ssh restartНаконец, проверим, что все работает. Попробуйте подключиться к своему собственному компьютеру (localhost) с использованием нового ключа:
ssh -i ~/.ssh/labex_key localhostФлаг
-iуказывает, какой приватный ключ использовать. Если все прошло успешно, вы сразу войдете в систему без запроса пароля - это подтверждает, что аутентификация по ключу работает правильно.
Отключение доступа под учетной записью root
На этом этапе мы отключим прямой вход от имени root через SSH. Это важно, так как учетная запись root имеет полные привилегии системы, что делает ее главным мишенью для хакеров. Отключив вход от имени root, мы заставляем атакующих угадать как имя пользователя, так и пароль, что значительно усложняет атаки методом перебора.
После этого изменения, когда вам понадобятся привилегии root, вы сначала войдете в систему с помощью обычной учетной записи пользователя, а затем используете sudo для выполнения административных задач. Это создает дополнительный уровень безопасности, так как атакующим придется взломать две учетные записи.
Давайте изменим конфигурацию SSH:
Сначала откройте основной файл конфигурации SSH с помощью текстового редактора. Здесь мы будем использовать nano, но вы можете использовать любой редактор, с которым вы чувствуете себя комфортно:
sudo nano /etc/ssh/sshd_configНайдите строку, которая содержит
PermitRootLogin(обычно около строки 32). Если вы не можете найти ее, вам нужно добавить ее. Измените или добавьте следующую строку:PermitRootLogin noПока мы редактируем этот файл, давайте установим дополнительные параметры безопасности, которые хорошо сочетаются с этим изменением:
StrictModes yes MaxAuthTries 3 LoginGraceTime 60StrictModesпроверяет права доступа к файлам для обеспечения безопасностиMaxAuthTriesограничивает количество неудачных попыток входаLoginGraceTimeустанавливает время, в течение которого можно выполнить вход
Сохраните изменения в nano, нажав:
- Ctrl+O для записи
- Enter для подтверждения
- Ctrl+X для выхода
Чтобы изменения вступили в силу, перезапустите службу SSH:
service ssh restartДавайте проверим, что наши изменения сработали, попробовав войти в систему по SSH от имени root (должно завершиться неудачей):
ssh root@localhostВы должны увидеть ошибку типа "Permission denied (publickey)", что означает, что наша мера безопасности работает правильно. С этого момента вам нужно будет использовать обычную учетную запись пользователя для входа.
Изменение порта по умолчанию
На этом этапе мы изменим порт SSH по умолчанию с 22 на пользовательский порт (в нашем примере это 2222). Это важная мера безопасности, так как многие автоматические боты и атакующие сканируют стандартный порт 22 на наличие SSH - серверов. Изменив на нестандартный порт, мы делаем наш сервер менее видимым для этих автоматических сканирований.
Перед внесением каких - либо изменений сначала проверим текущую конфигурацию порта SSH. Это поможет нам понять существующую настройку:
sudo grep -i port /etc/ssh/sshd_config
Обычно в выводе вы увидите #Port 22. Символ # означает, что эта строка закомментирована, поэтому SSH в настоящее время использует порт по умолчанию 22.
Теперь отредактируем файл конфигурации SSH. Мы будем использовать текстовый редактор nano, который удобен для начинающих:
sudo nano /etc/ssh/sshd_config
Внутри файла найдите строку, содержащую #Port 22. Здесь нам нужно внести два изменения:
- Удалить символ
#, чтобы раскомментировать строку (это активирует настройку). - Изменить номер порта с 22 на 2222.
Измененная строка должна выглядеть следующим образом:
Port 2222
После внесения этого изменения сохраните файл в nano, нажав:
- Ctrl+O (для записи файла).
- Enter (для подтверждения имени файла).
- Ctrl+X (для выхода из редактора).
Для того чтобы изменения вступили в силу, нам нужно перезапустить службу SSH:
service ssh restart
Проверим, что SSH теперь прослушивает наш новый порт (2222), а не порт по умолчанию:
sudo netstat -tulnp | grep ssh
В выводе должно быть указано, что SSH прослушивает порт 2222. Если вы по - прежнему видите порт 22, проверьте изменения в файле конфигурации еще раз.
Наконец, протестируйте новую конфигурацию, подключившись к SSH с использованием пользовательского порта. Обратите внимание, что теперь нам нужно указать порт с помощью флага -p:
ssh -p 2222 -i ~/.ssh/labex_key localhost
После успешного подключения вы можете выйти из сеанса SSH, нажав Ctrl+D. Помните, что с этого момента вам всегда нужно будет указывать этот пользовательский порт при подключении к вашему SSH - серверу.
Тестирование усиленной настройки
На этом последнем этапе мы проверим все меры по усилению безопасности, которые вы реализовали. Тестирование является важнейшим этапом для того, чтобы убедиться, что ваш SSH - сервер правильно настроен и безопасен. Мы проверим как настройки на стороне сервера, так и попытки подключения на стороне клиента.
Начнем с проверки текущей конфигурации SSH на вашем сервере. Это подтвердит, что изменения, которые вы внесли ранее, активны:
Сначала проверьте все текущие настройки SSH:
sudo sshd -T | grep -E 'port|permitrootlogin|passwordauthentication|pubkeyauthentication'Команда
sshd -Tотображает фактическую конфигурацию во время выполнения. Мы фильтруем важные параметры безопасности. Вы должны увидеть:port 2222 permitrootlogin no passwordauthentication no pubkeyauthentication yesЭтот вывод подтверждает, что SSH работает на порту 2222, вход от имени root отключен, аутентификация по паролю отключена, а аутентификация по публичному ключу включена.
Теперь давайте протестируем подключения с точки зрения клиента:
Протестируйте успешное подключение с использованием аутентификации по ключу:
ssh -p 2222 -i ~/.ssh/labex_key localhost "echo 'Key auth successful'"Эта команда пытается подключиться с использованием вашего приватного ключа (флаг
-iуказывает на файл ключа). Если подключение успешно, на сервере выполняется простая команда echo. Вы должны увидеть:Key auth successfulПротестируйте неудачную попытку входа от имени root:
ssh -p 2222 root@localhost 2>&1 | grep -i "permission denied"Эта команда пытается войти в систему от имени root, что должно завершиться неудачей, так как мы отключили вход от имени root. Команда фильтрует ожидаемое сообщение об ошибке.
Протестируйте неудачную попытку аутентификации по паролю:
ssh -p 2222 -o PreferredAuthentications=password -o PubkeyAuthentication=no localhost 2>&1 | grep -i "permission denied"Здесь мы принудительно используем аутентификацию по паролю (отключенную в нашей конфигурации), чтобы убедиться, что она корректно заблокирована. Опции явно отключают аутентификацию по ключу.
Наконец, давайте проверим сетевое состояние сервера:
Проверьте активные SSH - подключения:
sudo netstat -tulnp | grep 2222Эта команда показывает все прослушиваемые порты, отфильтрованные по нашему пользовательскому порту SSH (2222). Вы должны увидеть, что
sshdнаходится в списке прослушивающих на этом порту.Проверьте статус службы SSH:
service ssh statusЭто подтверждает, что служба SSH работает корректно. В выводе должно быть указано, что служба активна.
Резюме
В этом практическом занятии вы научились повышать безопасность SSH в OpenSSH с помощью практических конфигураций. В рамках упражнений вы установили сервер OpenSSH, проверили его статус и реализовали аутентификацию на основе ключей с правильными настройками прав доступа.
Вы также изучили важные методы усиления безопасности, такие как отключение входа от имени root и изменение порта SSH по умолчанию. Эти меры эффективно снижают уязвимость системы к атакам методом перебора паролей и автоматизированным сканированием, сохраняя при этом функциональность системы.


