2FA для SSH
Если вы уже поставили вход на сервер по SSH ключу, из предыдущего этапа, то данный пункт можно пропустить.
Но можно и настроить дополнительную защиту. 2FA - это пароли на основе времени. Этот метод не распространен, но считается надежной защитой.
Настройка Timezone
Часовой пояс по умолчанию установлен на UTC. Это можно изменить, установив часовой пояс в котором вы живете, чтобы использовать программы, привязанные к вашему локальному времени, а так же чтобы логи сервера отображались в понятном для вас времени. Для этого выполним:
1. Выберим из списка и скопируем нужную нам таймзону. Открываем список:
timedatectl list-timezones2. Теперь используем стрелки клавиатуры Page Up, и Page Down чтобы просматривать список. Копируем нужный часовой пояс и чтобы выйти из списка нажимаем q (или ctrl+c)чтобы выйти из списка.
3. Устанавливаем таймзону (я для примера взял 'Etc/GMT+4'):
timedatectl set-timezone 'Etc/GMT+4'Установка Google Authenticator
Введем команду установки Google Authenticator:
sudo apt-get install libpam-google-authenticatorЭта программа генерирует на сервере ключи, а после сканирования штрих кода будет отображаться пароль для входа на телефоне.
Генерация ключа.
Перед генерацией ключа - установите на телефон приложение Google Authenticator или Authy. А так же проверьте, что часовой пояс телефона совпадает с установленным на сервере.
1. Введем команду генерации ключей:
Появится вопрос. Надо выбрать time-based ключ, введя y. 
2. Получили QR-код, secret key и emergency scratch codes. Надо отсканировать QR-код приложенем Google 2FA, либо вбить в приложение secret key вручную.
Emergency scratch codes (5 штук) просто сохраним или запишем на бумаге. Они нужны на случай, если мы потеряли телефон (они одноразовые!).

Теперь отвечаем на вопросы:
1) Do you want me to update your "/home/exampleuser/.google_authenticator" file (y/n)
Отвечаем y
2) Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n)
Отвечаем y
3) By default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n)
Отечаем n
4) If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n)
Отвечаем y
Настройка конфигурации
Для корректной работы google-authenticator , нам потребуется PAM (Pluggable Authentication Modules for Linux).
На этом этапе важно открыть два сеанса putty, так как скоро, для проверки 2FA, нам нужно будет войти на сервер заново. И если мы не сможем залогиниться на сервер по 2FA, то в открытом сеансе сможем решить проблему. Так же проблему можно будет решить через консоль личного кабинета провайдера.
Редактирование файла /etc/pam.d/sshd
Открываем файл /etc/pam.d/sshd :
В конце файла вставляем строки:
Где первая строка сообщает для PAM что вначале надо запросить пароль! Во второй строке задается требование о дополнительной верификации - google_authenticator.
Редактирование файла /etc/ssh/sshd_config
В этом файле нам также требуется прописать дополнительное требование верификации.
Найдите строку ChallengeResponseAuthentication no. Нужно установить ее значение в yes:
Вместо example-user вставьте нужного вам пользователя. Допустим root И вставьте измененные строки вконец файла:
Если нужно включить 2FA для остальных пользователей - вставьте блок выше для каждого пользователя ( и изменив example-user).
Перезагрузим сервис sshd и все готово:
Теперь При входе на сервер сначала нужно будет вводить пароль, а затем код двухфакторной аутентификации. 🎉
Last updated