Cách sử dụng Google Authenticator với máy chủ OpenVPN trên Ubuntu 12.04


9

Tôi có một hệ thống OpenVPN đang hoạt động trên Ubuntu 12.04 và tôi muốn thêm Google Authenticator để bảo mật hơn.

Đây là cấu hình openvpn hiện tại của tôi:

nhà phát triển
proto udp
cổng 1096
ca ubuserv04-ca.crt
chứng nhận ubuserv04.crt
khóa ubuserv04.key
dh dh1024.pem
máy chủ 10.10.0.0 255.255.255.0
đẩy "redirect-gateway def1"
đẩy "tuyến 192.168.0.0 255.255.255.0"
đẩy "tùy chọn dhcp DNS 8.8.8.8"
đẩy "tùy chọn dhcp DNS 8.8.4.4"
Phao nổi
đăng nhập /var/log/openvpn-otp-1096-status.log

(Đây chỉ là một thiết lập thử nghiệm, tôi biết tôi nên thay đổi một số khía cạnh của nó nhưng hiện tại nó hoạt động.)

Trên máy khách tôi có:

nhà phát triển
khách hàng
proto udp
từ xa my.server.fqdn 1096
độ phân giải-thử lại vô hạn
ca ubuserv04-ca.crt
chứng nhận user1.crt
khóa user1.key
động từ 3

Các thiết lập trên hoạt động tốt: không có lỗi, nhanh, ổn định.

Tôi đã thử một vài cách để chạy Google Authenticator nhưng cuối cùng tôi vẫn khắc phục sự cố bên lề trong các bài viết đó. Tôi không muốn xác thực với cơ sở dữ liệu mật khẩu / người dùng cục bộ của máy chủ, chỉ là hệ thống tôi đã có sẵn cùng với Google Authenticator.

Tôi có Google Authenticator đang chạy; Tôi đã cài đặt nó bằng cách sử dụng apt-get install libpam-google-Authenticator và đã sử dụng nó trước đó để xác thực các phiên ssh. Điều đó đã làm việc tốt nhưng tôi đã vô hiệu hóa nó bởi vì nó chỉ là một máy chủ thử nghiệm và thử nghiệm cụ thể đó đã kết thúc.

Hãy cụ thể. Tôi biết tôi nên thêm một plugin vào cấu hình ovpn của máy chủ của mình và tôi nên thêm một cái gì đó vào /etc/pam.d/openvpn nhưng chính xác thì sao?

Mọi sự trợ giúp sẽ rất được trân trọng!

/thông tin thêm

Tôi đã theo dõi bài viết này: http://www.howtoforge.com/securing-openvpn-with-a-one-time-password-otp-on-ub Ubuntu Thay vì biên dịch từ nguồn tôi đã cài đặt Google Authenticator với apt -get cài đặt libpam-google-xác thực. Tôi cũng đã đọc, nhưng không được sử dụng trong trường hợp này, các bài viết này: http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/http : //zcentric.com/2012/10/09/google-authenticator-with-openvpn-for-2-factor-auth/ . Và tôi đã đọc về PAM, như được đề xuất;)

Bây giờ, đây là một số phát triển thú vị.

/etc/pam.d/openvpn có điều này:

tài khoản [thành công = 2 new_authtok_Vqd = thực hiện mặc định = bỏ qua] pam_unix.so 
tài khoản [thành công = 1 new_authtok_Vqd = thực hiện mặc định = bỏ qua] pam_winbind.so 
tài khoản cần thiết pam_deny.so
yêu cầu tài khoản pam_permit.so
auth yêu cầu pam_google_authenticator.so

Theo cách làm, tôi đã sao chép bản gốc từ /etc/pam.d/common-account và thêm dòng cuối cùng. Bây giờ nếu tôi nhận xét dòng cuối cùng, kết nối OpenVPN thành công. Tuy nhiên, nếu dòng cuối cùng không được nhận xét, /var/log/auth.log sẽ ghi lại điều này:

PAM không thể dlopen (pam_google_authenticator.so): /lib/security/pam_google_authenticator.so: ký hiệu không xác định: pam_get_item
PAM thêm mô-đun bị lỗi: pam_google_authenticator.so

và /var/log/openvpn-otp-1096.log ghi nhật ký này:

PLUGIN_CALL: chức năng plugin PLUGIN_AUTH_USER_PASS_VERIFY không thành công với trạng thái 1: /usr/lib/openvpn/openvpn-auth-pam.so
Lỗi xác thực TLS: Xác thực tên người dùng / mật khẩu không thành công cho ngang hàng
sử dụng bối cảnh SSL / TLS
AUTH-PAM: BACKGROUND: người dùng 'martin' không xác thực được: Mô-đun không xác định

Vấn đề dường như là giữa PAM và Google Authenticator.

Google liệt kê các vấn đề với các plugin khác nhưng tôi thực sự không thể tìm thấy thông tin liên quan đến Google Authenticator.


"Tôi đã thử một vài cách để chạy Google Authenticator" Bạn có thể liên kết với một số trong số đó không? Thật mơ hồ những gì bạn đã thử chính xác và sẽ rất buồn nếu những người dùng khác đưa ra các phương pháp bạn đã thử. Nhân tiện, libpam-google-authenticatorlà để xác thực bằng Google Authenticator trong PAM. Điều này không được sử dụng trong OpenVPN vì bạn đang sử dụng chứng chỉ ở đó. Tôi đề nghị bạn đọc về PAM là gì - bạn sẽ hiểu rằng nó không liên quan gì đến OpenVPN trong trường hợp của bạn.
gertvdijk

@ "Điều này không được sử dụng trong OpenVPN vì bạn đang sử dụng chứng chỉ ở đó." Vậy là được rồi. Bạn có thể sử dụng chứng chỉ và mật khẩu một lần từ Google Authenticator qua PAM làm yếu tố thứ hai để xác thực trong OpenVPN.
Thiết bị đầu cuối chết tiệt

Thêm thông tin bổ sung cho câu hỏi ban đầu. Không chắc chắn liệu tôi có làm đúng không ...
Forkbeard

@gertvdijk: Tôi nhận thấy quan điểm của bạn về việc nó là dư thừa nhưng tôi muốn sử dụng cả chứng chỉ và mật khẩu một lần. Nó có vẻ an toàn hơn với tôi sau đó sử dụng một trong hai phương pháp riêng lẻ.
Forkbeard

Hừm, nó có vẻ là một lỗi trong Google Authenticator. Xây dựng nó với LDFLAGS = "- lpam" sẽ giúp ích nhưng tôi không chắc làm thế nào để làm điều đó, ví dụ trên Howtoforge (liên kết trong câu hỏi ban đầu) không hoạt động, url trả về 404.
Forkbeard

Câu trả lời:


2

Ok, Google là bạn của tôi.

Tôi đã làm điều này:

# apt-get thanh lọc libpam-google-xác thực
# tải xuống https://code.google.com.vn/p/google-authenticator/doads/list
# apt-get cài đặt libpam-dev

Thêm phần này vào Makefile, ngay sau giấy phép:

LDFLAGS = "- lpam"

Sau đó

# làm
# cài đặt
# khởi động lại dịch vụ openvpn

Ngoài ra, hãy đảm bảo /home/username/.google_authenticator hoàn toàn không có quyền ngoại trừ quyền đọc đối với người dùng sẽ sử dụng nó.

Bây giờ tôi cần nhập tên người dùng là tên người dùng cục bộ của mình trên máy chủ (tài khoản shell của tôi) làm tên người dùng OpenVPN và mã 6 chữ số Google Authenticator làm mật khẩu.

Bây giờ nó hoạt động.

Cảm ơn bạn đã dành thời gian cho tôi :)

(Làm cách nào tôi có thể đánh dấu bài đăng này là đã giải quyết? Tôi chỉ cần chỉnh sửa tiêu đề chủ đề?)


2

Nếu bạn chỉ muốn OTP auth cho OpenVPN, có sẵn plugin OTP OpenVPN. Nó tương thích với các khóa bí mật của Google Authenticator. Tất cả các bí mật được lưu trữ trong một tệp văn bản duy nhất và không cần phải định cấu hình PAM hoặc tạo thư mục người dùng.

Hãy xem thử: https://github.com/evgeny-gridasov/openvpn-otp


Cảm ơn bạn đã trả lời, egridasov. Vì tôi có một thiết lập đang hoạt động nên tôi sẽ không thử nó nhưng tôi có thể thử nó trên một hệ thống khác. Việc trả lại 0 bit tôi thấy đặc biệt hữu ích, tôi đã suy nghĩ về cách làm thế nào để kết nối không bị rớt sau 3600 giây
Forkbeard
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.