Двухфакторная аутентификация SSH только по внешнему адресу

У меня есть сервер Ubuntu с частным, внутренним, IP и общедоступным IP. Я хочу настроить двухфакторную аутентификацию для SSH только на публичной стороне. Это возможно? Я планировал использовать Google Authenticator, но также открыт для альтернативных идей.

2 ответа

Решение

Да, вы можете сделать это с pam_access.so, Этот рецепт был взят из вики для Google Authenticator:

Полезный рецепт PAM - пропустить двухфакторную аутентификацию, когда соединение происходит из определенных источников. Это уже поддерживается PAM. Например, модуль pam_access может использоваться для проверки источника по локальным подсетям:

# skip one-time password if logging in from the local network
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
auth       required     pam_google_authenticator.so

В этом случае access-local.conf выглядит так:

# only allow from local IP range
+ : ALL : 10.0.0.0/24
+ : ALL : LOCAL
- : ALL : ALL

Таким образом, попытки входа в систему с 10.0.0.0/24 не требуют двухфакторной аутентификации.

Мое требование было очень похожим, но более конкретно я хотел: 1) иметь публичный ключ И googleAuth снаружи и 2) иметь публичный ключ ИЛИ пароль изнутри (пароль на случай, если я потеряю все свои публичные ключи):

/etc/ssh/sshd_config:

      AuthenticationMethods publickey,keyboard-interactive
Match address 192.168.2.0/24
    PasswordAuthentication yes
    AuthenticationMethods "password" "publickey"
Match all

/etc/pam.d/sshd:

      # Google Authenticator
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
auth sufficient pam_google_authenticator.so

# Standard Un*x authentication.
auth [success=ignore default=4] pam_access.so accessfile=/etc/security/access-local.conf
@include common-auth

/etc/security/access-local.conf

      + : ALL : 192.168.2.0/24
- : ALL : ALL

В дополнение к предыдущему ответу мне пришлось пропустить 4 правила внутри /etc/pam.d/common-auth снаружи, а также я настроил аутентификацию Google на достаточную вместо обязательной. Я сделал это в Ubuntu 20.04, но это решение должно быть довольно общим.

Другие вопросы по тегам