Добавить в корзинуПозвонить
Найти в Дзене

[Cloud.ru] Настройка двойной аутентификации по SSH [Логин+ TOTP]

Данная статья является частью серии статей: Виртуальная машина для pet-проектов
И является продолжением статьи Создание новой ВМ. Настройка сети. Доступ по SSH
Для генерации паролей TOTP я буду использовать Kaspersky Password Manager, но вы можете использовать любые другие программы, которые поддерживают TOTP, например, Яндекс Ключ.
Помимо подключения по TOTP мы добавим:
Оглавление

Данная статья является частью серии статей: Виртуальная машина для pet-проектов

И является продолжением статьи Создание новой ВМ. Настройка сети. Доступ по SSH

Для генерации паролей TOTP я буду использовать Kaspersky Password Manager, но вы можете использовать любые другие программы, которые поддерживают TOTP, например, Яндекс Ключ.

Помимо подключения по TOTP мы добавим:

  • Ограничение на число подключений
  • Ограничение на число ошибок ввода
  • Ограничим время ожидания ввода пароля
  • Блокировку по IP на час

Вводные данные

  • На телефоне программа: Kaspersky Password Manager
  • ОС: Ubuntu 22.04 в облаке Cloud.ru.
  • user1: имеет права sudo
  • user2: не имеет прав sudo
  • Цель: user2 может подключаться по SSH по Паролю+TOTP

Установка модуля PAM для TOTP

Нужно для настройки двухфакторной аутентификации

sudo apt install libpam-google-authenticator -y

Я скачиваю программу от Google, т.к. она бесплатная и работает локально (т.е. в google не передает данные), но можно использовать другие аналоги, в т.ч. российские.

Генерация TOTP-секрета для user2

Переходим на user2

su - user2

Выполняем команду (Лучше не выполнять команду через Серийную консоль)

google-authenticator

Появится опрос.

  • Генерируем токен

Do you want authentication tokens to be time-based y

Появится QR code

-2

Снизу просят ввести код из приложения.

-3

Сканируем QR code в приложении Kaspersky Password Manager, для этого заходим в приложение и нажимаем: плюс - Аутентификатор - Сканировать QR

В Kaspersky Password Manager появится блок с автогенерацией пароля. Сгенерированное число из 6 цифр. Надо его ввести в терминал. Надо это делать быстро, иначе придется вводить вновь сгенерированное число.

После в консоли появятся числа на случай восстановления доступа. Это резервные скретч-коды, их можно сохранить, например, в тот же Kaspersky Password Manager.

-4

После этого опрос продолжится.

  • Соглашаемся обновить файл .google_authenticator

Do you want me to update your "/home/tano/.google_authenticator" file? (y/n) y

  • Запрещаем повторно использовать код

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

  • Оставляем стандартные 30 сек (безопаснее)

By default, a new token is generated every 30 seconds by the mobile app.

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. This allows for a

time skew of up to 30 seconds between authentication server and client. If you

experience problems with poor time synchronization, you can increase the window

from its default size of 3 permitted codes (one previous code, the current

code, the next code) to 17 permitted codes (the 8 previous codes, the current

code, and the 8 next codes). This will permit for a time skew of up to 4 minutes

between client and server.

Do you want to do so? (y/n) n

  • Включаем лимит попыток ввода

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

Защищаем файл с секретами

chmod 600 ~/.google_authenticator

Настраиваем PAM

Возвращаемся на пользователя с sudo

su – user1

Открываем файл /etc/pam.d/sshd

sudo vim /etc/pam.d/sshd

Сверху находим строку, переходим в режим редактирования i

@include common-auth

Ниже этой записи прописываем новую:

auth required pam_google_authenticator.so
-5

Это настройка последовательности аутентификации, т.е. сначала будет проверка пароля, потом будет проверка TOTP

Выходим из режима редактирования ESC

Сохраняемся и выходим из файла :wq!

Настраиваем SSH подключение к ВМ через Логин+TOTP

Правим файл sudo vim /etc/ssh/sshd_config

Переходим в режим редактирования i

В прошлой статье мы уже делали настройки

#Include /etc/ssh/sshd_config.d/*.conf
PasswordAuthentication yes
PermitEmptyPasswords no
PubkeyAuthentication no
PermitRootLogin no
AllowUsers user2

Предыдущие настройки можем оставить и добавить новые:

Вводим ограничения на кол-во попыток ввода, время ожидания ввода и кол-во сессий

MaxAuthTries 3
LoginGraceTime 30
MaxSessions 3

Указываем настройки интерактивного ввода пароля.

KbdInteractiveAuthentication yes
ChallengeResponseAuthentication yes

Выходим из редактирования ESC

Сохраняемся командой :wq!

Проверяем синтаксис

sudo sshd -t

Если ошибок нет, перезапускаем SSH

sudo systemctl restart sshd

Настройка блокировки по IP

Устанавливаем fail2ban

sudo apt install fail2ban -y

Создаем конфиг для SSH

sudo vim /etc/fail2ban/jail.local

В файл прописываем строки:

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = iptables-multiport
banaction_allports = iptables-allports
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 3600

Важные пояснения:

  • maxretry = 3 — после 3 неудачных попыток IP блокируется.
  • findtime = 600 — эти 3 попытки должны быть в течение 10 минут.
  • bantime = 3600 — блокировка на 1 час.

Перезапуск службы

sudo systemctl restart fail2ban
sudo systemctl status fail2ban

На этом всё, можно пробовать зайти по ssh с телефона или иного устройства.

Теперь доступ по SSH осуществляется только для user2 и сначала запрашивается обычный пароль, а потом Verification code - это код TOTP, который генерируется в приложении Kaspersky Password Manager

-6