วิธีเปิดใช้งานการตรวจสอบสิทธิ์แบบ 2 ปัจจัยโดยใช้ Google Authenticator สำหรับการเข้าถึง openVPN แบบอิงไฟล์. vpn


11

ฉันมีการตั้งค่า openVPN ที่ผู้ใช้ไม่มีบัญชีเชลล์ใน Debian VM ที่ใช้งาน openVPN บทความที่ฉันพบในขณะที่ Googling ทุกคนมีคำแนะนำในการตั้งค่า Google Authenticator สำหรับผู้ใช้ * nix แบบคลาสสิก (จำเป็นต้องเรียกใช้ binary Authenticator ในไดเรกทอรีหลักของผู้ใช้เป็นต้น)

มีเอกสารอธิบายวิธีรวม Google Authenticator สำหรับเซิร์ฟเวอร์ openvpn ที่รับรองความถูกต้องโดยยึดตาม.ovpnไฟล์ที่ใช้ในฝั่งไคลเอ็นต์หรือไม่

ฉันดูที่https://github.com/evgeny-gridasov/openvpn-otpแต่ก็ยังต้องมีการกำหนดค่า Google Authenticator


ปัญหาในการลงทะเบียนของ Google authenticator หรือจำเป็นต้องใส่รหัสผ่านหรือไม่?
cornelinux

คำตอบ:


4

ไม่แน่นอนคุณไม่สามารถทำเช่นนั้นได้ นี่จะเป็นจุดประสงค์ที่สำคัญของ 2FA เซิร์ฟเวอร์ของคุณต้องมีวิธีการยืนยันข้อมูลรับรองผู้ใช้และไม่ควรส่งข้อมูลนี้ผ่านเครือข่าย (เช่นคุณไม่สามารถใช้ไฟล์ client.ovpn เพียงอย่างเดียว)

แม้ว่าคุณไม่จำเป็นต้องสร้างผู้ใช้ unix แต่คุณต้องให้ผู้ใช้ของคุณติดตั้งรหัสยืนยันไปยังเซิร์ฟเวอร์ คุณสามารถใช้ sftp กับผู้ใช้เสมือนโดยใช้ใบรับรองที่ออกแล้ว https กับการอนุญาตฝั่งไคลเอ็นต์ (ซึ่งกันและกัน), CIFS (samba) หรือ ftp เก่าที่ดีพร้อมส่วนขยาย TLS หรือวิธีอื่นใดที่ทำให้เซิร์ฟเวอร์ทราบรหัสยืนยันที่ผู้ใช้สร้างขึ้น . ช่องทางการสื่อสารควรมีความปลอดภัย (เข้ารหัส || ท้องถิ่น)

โดยปกติหากผู้ใช้ของคุณอัปโหลดไฟล์ของตัวเองคุณจะไม่สามารถใช้ข้อมูลประจำตัวตามไฟล์รวมที่ใช้โดย 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 ตรวจสอบสิทธิ์กับ libpam ซึ่งมีโมดูลการรับรองความถูกต้องของ Google ผนวกสิ่งนี้เข้ากับไฟล์เซิร์ฟเวอร์ openvpn ของคุณ:

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

นี้กล่าวว่าเราจะใช้วิธีการตรวจสอบแพมกับแพมรับรองความถูกต้องรหัสOpenVPN

ตอนนี้สร้างการตั้งค่า pam สำหรับ openvpn แก้ไข /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 =) และเราเข้าถึงไฟล์ในฐานะผู้ใช้ openvpn เนื่องจากไม่มีรหัสผู้ใช้จริง กับผู้ใช้ของเรา ในบรรทัดถัดไปเราเพียงแค่บอกว่าเราอนุญาตให้ทุกคนเชื่อมต่อหลังจากการตรวจสอบสิทธิ์สำเร็จ แน่นอนคุณควรใช้นโยบายการอนุญาตของคุณเองที่นี่ คุณสามารถควบคุมผู้ใช้ที่ได้รับอนุญาตโดยไฟล์ mysql db หรือ ldap ด้วยโมดูล pam ที่เกี่ยวข้อง

ผนวกสิ่งนี้เข้ากับไฟล์ไคลเอนต์ openvpn ของคุณ

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

เราใช้ auth-user-pass เพื่อให้ลูกค้า openvpn ถามชื่อผู้ใช้และรหัสผ่าน เราไม่ชอบแคช ("รหัสผ่าน" กำลังเปลี่ยนแปลง) และการเจรจาใหม่เป็นระยะ ๆ นั้นไม่ดีสำหรับเราด้วยเหตุผลเดียวกัน

หลังจากนั้นคุณจะสามารถเชื่อมต่อได้โดยไม่ต้อง openvpn-otp โปรดพิจารณาว่านี่เป็นวิธีที่ยืดหยุ่นกว่าเนื่องจากคุณสามารถใช้กฎที่ซับซ้อนมากในไฟล์ควบคุม pam หากคุณต้องการ คุณสามารถเปิด / ปิดการใช้งานผู้ใช้ตามไดเรกทอรี mysql หรือ ldap ของคุณโดยไม่ต้องแตะใบรับรองดังกล่าว


1

ติดตั้ง: เซิร์ฟเวอร์ OpenVPN พร้อม 2FA (Google Authenticator) บน Ubuntu Server 18.04.4 LTS สำหรับ Raspberry Pi ฮาร์ดแวร์: Raspberry Pi 3 รุ่น B + Rev 1.3

  • คุณต้องเข้าสู่ระบบด้วยผู้ใช้ linux ที่ไม่มีการตั้งค่าการเข้าสู่ระบบ 2FA ที่ใช้งานอยู่ (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
  • เพิ่ม 3 บรรทัดต่อไปนี้ในไฟล์ไคลเอนต์ openvpn ของคุณ
auth-user-pass
auth-nocache
reneg-sec 0
  • รีสตาร์ทเซอร์วิส openvpn และรันการทดสอบ
systemctl restart openvpn@server
  • เมื่อเชื่อมต่อกับไคลเอนต์ OpenVPN (ใน windows 10) คุณจะได้รับการเข้าสู่ระบบเพิ่มเติม (ผู้ใช้: someuser / รหัสผ่าน: 'OTP จาก Google Authenticator')
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.