Làm cách nào để bật auth 2 yếu tố bằng Google Authenticator để truy cập openVPN dựa trên tệp .ovpn?


11

Tôi có một thiết lập openVPN nơi người dùng không có tài khoản shell trên Debian VM chạy openVPN. Các bài viết tôi tìm thấy trong khi Google đều có hướng dẫn thiết lập Google Authenticator cho người dùng * nix cổ điển (ví dụ: cần phải thực thi nhị phân Authenticator trong thư mục chính của người dùng).

Có tài liệu giải thích cách tích hợp Google Authenticator cho các máy chủ openvpn xác thực chỉ dựa trên .ovpncác tệp được sử dụng ở phía máy khách không?

Tôi đã xem https://github.com/evgeny-gridasov/openvpn-otp , nhưng nó vẫn yêu cầu định cấu hình Google Authenticator.


Là vấn đề đăng ký của trình xác thực google hoặc cần phải nhập mật khẩu?
cornelinux

Câu trả lời:


4

Tất nhiên là bạn không thể làm điều đó. Điều này sẽ đánh bại mục đích của 2FA. Máy chủ của bạn phải có cách xác minh thông tin đăng nhập của người dùng và thông tin này không nên được gửi qua mạng (ví dụ: bạn không thể chỉ sử dụng tệp client.ovpn).

Mặc dù bạn không nhất thiết phải tạo người dùng unix, nhưng bạn phải cho phép người dùng của mình cài đặt mã xác minh của họ cho máy chủ. Bạn có thể sử dụng sftp với người dùng ảo bằng chứng chỉ đã được cấp của họ, https với ủy quyền của khách hàng, lẫn nhau, CIFS (samba) hoặc ftp cũ tốt với tiện ích mở rộng TLS hoặc bất kỳ cách nào khác để máy chủ biết mã xác minh được tạo bởi người dùng . Kênh liên lạc phải được bảo mật (được mã hóa | | cục bộ).

Đương nhiên nếu người dùng của bạn tải lên các tệp của riêng họ, bạn không thể sử dụng thông tin xác thực dựa trên tệp tổng hợp được sử dụng bởi openvpn-otp. May mắn thay, chúng tôi có một tùy chọn khác (và tốt hơn nhiều) bằng cách sử dụng pam mô-đun bảo mật tuyệt vời linux.

Trước hết, bạn phải thu thập các tệp người dùng được tạo bởi google-Authenticator trong một thư mục theo một trong các phương pháp được đề cập ở trên. Trong trường hợp của chúng tôi, nó sẽ là / etc / google-auth.

Bạn phải thực thi id người dùng cho tất cả các tệp ở đây, vì bạn không có người dùng thực. Hãy để nó là openvpn . Các quyền phải là 0400 (-r --------). Pam không thích thông tin có thể đọc được trên thế giới / nhóm (chắc chắn). Bạn có thể dễ dàng thực thi điều này với samba, apache, ftp hoặc trong trường hợp xấu nhất bằng cách sử dụng tab cron (không được khuyến nghị).

Đối với mục đích thử nghiệm, chỉ cần làm điều này:

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

Sau đó, bạn yêu cầu openvpn xác thực với libpam, có mô-đun google auth riêng. Nối nó vào tệp máy chủ openvpn của bạn:

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

Điều này nói rằng chúng tôi sẽ sử dụng phương thức xác thực pam với id ph auth id openvpn .

Bây giờ, tạo thiết lập pam cho openvpn. Chỉnh sửa /etc/pam.d/openvpn:

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

Ở đây chúng tôi nói rằng nếu không xác thực google thành công, chúng tôi sẽ thất bại ngay lập tức (cần thiết), chúng tôi đang sử dụng một tệp bí mật đặc biệt thay vì $ HOME / .google_authenticator (secret =) và chúng tôi truy cập các tệp như người dùng openvpn vì không có người dùng thực sự liên quan với người dùng của chúng tôi. Trong dòng tiếp theo, chúng tôi chỉ nói rằng chúng tôi cho phép mọi người kết nối sau khi xác thực thành công. Tất nhiên bạn nên thực hiện chính sách cho phép của riêng bạn ở đây. Bạn có thể kiểm soát người dùng được phép bằng tệp, mysql db hoặc ldap với các mô-đun pam tương ứng.

Nối nó vào tệp khách openvpn của bạn

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

Chúng tôi sử dụng auth-user-pass để cho phép máy khách openvpn hỏi tên người dùng và mật khẩu. Chúng tôi không thích bộ nhớ đệm ("mật khẩu" đang thay đổi) và việc phủ định lại định kỳ có hại cho chúng tôi vì lý do tương tự.

Sau đó, bạn sẽ có thể kết nối mà không cần openvpn-otp. Vui lòng xem đây là phương pháp linh hoạt hơn nhiều, vì bạn có thể thực hiện các quy tắc rất phức tạp trong các tệp kiểm soát pam nếu bạn muốn. Bạn có thể bật / tắt người dùng dựa trên thư mục mysql hoặc ldap của bạn mà không cần chạm vào các chứng chỉ đó chẳng hạn.


1

Thiết lập: Máy chủ OpenVPN với 2FA (Google Authenticator) trên Ubuntu Server 18.04.4 LTS cho Raspberry Pi Phần cứng: Raspberry Pi 3 Model B + Rev 1.3

  • bạn phải đăng nhập với người dùng linux không có thiết lập đăng nhập 2FA đang hoạt động (trường hợp của tôi là một số người dùng)
  • nhập các lệnh sau
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
  • thêm tệp sau vào tệp cấu hình openvpn của bạn (trong trường hợp của tôi /etc/openvpn/server/server.conf)
plugin /usr/lib/aarch64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so  openvpn
  • tạo tập tin /etc/pam.d/openvpn và điền nó với nội dung sau
# 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
  • thêm 3 dòng sau vào tệp khách hàng openvpn của bạn
auth-user-pass
auth-nocache
reneg-sec 0
  • khởi động lại dịch vụ openvpn và chạy thử nghiệm
systemctl restart openvpn@server
  • khi kết nối với ứng dụng khách OpenVPN (trong windows 10), bạn sẽ có được thông tin đăng nhập bổ sung (Người dùng: someuser / Password: 'OTP từ Google Authenticator')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.