Настройка 2FA для SSH: безопасность с Google Authenticator
Настройте двухфакторную аутентификацию (2FA) для SSH-доступа. PAM-модуль Google Authenticator, настройка TOTP для SSH, резервные коды, тестирование и устранение неполадок.
Содержание
Настройка 2FA для SSH: безопасность с Google Authenticator
Хотя использование SSH-ключей повышает безопасность, двухфакторная аутентификация (2FA) обеспечивает дополнительный уровень защиты. Даже если кто-то получит ваш SSH-ключ, он не сможет войти в систему без кода 2FA.
Почему важна 2FA?
- Защита от кражи ключей: Даже при краже SSH-ключа требуется код 2FA
- Устойчивость к брутфорсу: Комбинация пароль + 2FA намного надёжнее
- Соответствие требованиям: Стандарты PCI-DSS, HIPAA требуют 2FA
- Простая настройка: Активируется за несколько минут
Требования
- Linux-сервер (Ubuntu/Debian/CentOS)
- Смартфон (Google Authenticator, Authy или аналогичное приложение)
- Существующий SSH-доступ
Не закрывайте существующее SSH-соединение во время настройки 2FA. Тестируйте с нового терминала после каждого шага. Неправильная конфигурация может полностью заблокировать доступ к серверу.
Установка PAM-модуля Google Authenticator
# Ubuntu/Debian
sudo apt update
sudo apt install libpam-google-authenticator -y
# CentOS/AlmaLinux
sudo dnf install epel-release -y
sudo dnf install google-authenticator -y
Настройка TOTP
# Запустите от имени пользователя, для которого нужно включить 2FA
google-authenticator
При запуске команды будут заданы вопросы:
Do you want authentication tokens to be time-based (y/n) y
В этот момент отобразится QR-код и секретный ключ. Отсканируйте QR-код приложением Google Authenticator.
Do you want me to update your "/home/user/.google_authenticator" file? (y/n) y
Do you want to disallow multiple uses of the same authentication token? (y/n) y
Do you want to increase the window size? (y/n) n
Do you want to enable rate-limiting? (y/n) y
Сохранение резервных кодов
Во время настройки отображаются 5 резервных кодов. Сохраните их в надёжном месте:
Your emergency scratch codes are:
12345678
87654321
11223344
44332211
99887766
Храните резервные коды в надёжном месте (менеджер паролей, бумага и т.д.). Если вы потеряете телефон, эти коды будут единственным способом войти.
Настройка PAM
sudo nano /etc/pam.d/sshd
# Добавить в начало /etc/pam.d/sshd:
auth required pam_google_authenticator.so
Настройка SSH
sudo nano /etc/ssh/sshd_config
# Включить клавиатурно-интерактивную аутентификацию
ChallengeResponseAuthentication yes
# Установить методы аутентификации
# Вариант 1: Только 2FA
AuthenticationMethods keyboard-interactive
# Вариант 2: SSH-ключ ИЛИ 2FA
# AuthenticationMethods publickey keyboard-interactive
# Вариант 3: SSH-ключ И 2FA (наиболее безопасный)
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
# Перезапустить SSH-службу
sudo systemctl restart sshd
Комбинация SSH-ключ + 2FA (Рекомендуется)
sudo nano /etc/ssh/sshd_config
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no
ChallengeResponseAuthentication yes
UsePAM yes
sudo nano /etc/pam.d/sshd
# Закомментировать аутентификацию по паролю:
# @include common-auth
# Добавить 2FA
auth required pam_google_authenticator.so
Тестирование
# Открыть новый терминал и попробовать подключиться
ssh пользователь@ip_сервера
# Ожидаемый вывод:
# Verification code: (введите код из Google Authenticator)
Устранение неполадок
Код 2FA не принимается
# Проверить время сервера
date
timedatectl
# Синхронизация NTP
sudo apt install ntp -y
sudo systemctl restart ntp
Восстановление при блокировке
# Подключиться через консольный доступ
# Временно отключить 2FA
sudo nano /etc/pam.d/sshd
# Добавить # перед: auth required pam_google_authenticator.so
sudo systemctl restart sshd
Исключение определённых пользователей из 2FA
sudo nano /etc/pam.d/sshd
# Исключить определённые группы
auth [success=1 default=ignore] pam_succeed_if.so user ingroup notp
auth required pam_google_authenticator.so
# Создать группу notp и добавить пользователя
sudo groupadd notp
sudo usermod -aG notp deploy_user
Приложения вроде Authy или 1Password предлагают облачное резервное копирование и поддержку нескольких устройств по сравнению с Google Authenticator. Рассмотрите эти альтернативы для корпоративных сред.
Заключение
Настройка 2FA для SSH значительно повышает безопасность сервера. С PAM-модулем Google Authenticator вы можете активировать TOTP-based 2FA за несколько минут. Комбинация SSH-ключ + 2FA формирует один из наиболее надёжных методов аутентификации.
Связанные статьи
Сканирование на вредоносное ПО и руткиты: rkhunter и ClamAV
Защитите Linux-сервер от вредоносного ПО и руткитов. Установка rkhunter и ClamAV, настройка сканирования, интерпретация результатов, планирование сканирований и реагирование на инциденты.
Настройка Fail2Ban: Защита SSH от брутфорс-атак
Защитите сервер от SSH брутфорс-атак с помощью Fail2Ban. Установка, настройка jail.local, джейлы для Nginx/Apache, белый список IP, мониторинг блокировок и email-уведомления.
Настройка VPN-сервера WireGuard: пошаговое руководство
Настройте VPN-сервер WireGuard: генерация ключей, конфигурация сервера и клиента, IP-пересылка, правила брандмауэра и настройка клиентов Windows/Linux/Android.