MFA для SSH и WireGuard без вендорского PAM

0
14
Обложка статьи: MFA для SSH и WireGuard без вендорского PAM

Украденный SSH-ключ даёт доступ к серверу целиком. Второй фактор ограничивает ущерб. Ниже два способа для SSH и честный ответ, что делать с WireGuard, у которого собственного MFA нет.

Вариант 1. Аппаратный ключ FIDO2 для SSH

Начиная с OpenSSH 8.2 поддерживаются ключи, привязанные к физическому токену (YubiKey и аналоги):

ssh-keygen -t ed25519-sk -C "admin1-yubikey"
ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub admin1@SERVER

Для входа нужно прикоснуться к токену. Закрытый ключ без токена бесполезен. Нужны OpenSSH 8.2 и выше на обеих сторонах и токен с поддержкой FIDO2. Это самый надёжный способ из описанных здесь.

Вариант 2. Ключ плюс одноразовый код (TOTP)

Подходит, если токенов нет. Установите модуль и настройте код для пользователя:

sudo apt install libpam-google-authenticator
google-authenticator          # от имени пользователя, отсканируйте QR, сохраните резервные коды

В /etc/pam.d/sshd добавьте строку и закомментируйте запрос пароля:

auth required pam_google_authenticator.so
#@include common-auth

В /etc/ssh/sshd_config:

UsePAM yes
KbdInteractiveAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive

Директива AuthenticationMethods требует и ключ, и код. Не закрывайте текущую сессию, пока не проверите вход с новой. Ошибка здесь блокирует вход на сервер для всех. Сохраните запасной доступ (консоль хостера). Проверка и применение:

sudo sshd -t && sudo systemctl reload ssh

Название директивы KbdInteractiveAuthentication появилось в новых версиях OpenSSH, в старых оно называется ChallengeResponseAuthentication. Общую настройку SSH см. в статье включение SSH.

WireGuard и второй фактор

В WireGuard нет учётных записей и кодов: доступ определяется ключом устройства. Доступны три подхода:

Подход Что даёт Ограничение
MFA на сервисах за VPN Для входа на SSH и в админки за туннелем нужен второй фактор (варианты выше) Сам туннель остаётся доступным по ключу
Отдельный ключ на устройство и отзыв Утерянное устройство отключают одной командой Не защищает от копирования ключа
Шлюз с учётными записями поверх WireGuard Вход через SSO и MFA, профили на пользователя Отдельный продукт и сопровождение

Для небольшой инфраструктуры разумно сочетание первых двух: ключ на устройство и MFA на SSH. Как поднять туннель: WireGuard. Отзыв ключа: wg set wg0 peer CLIENT_PUBLIC_KEY remove.

Как проверить

ssh -v admin1@SERVER           # смотрите: Authentications that can continue
sudo sshd -T | grep -E 'authenticationmethods|passwordauthentication'

Вход с ключом без кода должен быть отклонён, вход с ключом и кодом — успешным, вход по паролю — отклонён. Если вход невозможен, откатите изменения из консоли хостера, восстановив прежние версии /etc/pam.d/sshd и sshd_config. Что ещё закрыть на сервере: hardening Linux.

Оставьте свой ответ