Я пытаюсь настроить MFA с аутентификатором Google для моей установки OpenVPN в Ubuntu 16.04. Теперь OpenVPN работает нормально, пока я не добавлю Google Authenticator.
Мой файл server.conf выглядит следующим образом:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.0.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
client-to-client
keepalive 10 120
tls-auth ta.key 0
key-direction 0
cipher AES-128-CBC
auth SHA256
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
reneg-sec 0
Мой client.conf выглядит следующим образом:
client
dev tun
proto udp
remote 10.1.0.2 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
comp-lzo
verb 3
cipher AES-128-CBC
auth SHA256
key-direction 1
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
auth-user-pass
auth-nocache
reneg-sec 0
Кроме того, в /etc/pam.d я клонировал общие учетные записи, чтобы создать файл openvpn со следующими строками:
account requisite pam_deny.so
account required pam_permit.so
auth requisite pam_google_authenticator.so secret=/home/${USER}/.google_authenticator
Теперь я создал необходимые профили пользователей для каждого клиента, подключающегося к серверу VPN, например client1, client2 и client3 в Ubuntu. Теперь представьте, что client1 пытается подключиться к серверу VPN. Я вошел в систему как client1 в системе на стороне клиента и пытаюсь подключиться к VPN-серверу.
Я получаю следующее,
Enter Auth Username: ******
Enter Auth Password: ************* ( Password for local user profile? + OTP)
После этого я получаю
[server] Peer Connection Initiated with [AF_INET]10.1.0.2:1194
SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
AUTH: Received control message: AUTH_FAILED
TCP/UDP: Closing socket
SIGTERM[soft,auth-failure] received, process exiting
Теперь я не был уверен, почему я получаю ошибку AUTH failed. Я видел много разных способов ввода комбинации имени пользователя и пароля в процессе подключения к серверу VPN.
Method 1 - username ; password (local account password + OTP)
Method 2 - username ; password (local account password) +
separate prompt section which asks for Google authenticator OTP
Method 3 - username ; OTP
Мне никогда не предлагалось отдельное приглашение Google Authenticator с просьбой ввести OTP отдельно. Итак, я попробовал метод 1 и попробовал метод 2, ожидая приглашения аутентификатора Google, которое так и не появилось.
Вопрос 1. Как правильно использовать учетные данные для входа в Google Authenticator. Мне что-то здесь не хватает, что может быть причиной того, что мне не предлагается отдельно ввести OTP?
Еще я заметил, что
sudo systemctl status openvpn@server
дает разные результаты для двух вышеуказанных методов входа.
Я получил эти статусные сообщения, когда пытался использовать разные комбинации паролей и одноразовых паролей.
openvpn(pam_google_authenticator)[15305]: Invalid verification code
openvpn(pam_google_authenticator)[15305]: Did not receive verification code from user
openvpn(pam_google_authenticator)[15305]: Failed to compute location of secret file
Вопрос 2: Может ли кто-нибудь объяснить мне, что означают эти статусные сообщения с точки зрения моих входных данных.
Вопрос 3: Как мне запустить MFA.
К вашему сведению, я использовал libpam-google-Authenticator. Я не следовал методу, который требовал использования make-файла и добавления параметров конфигурации для pam.
Спасибо!
Файл .google_authenticator должен иметь разрешение 0600, но ваш дом должен быть 0711 (если вы не правильно настроили группы, то 0710). Только вчера были те же проблемы. Если у вас есть SELinux mage, убедитесь, что это тоже не мешает.
Также попробуйте добавить это в /etc/pam.d/openvpn
auth requisite pam_google_authenticator.so forward_pass
auth required pam_unix.so use_first_pass
Убедитесь, что /home/user
каталог не менее +x
чтобы все могли читать файл .google_authenticator в домашнем каталоге.