.ovpn 파일 기반 openVPN 액세스를 위해 Google OTP를 사용하여 2 단계 인증을 사용하는 방법은 무엇입니까?


11

사용자에게 openVPN을 실행하는 데비안 VM에 쉘 계정 이 없는 openVPN 설정이 있습니다. 인터넷 검색에서 찾은 기사에는 모두 고전적인 * nix 사용자를 위해 Google OTP를 설정하는 방법이 있습니다 (예 : 사용자의 홈 디렉토리에서 OTP 바이너리를 실행해야 함).

.ovpn클라이언트 측에서 사용되는 파일 만을 기반으로 인증하는 openvpn 서버에 Google OTP를 통합하는 방법을 설명하는 문서가 있습니까?

나는 보았다 https://github.com/evgeny-gridasov/openvpn-otp ,하지만 여전히 Google OTP를 구성해야합니다.


Google 인증 자 등록에 문제가 있거나 비밀번호를 입력해야합니까?
cornelinux

답변:


4

물론 이죠. 그렇게 할 수는 없습니다. 이것은 2FA의 목적을 무너 뜨릴 것이다. 귀하의 서버가 있어야 사용자 자격 증명을 확인하는 방법이 있고,이 정보는 네트워크를 통해 전송해서는 안된다 (예. 당신이 전적으로 client.ovpn 파일을 사용할 수 없습니다).

반드시 유닉스 사용자를 만들 필요는 없지만, 사용자가 자신의 인증 코드를 서버에 설치하도록해야합니다. 이미 발급 된 인증서, 클라이언트 쪽 (상호) 권한이있는 https, CIFS (삼바) 또는 TLS 확장이 포함 된 올바른 오래된 ftp 또는 사용자가 만든 확인 코드를 서버에 알리는 다른 방법을 사용하여 가상 사용자와 함께 sftp를 사용할 수 있습니다. . 통신 채널은 안전해야합니다 (암호화 된 || 로컬).

당연히 사용자가 자신의 파일을 업로드하는 경우 openvpn-otp에서 사용하는 집계 된 파일 기반 자격 증명을 사용할 수 없습니다. 다행히도 Linux의 우수한 보안 모듈 pam을 사용하여 또 다른 (그리고 훨씬 나은) 옵션이 있습니다.

우선, 위에서 언급 한 방법 중 하나를 사용하여 디렉토리에서 google-authenticator로 작성된 사용자 파일을 수집해야합니다. 이 경우에는 / etc / google-auth가됩니다.

당신은 있어야 당신이 실제 사용자가 없기 때문에, 여기에서 모든 파일을 하나의 사용자 ID를 적용합니다. openvpn 이라고하자 . 권한은 0400 (-r --------)이어야합니다. Pam은 월드 / 그룹이 읽을 수있는 자격 증명을 좋아하지 않습니다 (확실히). samba, apache, ftp 또는 cron 탭 (권장되지 않음)을 사용하여 최악의 경우이를 쉽게 시행 할 수 있습니다.

테스트 목적으로 다음을 수행하십시오.

mkdir /etc/google-auth
apt-get install libpam-google-authenticator
google-authenticator
# set up as you wish, save image and/or codes
mv ~/.google_authenticator /etc/google-auth/some_username
chown -R openvpn /etc/google-auth

그런 다음 openvpn에 자체 Google auth 모듈이있는 libpam에 대해 인증하도록 요청하십시오. 이것을 openvpn 서버 파일에 추가하십시오 :

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn

이것은 pam auth id openvpn 과 함께 pam 인증 방법을 사용할 것이라고 말합니다 .

이제 openvpn에 대한 pam 설정을 만듭니다. /etc/pam.d/openvpn을 편집하십시오.

auth    requisite       /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER}  user=openvpn
account    required     pam_permit.so

여기서 Google 인증에 실패하면 즉시 실패합니다 (필수). 기본 $ HOME / .google_authenticator (secret =) 대신 특수 비밀 파일을 사용하고 실제 사용자 ID가 없기 때문에 파일을 openvpn 사용자로 액세스합니다. 우리의 사용자와. 다음 줄에서는 인증 성공 후 모든 사람이 연결할 수 있다고 말합니다. 물론 여기에서 자신의 권한 정책을 구현해야합니다. 각 pam 모듈을 사용하여 파일, mysql db 또는 ldap을 통해 허용 된 사용자를 제어 할 수 있습니다.

이것을 openvpn 클라이언트 파일에 추가하십시오

   auth-user-pass
   auth-nocache
   reneg-sec 0

우리는 auth-user-pass를 사용하여 openvpn 클라이언트가 사용자 이름과 비밀번호를 요청할 수 있도록합니다. 우리는 캐싱을 좋아하지 않으며 ( "비밀번호"가 변경됨) 같은 이유로 주기적 재협상이 우리에게 나쁩니다.

그 후에는 openvpn-otp없이 연결할 수 있어야합니다. 원하는 경우 pam 제어 파일에서 매우 복잡한 규칙을 구현할 수 있으므로이 방법이 훨씬 유연한 방법이라고 생각하십시오. 예를 들어 해당 인증서를 건드리지 않고 mysql 또는 ldap 디렉토리를 기반으로 사용자를 활성화 / 비활성화 할 수 있습니다.


1

설정 : Raspberry Pi 하드웨어 용 Ubuntu Server 18.04.4 LTS에 2FA (Google OTP)가있는 OpenVPN 서버 : Raspberry Pi 3 Model B + Rev 1.3

  • 활성 2FA 로그인 설정이없는 Linux 사용자로 로그인해야합니다 (내 경우에는 someuser)
  • 다음 명령을 입력하십시오
sudo apt install libqrencode3 libpam-google-authenticator
google-authenticator
sudo mv /home/someuser/.google_authenticator /etc/google-auth/someuser
sudo chown -R root /etc/google-auth
  • 다음 파일을 openvpn 구성 파일을 추가하십시오 (필자의 경우 /etc/openvpn/server/server.conf)
plugin /usr/lib/aarch64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so  openvpn
  • /etc/pam.d/openvpn 파일을 만들고 다음 내용으로 채우십시오.
# Google Authenticator
auth    requisite       /lib/aarch64-linux-gnu/security/pam_google_authenticator.so secret=/etc/google-auth/someuser user=root
account    required     pam_permit.so
  • openvpn 클라이언트 파일에 다음 3 줄을 추가하십시오.
auth-user-pass
auth-nocache
reneg-sec 0
  • openvpn 서비스를 다시 시작하고 테스트를 실행하십시오.
systemctl restart openvpn@server
  • OpenVPN 클라이언트와 연결하면 (Windows 10에서) 추가 로그인을 얻습니다 (사용자 : someuser / 비밀번호 : 'OTP from Google Authenticator')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.