Bagaimana cara mengaktifkan 2-faktor auth menggunakan Google Authenticator untuk akses openVPN berbasis file .ovpn?

11

Saya memiliki pengaturan openVPN di mana pengguna tidak memiliki akun shell pada Debian VM yang menjalankan openVPN. Artikel-artikel yang saya temukan ketika Googling semuanya memiliki instruksi pengaturan Google Authenticator untuk pengguna * nix klasik (perlu menjalankan biner Authenticator di direktori home pengguna, misalnya).

Apakah ada dokumen yang menjelaskan cara mengintegrasikan Google Authenticator untuk server openvpn yang mengautentikasi hanya berdasarkan .ovpnfile yang digunakan pada sisi klien?

Saya melihat https://github.com/evgeny-gridasov/openvpn-otp , tetapi masih membutuhkan konfigurasi Google Authenticator.

Animesh
sumber
Apakah masalah pendaftaran google authenticator atau kebutuhan untuk memasukkan kata sandi?
cornelinux

Jawaban:

4

Tidak. Tentu saja kamu tidak bisa melakukan itu. Ini akan mengalahkan tujuan 2FA. Server Anda harus memiliki cara untuk memverifikasi kredensial pengguna, dan info ini tidak boleh dikirim melalui jaringan (mis. Anda tidak dapat menggunakan hanya file client.ovpn).

Meskipun Anda tidak harus membuat pengguna unix, tetapi Anda harus membiarkan pengguna Anda menginstal kode verifikasi mereka ke server. Anda dapat menggunakan sftp dengan pengguna virtual menggunakan sertifikat mereka yang sudah dikeluarkan, https dengan otorisasi sisi klien (saling), CIFS (samba), atau ftp lama yang baik dengan ekstensi TLS atau cara lain apa pun yang memungkinkan server mengetahui kode verifikasi yang dibuat oleh pengguna . Saluran komunikasi harus aman (dienkripsi | | lokal).

Tentu saja jika pengguna Anda mengunggah file mereka sendiri, Anda tidak dapat menggunakan kredensial berbasis file agregat yang digunakan oleh openvpn-otp. Untungnya kami memiliki pilihan lain (dan jauh lebih baik) dengan menggunakan pam modul keamanan linux yang sangat baik.

Pertama-tama, Anda harus mengumpulkan file pengguna yang dibuat oleh google-authenticator dalam direktori dengan salah satu metode yang disebutkan di atas. Dalam kasus kami adalah / etc / google-auth.

Anda harus memberlakukan id pengguna tunggal untuk semua file di sini, karena Anda tidak memiliki pengguna asli. Biarkan itu openvpn . Izin harus 0400 (-r --------). Pam tidak suka kredensial dunia / grup yang dapat dibaca (tentu saja). Anda dapat dengan mudah menerapkan ini dengan samba, apache, ftp atau yang terburuk menggunakan tab cron (tidak disarankan).

Untuk tujuan pengujian, lakukan saja ini:

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

Setelah itu Anda meminta openvpn untuk mengotentikasi terhadap libpam, yang memiliki modul auth google sendiri. Tambahkan ini ke file server openvpn Anda:

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

Ini mengatakan kita akan menggunakan metode otentikasi pam dengan pam auth id openvpn .

Sekarang, buat pengaturan pam untuk openvpn. Edit /etc/pam.d/openvpn:

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

Di sini kami mengatakan bahwa tanpa autentikasi google yang berhasil, kami gagal segera (diperlukan), kami menggunakan file rahasia khusus alih-alih $ HOME / .google_authenticator (secret =) default dan kami mengakses file sebagai pengguna openvpn karena tidak ada userid yang terkait dengan pengguna kami. Pada baris berikutnya kami hanya mengatakan kami mengizinkan semua orang untuk terhubung setelah otentikasi berhasil. Tentu saja Anda harus menerapkan kebijakan izin Anda sendiri di sini. Anda dapat mengontrol pengguna yang diizinkan berdasarkan file, mysql db atau ldap dengan modul pam masing-masing.

Tambahkan ini ke file klien openvpn Anda

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

Kami menggunakan auth-user-pass untuk membiarkan klien openvpn untuk meminta nama pengguna dan kata sandi. Kami tidak suka caching ("kata sandi" berubah) dan pengunduran diri secara berkala buruk bagi kami karena alasan yang sama.

Setelah itu, Anda harus dapat terhubung tanpa openvpn-otp. Silakan pertimbangkan ini adalah metode yang jauh lebih fleksibel, karena Anda dapat menerapkan aturan yang sangat kompleks dalam file kontrol pam jika Anda mau. Anda dapat mengaktifkan / menonaktifkan pengguna berdasarkan direktori mysql atau ldap Anda tanpa menyentuh sertifikat itu misalnya.

Goteguru
sumber
1

Pengaturan: OpenVPN Server dengan 2FA (Google Authenticator) di Ubuntu Server 18.04.4 LTS untuk Raspberry Pi Hardware: Raspberry Pi 3 Model B + Rev 1.3

  • Anda harus login dengan pengguna linux tanpa pengaturan login 2FA aktif (pengguna case saya)
  • masukkan perintah berikut
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
  • tambahkan file berikut ini file konfigurasi openvpn Anda (dalam kasus saya /etc/openvpn/server/server.conf)
plugin /usr/lib/aarch64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so  openvpn
  • buat file /etc/pam.d/openvpn dan isi dengan konten berikut
# 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
  • tambahkan 3 baris berikut ke file klien openvpn Anda
auth-user-pass
auth-nocache
reneg-sec 0
  • restart layanan openvpn dan jalankan tes
systemctl restart openvpn@server
  • ketika koneksi dengan klien OpenVPN (di windows 10) Anda mendapatkan login tambahan (Pengguna: someuser / Kata Sandi: 'OTP dari Google Authenticator')
Wolfgang Reidlinger
sumber