Доступ к серверу по SSH с двухфакторной аутентификации (2FA)

Защитите доступ к SSH как профессионал с помощью двухфакторной аутентификации (2FA), чтобы еще эффективнее защитить удаленные соединения.

Secure Shell (SSH), протокол, широко используемый для безопасного удаленного входа с одного компьютера на другой, предлагает надежное шифрование для защиты от несанкционированного доступа.

Однако с ростом изощренности киберугроз использование только традиционной аутентификации на основе пароля может сделать системы уязвимыми для атак методом перебора и кражи паролей. Именно здесь на помощь приходит двухфакторная аутентификация (2FA).

Она добавляет дополнительный уровень безопасности, требуя не только пароль (то, что вы знаете), но и второй фактор, обычно то, что у вас есть (например, мобильное устройство или отпечаток пальца).

Интеграция 2FA с SSH значительно снижает риск несанкционированного доступа к вашим системам, даже если пароль скомпрометирован. Итак, давайте покажем вам, как это сделать.

Шаг 1: Установите приложение 2FA Authenticator на свой телефон

Для начала вам необходимо установить приложение 2FA authenticator на свое мобильное устройство, чтобы использовать двухфакторную аутентификацию с SSH. Это приложение генерирует чувствительные к времени, одноразовые коды, которые служат вторым фактором в процессе аутентификации.

Популярными приложениями для аутентификации являются Google Authenticator или Microsoft Authenticator. Они доступны для устройств Android и iOS и могут быть загружены из соответствующих магазинов приложений.

В этом руководстве мы будем использовать приложение Google Authenticator. Важно, чтобы оно было предварительно установлено на вашем мобильном устройстве, поскольку чуть ниже, в шаге 3, мы будем использовать его при первоначальной настройке 2FA с вашим SSH-сервером.

Шаг 2: Установка модуля PAM Authenticator от Google

Google Authenticator – это программное средство аутентификации, которое реализует услуги двухфакторной аутентификации (2FA) с использованием алгоритма одноразовых паролей на основе времени (TOTP) и алгоритма одноразовых паролей на основе HMAC (HOTP) для аутентификации пользователей программных приложений.

Чтобы подготовить вашу систему Linux к этому, вы должны установить необходимый пакет под названием libpam-google-authenticator или google-authenticator, в зависимости от вашего дистрибутива. Но какую функцию выполняет этот пакет?

Вкратце, это программный модуль для Linux, который интегрирует Google Authenticator в систему Pluggable Authentication Module (PAM). PAM – это структура для интеграции нескольких низкоуровневых схем аутентификации в высокоуровневый API, позволяющая реализовать различные методы аутентификации в программах, требующих проверки пользователя.

Ubuntu / Debian

Ubuntu, Debian и другие дистрибутивы на их основе, такие как Linux Mint или Pop!_OS, могут установить Google Authenticator с помощью команды apt приведенной ниже:

sudo apt install libpam-google-authenticator

Rocky Linux / AlmaLinux

Для корпоративных дистрибутивов Linux, таких как Rocky и Alma, Google Authenticator доступен через репозиторий EPEL. Поэтому сначала необходимо добавить его в систему (если вы еще этого не сделали), а затем установить сам Google Authenticator.

sudo dnf install epel-release
sudo dnf install google-authenticator

Fedora

Пользователи Fedora могут найти Google Authenticator в официальных репозиториях дистрибутива. Чтобы установить его, выполните следующую команду:

sudo dnf install google-authenticator

Arch Linux

Google Authenticator доступен в репозиториях дистрибутива для Arch и производных на базе Arch. Чтобы установить его, выполните:

sudo pacman -S libpam-google-authenticator

Шаг 3: Настройка Google Authenticator

После успешной установки Google Authenticator мы готовы к его настройке. Для этого откройте терминал и выполните команду, показанную ниже.

google-authenticator

Начиная с этого шага, вам нужно будет ответить на несколько вопросов, первый из которых: «Хотите ли вы, чтобы токены аутентификации были основаны на времени?» Ответьте y, чтобы включить одноразовые пароли, основанные на времени (TOTP).

На экране вашего терминала появится QR-код. Здесь на помощь придет приложение Google Authenticator на вашем мобильном устройстве. Откройте его и нажмите на значок «+» в правом нижнем углу.

Вы увидите две опции: «Сканировать QR-код» и «Ввести ключ настройки». Учитывая, что QR-код, отображаемый в терминале, часто может быть слишком большим и сложным для сканирования непосредственно с вашего устройства, мы выберем вариант «Ввести ключ настройки». Перейдите и нажмите на него.

В поле «Аккаунт» введите имя по своему усмотрению, например «my2fa». Затем в поле «Ключ» в приложении Google Authenticator на мобильном устройстве введите код из строки «Ваш новый секретный ключ – это» из терминала. Наконец, нажмите кнопку «Добавить».

В ответ приложение сгенерирует 6-значный код.

Введите этот код в терминал и нажмите кнопку Enter

Вы получите сообщение «Код подтвержден». Кроме того, вы получите пять аварийных кодов, которые мы рекомендуем записать и хранить в безопасном месте.

Эти коды одноразовые и предоставляют вам доступ к SSH, например, когда у вас нет под рукой мобильного устройства для генерации кода. Ответьте y, когда вас попросят обновить файл «.google_authenticator».

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

Следующая опция настройки Google Authenticator касается возможности использования ранее сгенерированных кодов, если вы не смогли уложиться в 30-секундный временной интервал, который составляет срок действия каждого токена с момента его генерации.

Однако, поскольку эта опция снижает безопасность, мы настоятельно рекомендуем вам ответить n

И наконец, ответьте y, чтобы активировать ограничение скорости, разрешающее до трех попыток входа в систему в течение 30-секундного окна, что минимизирует вероятность успешной атаки брута на ваш SSH-сервер.

Мы завершили настройку Google Authenticator, теперь настало время перейти к настройке самого SSH-сервера для обеспечения двухфакторной аутентификации.

Шаг 4: Настройка SSH для использования двухфакторной аутентификации

Откройте файл конфигурации SSH-сервера для редактирования с помощью предпочитаемого текстового редактора терминала:

sudo vim /etc/ssh/sshd_config

Здесь необходимо добавить/изменить следующие два значения конфигурации:

KbdInteractiveAuthentication yes
ChallengeResponseAuthentication yes

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

Давайте разберемся, что означают эти две опции:

  • KbdInteractiveAuthentication – Когда эта опция включена в SSH, она позволяет серверу участвовать в интерактивном процессе 2FA. Например, после ввода пароля (первый фактор) сервер может попросить вас ввести код из приложения 2FA (второй фактор).
  • ChallengeResponseAuthentication – если эта опция включена, SSH-сервер может использовать для аутентификации методы «вызов-ответ». Сюда входят такие методы, как клавиатурно-интерактивная аутентификация, когда пользователю предлагается ввести информацию в ответ на вызов. Другими словами, в этом случае SSH-сервер может попросить пользователя ввести код, сгенерированный приложением 2FA.

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

sudo systemctl restart ssh

Шаг 5: Настройка PAM для двухфакторной аутентификации SSH

PAM (Pluggable Authentication Modules) играет важную роль в процессе аутентификации SSH, обеспечивая гибкую и модульную структуру для аутентификации. Это означает, что вместо того, чтобы SSH имел свои жестко закодированные методы аутентификации, он использует PAM для подключения различных механизмов аутентификации по мере необходимости.

Последним шагом будет настройка SSH 2FA. Для этого открываем его конфигурационный файл:

sudo vim /etc/pam.d/sshd

Добавляем в начало следующую строку:

auth required pam_google_authenticator.so

Сохраняем файл, выходим и переходим к последней, самой захватывающей части.

Шаг 6: Проверка SSH 2FA

Теперь давайте проверим, все ли работает правильно. Чтобы сделать это с удаленной машины, попробуйте установить SSH-соединение с сервером, настроенным на использование двухфакторной аутентификации.

Вам будет предложено ввести проверочный код. Откройте приложение Google Authenticator на своем мобильном устройстве и введите в терминал 6-значный код, который он покажет. Когда вы вводите, он не отображается на экране.

Следующим шагом вам нужно будет ввести пароль пользователя. Как только вы введете правильный пароль, вы получите SSH-доступ к серверу.

Если вы посмотрите, что происходит под капотом, в журналах systemd вы обнаружите, что процесс входа прошел нормально. Код двухфакторной аутентификации от Google Authenticator и пароль пользователя были успешно приняты.

Однако даже если вы введете правильный пароль, но используете неправильный код, ваше SSH-подключение к серверу не будет разрешено, о чем свидетельствуют журналы systemd.

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

Дополнительно: Привлечение аутентификации на основе ключей в SSH 2FA

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

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

Во-первых, откройте файл /etc/ssh/sshd_config и установите параметр PasswordAuthentication no, как показано на рисунке ниже.

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

Тогда добавьте в файл sshd_config опцию, показанную ниже.

AuthenticationMethods publickey,keyboard-interactive
  • AuthenticationMethods: Указывает методы аутентификации, которые должны быть успешно завершены, чтобы пользователю был предоставлен доступ.
  • publickey: Указывает, что первый метод аутентификации основан на аутентификации с открытым ключом.
  • keyboard-interactive: Это второй метод аутентификации, необходимый после успешного завершения метода «publickey». Обычно он предполагает ввод пользователем информации в ответ на запрос. В нашем случае это введение кода 2FA, сгенерированного приложением Google Authenticator.

Сохраните файл, закройте его и перезапустите службу SSH.

sudo systemctl restart ssh

Теперь откройте файл /etc/pam.d/sshd, найдите строку @include common-auth и поставьте перед ней знак комментария (#). Это запретит PAM использовать пароль учетной записи пользователя для входа в систему.

Теперь попробуйте снова войти в систему по SSH – и чудо произошло! Подсказка, требующая ввести пароль пользователя, исчезла.

Просто введите 6-значный код, сгенерированный приложением Google Authenticator на вашем мобильном устройстве, и вы войдете в систему. SSH-ключ будет отправлен на сервер автоматически в фоновом режиме.

Опять же, уточним, что перед применением этого метода необходимо настроить беспарольную аутентификацию на SSH-сервере.

Заключение

Настройка двухфакторной аутентификации (2FA) для доступа к SSH очень важна для повышения безопасности ваших удаленных подключений. В этой статье подробно описаны шаги по настройке Google Authenticator, изменению параметров SSH-сервера и настройке PAM для 2FA в SSH.

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

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен linuxiac.com

Похожие статьи

Комментарии (0)