ความจำเป็นในการเข้าถึงสภาพแวดล้อมองค์กรจากระยะไกลเกิดขึ้นบ่อยครั้งมากขึ้น ไม่ว่าจะเป็นผู้ใช้หรือคู่ค้าของคุณที่ต้องการเข้าถึงเซิร์ฟเวอร์เฉพาะในองค์กรของคุณก็ตาม
เพื่อวัตถุประสงค์เหล่านี้ บริษัทส่วนใหญ่ใช้เทคโนโลยี VPN ซึ่งได้รับการพิสูจน์ตัวเองแล้วว่าเป็นวิธีการป้องกันที่เชื่อถือได้ในการเข้าถึงทรัพยากรในท้องถิ่นขององค์กร
บริษัทของฉันก็ไม่มีข้อยกเว้น และเราก็เหมือนกับคนอื่นๆ อีกหลายคนที่ใช้เทคโนโลยีนี้ และเช่นเดียวกับคนอื่นๆ เราใช้ Cisco ASA 55xx เป็นเกตเวย์การเข้าถึงระยะไกล
เนื่องจากจำนวนผู้ใช้ระยะไกลเพิ่มขึ้น จึงจำเป็นต้องลดความซับซ้อนของขั้นตอนการออกข้อมูลรับรอง แต่ในขณะเดียวกันก็ต้องทำโดยไม่กระทบต่อความปลอดภัย
สำหรับตัวเราเอง เราพบวิธีแก้ปัญหาในการใช้การตรวจสอบสิทธิ์แบบสองปัจจัยสำหรับการเชื่อมต่อผ่าน Cisco SSL VPN โดยใช้รหัสผ่านแบบใช้ครั้งเดียว และเอกสารฉบับนี้จะบอกวิธีจัดระเบียบโซลูชันดังกล่าวโดยใช้เวลาน้อยที่สุดและไม่มีค่าใช้จ่ายสำหรับซอฟต์แวร์ที่จำเป็น (โดยที่คุณมี Cisco ASA ในโครงสร้างพื้นฐานของคุณอยู่แล้ว)
ตลาดเต็มไปด้วยโซลูชั่นแบบกล่องสำหรับการสร้างรหัสผ่านแบบใช้ครั้งเดียว ในขณะที่มีตัวเลือกมากมายในการรับรหัสผ่าน ไม่ว่าจะเป็นการส่งรหัสผ่านทาง SMS หรือใช้โทเค็น ทั้งฮาร์ดแวร์และซอฟต์แวร์ (เช่น บนโทรศัพท์มือถือ) แต่ความปรารถนาที่จะประหยัดเงินและความปรารถนาที่จะประหยัดเงินให้กับนายจ้างของฉันในช่วงวิกฤตปัจจุบัน ทำให้ฉันต้องหาทางใช้บริการฟรีเพื่อสร้างรหัสผ่านแบบใช้ครั้งเดียว ซึ่งแม้ว่าจะฟรี แต่ก็ไม่ได้ด้อยกว่าโซลูชันเชิงพาณิชย์มากนัก (ที่นี่เราควรจองโดยสังเกตว่าผลิตภัณฑ์นี้ยังมีเวอร์ชันเชิงพาณิชย์ด้วย แต่เราตกลงกันว่าต้นทุนของเราเป็นเงินจะเป็นศูนย์)
ดังนั้นเราต้องการ:
- อิมเมจ Linux พร้อมชุดเครื่องมือในตัว - multiOTP, FreeRADIUS และ nginx สำหรับการเข้าถึงเซิร์ฟเวอร์ผ่านทางเว็บ (http://download.multiotp.net/ - ฉันใช้อิมเมจสำเร็จรูปสำหรับ VMware)
— เซิร์ฟเวอร์ไดเรกทอรีที่ใช้งานอยู่
— Cisco ASA เอง (เพื่อความสะดวกฉันใช้ ASDM)
— โทเค็นซอฟต์แวร์ใด ๆ ที่รองรับกลไก TOTP (เช่นฉันใช้ Google Authenticator แต่ FreeOTP เดียวกันจะทำได้)
ฉันจะไม่ลงรายละเอียดว่าภาพจะเผยออกมาอย่างไร ด้วยเหตุนี้ คุณจะได้รับ Debian Linux ที่ติดตั้ง multiOTP และ FreeRADIUS ไว้แล้ว กำหนดค่าให้ทำงานร่วมกัน และเว็บอินเทอร์เฟซสำหรับการดูแลระบบ OTP
ขั้นตอนที่ 1 เราเริ่มต้นระบบและกำหนดค่าสำหรับเครือข่ายของคุณ
ตามค่าเริ่มต้น ระบบจะมาพร้อมกับข้อมูลรับรองรูท ฉันคิดว่าทุกคนเดาว่าเป็นความคิดที่ดีที่จะเปลี่ยนรหัสผ่านผู้ใช้รูทหลังจากการเข้าสู่ระบบครั้งแรก คุณต้องเปลี่ยนการตั้งค่าเครือข่ายด้วย (โดยค่าเริ่มต้นคือ '192.168.1.44' ด้วยเกตเวย์ '192.168.1.1') หลังจากนั้นคุณสามารถรีบูตระบบได้
มาสร้างผู้ใช้ใน Active Directory กัน OTPด้วยรหัสผ่าน MySuperPassword.
ขั้นตอนที่ 2 ตั้งค่าการเชื่อมต่อและนำเข้าผู้ใช้ Active Directory
ในการดำเนินการนี้ เราจำเป็นต้องเข้าถึงคอนโซลและเข้าถึงไฟล์โดยตรง multiotp.phpซึ่งเราจะกำหนดการตั้งค่าการเชื่อมต่อกับ Active Directory
ไปที่ไดเรกทอรี /usr/local/bin/multiotp/ และดำเนินการคำสั่งต่อไปนี้ตามลำดับ:
./multiotp.php -config default-request-prefix-pin=0
กำหนดว่าจำเป็นต้องใช้พินเพิ่มเติม (ถาวร) เมื่อป้อนพินครั้งเดียว (0 หรือ 1)
./multiotp.php -config default-request-ldap-pwd=0
กำหนดว่าต้องใช้รหัสผ่านโดเมนเมื่อป้อน PIN แบบครั้งเดียว (0 หรือ 1)
./multiotp.php -config ldap-server-type=1
ระบุประเภทของเซิร์ฟเวอร์ LDAP (0 = เซิร์ฟเวอร์ LDAP ปกติ ในกรณีของเรา 1 = Active Directory)
./multiotp.php -config ldap-cn-identifier="sAMAccountName"
ระบุรูปแบบที่จะแสดงชื่อผู้ใช้ (ค่านี้จะแสดงเฉพาะชื่อ โดยไม่มีโดเมน)
./multiotp.php -config ldap-group-cn-identifier="sAMAccountName"
สิ่งเดียวกันสำหรับกลุ่มเท่านั้น
./multiotp.php -config ldap-group-attribute="memberOf"
ระบุวิธีการพิจารณาว่าผู้ใช้อยู่ในกลุ่มหรือไม่
./multiotp.php -config ldap-ssl=1
ฉันควรใช้การเชื่อมต่อที่ปลอดภัยกับเซิร์ฟเวอร์ LDAP หรือไม่ (แน่นอน - ใช่!)
./multiotp.php -config ldap-port=636
พอร์ตสำหรับเชื่อมต่อกับเซิร์ฟเวอร์ LDAP
./multiotp.php -config ldap-domain-controllers=adSRV.domain.local
ที่อยู่เซิร์ฟเวอร์ Active Directory ของคุณ
./multiotp.php -config ldap-base-dn="CN=Users,DC=domain,DC=local"
เราระบุตำแหน่งที่จะเริ่มค้นหาผู้ใช้ในโดเมน
./multiotp.php -config ldap-bind-dn="[email protected]"
ระบุผู้ใช้ที่มีสิทธิ์ในการค้นหาใน Active Directory
./multiotp.php -config ldap-server-password="MySuperPassword"
ระบุรหัสผ่านผู้ใช้เพื่อเชื่อมต่อกับ Active Directory
./multiotp.php -config ldap-network-timeout=10
การตั้งค่าการหมดเวลาสำหรับการเชื่อมต่อกับ Active Directory
./multiotp.php -config ldap-time-limit=30
เรากำหนดเวลาสำหรับการดำเนินการนำเข้าผู้ใช้
./multiotp.php -config ldap-activated=1
การเปิดใช้งานการกำหนดค่าการเชื่อมต่อ Active Directory
./multiotp.php -debug -display-log -ldap-users-sync
เรานำเข้าผู้ใช้จาก Active Directory
ขั้นตอนที่ 3 สร้างรหัส QR สำหรับโทเค็น
ทุกสิ่งที่นี่เรียบง่ายมาก เปิดเว็บอินเตอร์เฟสของเซิร์ฟเวอร์ OTP ในเบราว์เซอร์ เข้าสู่ระบบ (อย่าลืมเปลี่ยนรหัสผ่านเริ่มต้นสำหรับผู้ดูแลระบบ!) และคลิกที่ปุ่ม "พิมพ์":
ผลลัพธ์ของการกระทำนี้จะเป็นหน้าเว็บที่มีรหัส QR สองรหัส เราเพิกเฉยต่ออันแรกอย่างกล้าหาญ (แม้จะมีคำจารึกที่น่าสนใจ Google Authenticator / Authenticator / 2 Steps Authenticator) และอีกครั้งที่เราสแกนโค้ดที่สองอย่างกล้าหาญลงในโทเค็นซอฟต์แวร์บนโทรศัพท์:
(ใช่ ฉันจงใจทำให้โค้ด QR เสียหายจนอ่านไม่ออก)
หลังจากเสร็จสิ้นการดำเนินการเหล่านี้ รหัสผ่านหกหลักจะถูกสร้างขึ้นในใบสมัครของคุณทุกๆ สามสิบวินาที
เพื่อให้แน่ใจ คุณสามารถตรวจสอบได้ในอินเทอร์เฟซเดียวกัน:
โดยป้อนชื่อผู้ใช้และรหัสผ่านแบบใช้ครั้งเดียวจากแอปพลิเคชันบนโทรศัพท์ของคุณ คุณได้รับการตอบรับเชิงบวกหรือไม่? ดังนั้นเราจึงเดินหน้าต่อไป
ขั้นตอนที่ 4 การกำหนดค่าเพิ่มเติมและการทดสอบการทำงานของ FreeRADIUS
ตามที่ฉันได้กล่าวไว้ข้างต้น multiOTP ได้รับการกำหนดค่าให้ทำงานกับ FreeRADIUS แล้ว สิ่งที่เหลืออยู่คือทำการทดสอบและเพิ่มข้อมูลเกี่ยวกับเกตเวย์ VPN ของเราไปยังไฟล์กำหนดค่า FreeRADIUS
เรากลับไปที่คอนโซลเซิร์ฟเวอร์ไปยังไดเร็กทอรี /usr/local/bin/multiotp/, เข้า:
./multiotp.php -config debug=1
./multiotp.php -config display-log=1
รวมถึงการบันทึกรายละเอียดเพิ่มเติม
ในไฟล์กำหนดค่าไคลเอนต์ FreeRADIUS (/etc/freeradius/clinets.conf) แสดงความคิดเห็นทุกบรรทัดที่เกี่ยวข้องกับ localhost และเพิ่มสองรายการ:
client localhost {
ipaddr = 127.0.0.1
secret = testing321
require_message_authenticator = no
}
- สำหรับการทดสอบ
client 192.168.1.254/32 {
shortname = CiscoASA
secret = ConnectToRADIUSSecret
}
— สำหรับเกตเวย์ VPN ของเรา
รีสตาร์ท FreeRADIUS และลองเข้าสู่ระบบ:
radtest username 100110 localhost 1812 testing321
ที่ไหน ชื่อผู้ใช้ = ชื่อผู้ใช้, 100110 = รหัสผ่านที่แอปพลิเคชันบนโทรศัพท์มอบให้เรา localhost = ที่อยู่เซิร์ฟเวอร์ RADIUS 1812 — พอร์ตเซิร์ฟเวอร์ RADIUS testing321 — รหัสผ่านไคลเอนต์เซิร์ฟเวอร์ RADIUS (ซึ่งเราระบุไว้ในการกำหนดค่า)
ผลลัพธ์ของคำสั่งนี้จะถูกส่งออกโดยประมาณดังนี้:
Sending Access-Request of id 44 to 127.0.0.1 port 1812
User-Name = "username"
User-Password = "100110"
NAS-IP-Address = 127.0.1.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=44, length=20
ตอนนี้เราต้องตรวจสอบให้แน่ใจว่าผู้ใช้ได้รับการรับรองความถูกต้องเรียบร้อยแล้ว ในการดำเนินการนี้ เราจะดูที่บันทึกของ multiotp เอง:
tail /var/log/multiotp/multiotp.log
และหากรายการสุดท้ายมี:
2016-09-01 08:58:17 notice username User OK: User username successfully logged in from 127.0.0.1
2016-09-01 08:58:17 debug Debug Debug: 0 OK: Token accepted from 127.0.0.1
จากนั้นทุกอย่างก็เป็นไปด้วยดีและเราก็สามารถทำมันให้สำเร็จได้
ขั้นตอนที่ 5: กำหนดค่า Cisco ASA
ยอมรับว่าเรามีกลุ่มและนโยบายที่กำหนดค่าไว้สำหรับการเข้าถึงผ่าน SLL VPN ซึ่งกำหนดค่าร่วมกับ Active Directory และเราจำเป็นต้องเพิ่มการตรวจสอบสิทธิ์แบบสองปัจจัยสำหรับโปรไฟล์นี้
1. เพิ่มกลุ่มเซิร์ฟเวอร์ AAA ใหม่:
2. เพิ่มเซิร์ฟเวอร์ multiOTP ของเราในกลุ่ม:
3. เราแก้ไข โปรไฟล์การเชื่อมต่อโดยตั้งค่ากลุ่มเซิร์ฟเวอร์ Active Directory เป็นเซิร์ฟเวอร์การตรวจสอบความถูกต้องหลัก:
4. ในแท็บ ขั้นสูง -> การรับรองความถูกต้อง เรายังเลือกกลุ่มเซิร์ฟเวอร์ Active Directory:
5. ในแท็บ ขั้นสูง -> รอง การรับรองความถูกต้อง ให้เลือกกลุ่มเซิร์ฟเวอร์ที่สร้างขึ้นซึ่งมีการลงทะเบียนเซิร์ฟเวอร์ multiOTP โปรดทราบว่าชื่อผู้ใช้ของเซสชันนั้นสืบทอดมาจากกลุ่มเซิร์ฟเวอร์ AAA หลัก:
ใช้การตั้งค่าและ
ขั้นตอนที่ 6 หรือที่รู้จักในชื่อขั้นตอนสุดท้าย
ตรวจสอบว่าการตรวจสอบสิทธิ์แบบสองปัจจัยใช้ได้กับ SLL VPN หรือไม่:
เอาล่ะ! เมื่อเชื่อมต่อผ่าน Cisco AnyConnect VPN Client คุณจะถูกถามถึงรหัสผ่านที่สองแบบครั้งเดียวด้วย
ฉันหวังว่าบทความนี้จะช่วยใครบางคนได้ และมันจะให้อาหารแก่ใครบางคนสำหรับความคิดเกี่ยวกับวิธีการใช้สิ่งนี้ ฟรี เซิร์ฟเวอร์ OTP สำหรับงานอื่นๆ แบ่งปันในความคิดเห็นหากคุณต้องการ
ที่มา: will.com