คำตอบสั้น ๆ: ตั้งค่า Account Lockout Policy บน Windows Server ให้ล็อกบัญชีชั่วคราวเมื่อใส่รหัสผ่านผิดติดกัน เพื่อป้องกันการเดารหัสผ่าน RDP โดยไม่ล็อกตัวเองออกจากเครื่อง
คู่มือนี้อธิบาย Account Lockout Policy ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
Windows Server ที่เปิด Remote Desktop (RDP) สู่อินเทอร์เน็ตจะถูกโปรแกรมอัตโนมัติสแกนและลองเดารหัสผ่านตลอดเวลา โดยเฉพาะชื่อผู้ใช้ยอดนิยมอย่าง Administrator, admin หรือ user Account Lockout Policy เป็นนโยบายในตัวของ Windows ที่ล็อกบัญชีชั่วคราวเมื่อใส่รหัสผ่านผิดติดกันเกินจำนวนที่กำหนด ทำให้การเดารหัสผ่านทีละหลายพันครั้งทำไม่ได้
บทความนี้อธิบายการตั้งค่าทั้งผ่านหน้าจอ Local Security Policy และผ่าน Command Line การเลือกค่าที่เหมาะสม และข้อควรระวังที่อาจทำให้ผู้ดูแลเองถูกล็อกออกจากเซิร์ฟเวอร์
สิ่งที่ต้องเตรียม (Account Lockout Policy)
- Windows Server 2019 หรือ 2022 ที่อัปเดตล่าสุดแล้ว ตาม อัปเดต Windows Server ผ่าน Windows Update และ sconfig
- บัญชีในกลุ่ม Administrators
- บัญชีผู้ดูแลสำรองอย่างน้อยหนึ่งบัญชีที่ใช้งานได้จริง ดู สร้างผู้ใช้ใหม่สำหรับ Remote Desktop บน Windows Server
- ช่องทางเข้าเครื่องที่ไม่ผ่าน RDP สำหรับกรณีฉุกเฉิน เช่น การ Remote เข้า Console Server ผ่าน Web UI
หมายเหตุ: การล็อกบัญชีมีผลกับการเข้าสู่ระบบทุกช่องทาง รวมถึง Console ด้วย ถ้าบัญชีที่คุณใช้ถูกล็อก จะต้องรอจนครบเวลาที่ตั้งไว้ หรือเข้าด้วยบัญชีผู้ดูแลอื่น ให้เปิด Session RDP ปัจจุบันค้างไว้ระหว่างตั้งค่า และทดสอบด้วยบัญชีทดสอบจากหน้าต่างที่สองก่อนปิด Session เดิม
ทำความเข้าใจค่าทั้งสาม (Account Lockout Policy)
| ค่า | ความหมาย | ค่าที่แนะนำ |
|---|---|---|
| Account lockout threshold | จำนวนครั้งที่ใส่รหัสผ่านผิดติดกันก่อนบัญชีถูกล็อก ค่า 0 คือไม่ล็อกเลย | 5-10 ครั้ง |
| Account lockout duration | ระยะเวลาที่บัญชีถูกล็อกเป็นนาที ค่า 0 คือล็อกจนกว่าผู้ดูแลจะปลดเอง | 15-30 นาที |
| Reset account lockout counter after | ถ้าไม่ได้ใส่ผิดเพิ่มภายในเวลานี้ ตัวนับครั้งที่ผิดจะกลับเป็น 0 | เท่ากับหรือน้อยกว่า Lockout duration |
ตัวอย่างการคำนวณ ถ้าตั้ง 10 ครั้ง ล็อก 15 นาที ผู้โจมตีจะเดาได้ไม่เกินประมาณ 40 ครั้งต่อชั่วโมงต่อบัญชี แทนที่จะเป็นหลายพันครั้ง ไม่ควรตั้ง Duration เป็น 0 บนเซิร์ฟเวอร์ที่เปิด RDP สู่อินเทอร์เน็ต เพราะผู้ไม่หวังดีสามารถจงใจใส่รหัสผิดเพื่อล็อกบัญชีของคุณไว้ถาวรได้ และการตั้ง Threshold ต่ำเกินไป เช่น 3 ครั้ง ก็ทำให้ผู้ใช้จริงถูกล็อกบ่อยจากการพิมพ์ผิดธรรมดา
ขั้นตอนที่ 1: ตรวจค่าปัจจุบัน
เปิด Command Prompt หรือ PowerShell แบบ Run as administrator แล้วรัน
net accounts
ดูสามบรรทัดนี้ในผลลัพธ์ (ตัวอย่างด้านล่างเป็นเครื่องที่ยังไม่ได้เปิดการล็อก ตัวเลขอาจต่างกันตามรุ่น)
Lockout threshold: Never
Lockout duration (minutes): 30
Lockout observation window (minutes): 30
Never หมายถึงยังไม่ได้เปิดการล็อก ส่วน Lockout observation window คือค่า Reset account lockout counter after
ขั้นตอนที่ 2: ตั้งค่าผ่าน Local Security Policy
- กด Win+R พิมพ์
secpol.mscแล้วกด Enter - ไปที่ Security Settings จากนั้น Account Policies และ Account Lockout Policy
- ดับเบิลคลิก Account lockout threshold ใส่
10แล้วกด OK - Windows จะแสดงหน้าต่าง Suggested Value Changes เสนอค่าอีกสองค่าให้อัตโนมัติ กด OK เพื่อรับไว้ก่อน
- ดับเบิลคลิก Account lockout duration ตั้งเป็น
15นาที - ดับเบิลคลิก Reset account lockout counter after ตั้งเป็น
15นาที
ค่า Duration และ Reset counter จะแก้ไขได้หลังจากตั้ง Threshold เป็นค่าที่ไม่ใช่ 0 แล้วเท่านั้น และ Windows ไม่ยอมให้ Reset counter มากกว่า Duration
Allow Administrator account lockout
ในอดีตบัญชี Administrator ที่มากับระบบ (Built-in) จะไม่ถูกล็อกเลย ซึ่งเป็นช่องโหว่ใหญ่เพราะเป็นชื่อที่ถูกเดามากที่สุด ตั้งแต่อัปเดตความปลอดภัยเดือนตุลาคม 2022 เป็นต้นมา Microsoft เพิ่มนโยบาย Allow Administrator account lockout ในหน้าเดียวกันนี้ ถ้าเซิร์ฟเวอร์ของคุณเห็นนโยบายนี้ ให้ตรวจว่าเป็น Enabled ค่าเริ่มต้นของนโยบายนี้ต่างกันตามรุ่นและวิธีติดตั้ง จึงควรตรวจเองทุกเครื่อง ถ้าไม่เห็นนโยบายนี้ แปลว่าเครื่องยังไม่ได้รับอัปเดต ให้อัปเดต Windows ก่อน
ทางที่ดีกว่านั้นคือไม่ใช้บัญชี Administrator เข้า RDP เลย ให้สร้างบัญชีผู้ดูแลชื่ออื่นใช้งาน แล้วปิดหรือเปลี่ยนชื่อบัญชี Built-in ที่ Local Policies, Security Options นโยบาย Accounts: Rename administrator account
ขั้นตอนที่ 3: หรือตั้งค่าด้วย Command Line
ได้ผลเช่นเดียวกับขั้นตอนที่ 2 เหมาะกับการตั้งหลายเครื่องหรือเขียนเป็นสคริปต์ ต้องตั้ง Threshold ก่อน แล้วค่อยตั้งอีกสองค่า
net accounts /lockoutthreshold:10
net accounts /lockoutduration:15 /lockoutwindow:15
ถ้าสำเร็จจะแสดง The command completed successfully. คำสั่งนี้ไม่มีตัวเลือกสำหรับ Allow Administrator account lockout ให้ตั้งค่านั้นผ่าน secpol.msc