ใครสามารถ dial in ได้? การตรวจสอบ msNPAllowDialin ก่อนเข้าถึง VPN
msNPAllowDialin มีสามสถานะ และ NULL มอบการตัดสินใจให้ NPS ส่งออกแฟล็ก แยกออกจากการเข้าถึงแบบกลุ่ม แล้วบันทึกว่าใครตรวจสอบอะไร
รหัสผ่านถูกต้อง บัญชีอยู่ในกลุ่ม VPN แต่การเชื่อมต่อยังถูกปฏิเสธด้วยข้อความที่ไม่กล่าวถึงนโยบายใดเลย เมื่อเกิดเหตุบนเซิร์ฟเวอร์การเข้าถึงระยะไกลของ Windows สิ่งแรกที่ผมดูไม่ใช่กฎ NPS แต่เป็นแอตทริบิวต์หนึ่งของ Active Directory ที่ไม่มีใครเปิด: msNPAllowDialin ซึ่งก็คือค่าที่อยู่เบื้องหลังแท็บ Dial-in แอตทริบิวต์นี้มีสามสถานะ และสถานะที่สามมอบการตัดสินใจให้ที่อื่นอย่างเงียบ ๆ ส่วนใหญ่แล้วไม่มีใครตั้งใจเปลี่ยนมัน บัญชีถูกโคลนจากเทมเพลต หรือถูกสร้างโดยสคริปต์ที่เขียนคำปฏิเสธชัดเจนไว้เมื่อหลายปีก่อนและไม่เคยถูกตรวจทานอีก
การปฏิเสธสามารถเกิดขึ้นได้ก่อนที่จะอ่านนโยบาย
Windows ตรวจสอบสิทธิ์การ dial in ของบัญชีขณะสร้างการตัดสินใจอนุญาต ดังนั้นคำปฏิเสธชัดเจนจึงจบการสนทนาแต่เนิ่น ๆ สิ่งที่เห็นบนไคลเอนต์คือความล้มเหลวในการรับรองความถูกต้องทั่วไป บางครั้งเกิดขึ้นหลังการแลกเปลี่ยนใบรับรองเสร็จสิ้น และนั่นคือเหตุผลที่ผู้คนใช้เวลาช่วงบ่ายตรวจสอบข้อมูลรับรองที่ไม่เคยเป็นปัญหาเลย
กรณีตรงกันข้ามก็สับสนไม่แพ้กัน บัญชีที่ไม่เคยตั้งค่าแฟล็กสามารถเชื่อมต่อได้สำเร็จเพราะนโยบายอนุญาต จากนั้นบัญชีเดิมกลับเชื่อมต่อไม่ได้เมื่อมีคนแก้ไขกฎ NPS ด้วยเหตุผลที่ไม่เกี่ยวข้อง ทั้งสองเหตุการณ์ไม่ดูเหมือนการเปลี่ยนสิทธิ์การ dial in จากภายนอกเลย
สามสถานะ และสถานะที่สามมองไม่เห็น
TRUE อนุญาตให้ dial in FALSE ปฏิเสธ NULL หมายความว่าบัญชีสืบทอดคำตอบจากนโยบายการเข้าถึงระยะไกลหรือการอนุญาตของ NPS GUI แสดงสถานะที่สามนั้นเป็น "Control access through NPS Network Policy" และอ่านแล้วเหมือนช่องทำเครื่องหมายที่ยังไม่ถูกเลือกมากกว่าการตัดสินใจ
นั่นคือเหตุผลที่การนับผู้ใช้ที่ได้รับอนุญาตจากคอนโซลแทบไม่บอกอะไรเลย บัญชีที่สืบทอดมาอาจได้รับอนุญาตวันนี้และถูกปฏิเสธพรุ่งนี้โดยไม่ต้องแตะต้องบัญชี และ FALSE บัญชียังเชื่อมต่อได้บนเซิร์ฟเวอร์ที่นโยบายตั้งไว้ให้เพิกเฉยต่อคุณสมบัติการ dial in ของผู้ใช้ อ่านแอตทริบิวต์และนโยบายไปพร้อมกัน มิฉะนั้นคุณกำลังตรวจสอบเพียงครึ่งเดียวของการตัดสินใจ
ส่งออกแฟล็กโดยไม่ทิ้งบัญชีที่สืบทอดมา
เรียกใช้การส่งออกจากตัวควบคุมโดเมน หรือจากสถานีงานที่มีโมดูล Active Directory และเก็บไฟล์ดิบไว้เป็นหลักฐานแทนการพิมพ์สรุปใหม่:
Get-ADUser -Filter * -Properties msNPAllowDialin, LastLogonDate |
Select-Object SamAccountName, Enabled, msNPAllowDialin, LastLogonDate |
Sort-Object SamAccountName |
Export-Csv -NoTypeInformation .\dialin.csv
ตัวกรอง LDAP ตัวเดียววางลงในบันทึกการเปลี่ยนแปลงได้ง่ายกว่า ตัวนี้คืนค่าเฉพาะการอนุญาตที่ชัดเจน:
dsquery * -Filter "(&(objectCategory=person)(objectClass=user)(msNPAllowDialin=TRUE))" -Attr sAMAccountName
จากนั้นสอบถามอีกครั้งโดยไม่มีเงื่อนไขการ dial in และมองหาบัญชีที่ไม่มีค่า เหล่านั้นคือบัญชีที่สืบทอดมา ซึ่งมักเป็นกลุ่มที่ใหญ่ที่สุดในโดเมน และการข้ามบัญชีเหล่านั้นจะเปลี่ยนการตรวจสอบให้กลายเป็นรายชื่อคนไม่กี่คนที่ใครบางคนจำได้ว่าต้องตั้งค่าด้วยมือ
แยกแฟล็กออกจากการเข้าถึงแบบกลุ่มและสุขภาพของบัญชี
แอตทริบิวต์ตอบคำถามเดียว: บัญชีนี้ dial in ได้หรือไม่ มันไม่บอกว่าบุคคลนั้นยังทำงานที่นี่หรือไม่ บัญชีถูกเปิดใช้งานหรือไม่ หรือมีรหัสผ่านที่ใช้ร่วมกันอยู่ในบันทึกของฝ่ายช่วยเหลือหรือไม่ จับคู่การส่งออกกับสถานะการเปิดใช้งาน วันที่ลงชื่อเข้าใช้ครั้งล่าสุด และสมาชิกภาพกลุ่มที่ให้สิทธิ์เข้าถึงเซิร์ฟเวอร์
สิ่งที่ต้องลงมือทำคือชุดค่าผสม บัญชีที่ปิดใช้งานพร้อม TRUE เป็นเพียงเสียงรบกวน บัญชีที่เปิดใช้งานพร้อม TRUE ที่ไม่ได้ลงชื่อเข้าใช้มาหนึ่งปีเป็นผู้สมัครให้ถอดออก แต่บัญชีที่สืบทอดมาในกลุ่ม VPN ที่ไม่มีใครอธิบายได้คือสิ่งที่ค้นพบจริง ๆ เพราะไม่มีการตั้งค่าใดบันทึกว่าเหตุใดจึงให้สิทธิ์
อ่านจากตัวควบคุมโดเมนที่เซิร์ฟเวอร์ VPN ตรวจสอบสิทธิ์จริง ความล่าช้าในการทำซ้ำอาจแสดงค่าที่เซิร์ฟเวอร์แทนที่แล้ว และการตรวจสอบที่อ้างค่าจาก DC ที่ล้าสมัยจะถูกโต้แย้งในนาทีที่มีคนตรวจซ้ำ
เปลี่ยนบัญชีหนึ่งบัญชีและพิสูจน์ว่าการเปลี่ยนแปลงไปถึง
หากต้องการถอนสิทธิ์ ให้ตั้งค่าแอตทริบิวต์เป็น FALSE แทนการล้างค่า การล้างค่าจะคืนบัญชีสู่การสืบทอดนโยบาย ซึ่งอาจอนุญาตอีกครั้งในการเชื่อมต่อครั้งถัดไป และการเปลี่ยนแปลงดูเหมือนการแก้ไขทั้งที่เป็นการตัดสินใจอีกแบบหนึ่ง:
dsmod user "CN=Jane Doe,OU=Staff,DC=corp,DC=example" -allowDialin no
Set-ADUser -Identity jdoe -Clear msNPAllowDialin
บรรทัดที่สองคือการรีเซ็ตการสืบทอด ซึ่งแยกไว้นอกบรรทัดโดยตั้งใจเพื่อไม่ให้ใครสับสนระหว่างสองการดำเนินการ จากนั้นยืนยันจากเซสชันที่สอง อ่านแอตทริบิวต์อีกครั้ง และตรวจสอบเหตุการณ์การบัญชีของ NPS สำหรับการปฏิเสธ แทนที่จะเชื่อการรีเฟรชของคอนโซล
สุดท้าย จดบันทึกว่ากลไกใดเป็นเจ้าของการตัดสินใจสำหรับบริการการเข้าถึงระยะไกลแต่ละรายการ หากนโยบายเพิกเฉยต่อคุณสมบัติการ dial in ของผู้ใช้ เงื่อนไขกลุ่มคือผู้มีอำนาจ และแอตทริบิวต์เป็นเพียงคำแนะนำสำหรับบริการนั้นเท่านั้น บริการสองรายการในโดเมนเดียวกันสามารถตอบต่างกันได้อย่างชอบธรรม และบันทึกการทบทวนควรระบุเช่นนั้นหนึ่งบรรทัดต่อบริการ
ผลลัพธ์ที่ทนต่อการตรวจสอบนั้นสั้น: ใครเชื่อมต่อได้ ด้วยกลไกใด ตรวจทานเมื่อใด โดยใคร แฟล็กการ dial in ให้คำตอบสองข้อแรก ส่วนที่เหลือมีเพียงการทบทวนนโยบายเท่านั้นที่ให้ได้