การล็อกบัญชีกับการห้ามที่อยู่: OpenVPN นับจริงที่ไหน
การห้ามต้นทางและการล็อกบัญชีนับสิ่งที่ต่างกัน ค้นหาที่เก็บที่มีตัวนับความล้มเหลวก่อนเลือกเกณฑ์สำหรับ VPN ที่ใช้ PAM
การบล็อกที่อยู่และการล็อกบัญชีเป็นสองกลไกที่ต่างกัน และล้มเหลวในทิศทางตรงกันข้าม การห้ามที่อยู่หยุดต้นทางเดียวและบัญชีเป้าหมายยังเข้าถึงได้จากที่อื่น การล็อกบัญชีหยุดตัวตนนั้นทุกที่ รวมถึงบนแล็ปท็อปของผู้ใช้เอง
สำหรับ VPN ที่มอบหมายการพิสูจน์ตัวตนให้ PAM ตัวนับคือสิ่งที่สแตก PAM เข้าถึง ไม่ใช่สิ่งที่ผู้ฟังบันทึก
ตัวนับสองตัว เหยื่อสองแบบ
ตัวจำกัดอัตราดูต้นทางและถามว่ามีความพยายามกี่ครั้งที่มาจากที่นั่นเมื่อเร็ว ๆ นี้ การล็อกดูตัวตนและถามว่าบัญชีสะสมความล้มเหลวกี่ครั้ง อย่างแรกปกป้องความพร้อมใช้งาน อย่างที่สองปกป้องข้อมูลรับรอง ไม่มีอันใดแทนที่กัน
ดังนั้นประโยคที่ว่าเราบล็อก IP หลังจากล้มเหลวห้าครั้งจึงไม่ใช่คำตอบต่อรายงานการเติมข้อมูลรับรอง ผู้โจมตีสลับต้นทาง แต่ละแห่งได้ความพยายามน้อย และบัญชีไม่เคยถูกนับ ตรงกันข้าม การล็อกที่ไม่มีการควบคุมต้นทางทำให้ผู้โจมตีล็อกบัญชีไว้ได้ไม่จำกัดด้วยการล้มเหลวโดยเจตนา
การควบคุมทั้งสองมีเรื่องการกู้คืนที่ต่างกัน การห้ามที่อยู่หมดอายุตามตัวจับเวลาที่ไม่มีใครต้องคิด การล็อกบัญชีอาจต้องใช้ผู้ดูแล ระยะรอที่บันทึกไว้ หรือการรีเซ็ตด้วยตนเอง
ค้นหาที่เก็บที่มีจำนวนอยู่แล้ว
ก่อนเพิ่มสิ่งใด ให้ค้นหาว่ามีที่เก็บความล้มเหลวอยู่แล้วหรือไม่ บัญชี Linux ในเครื่อง บริการไดเรกทอรี และผู้ให้บริการตัวตนภายนอกต่างเก็บจำนวนของตน และโมดูล PAM ที่วางไว้ข้างหน้าจะสร้างอันที่สองแทนที่จะขยายอันแรก
grep -rnE 'faillock|pam_tally|pam_unix' /etc/pam.d/
ls -l /etc/pam.d/ | head -20
อ่านไฟล์บริการที่ VPN ระบุจริงและตามบรรทัดการรวมของมัน ในหลายดิสทริบิวชัน บริการ VPN รวมไฟล์ร่วม ซึ่งหมายความว่าจำนวนที่คุณปรับใช้กับ SSH และการเข้าสู่ระบบในเครื่องด้วย
หากไดเรกทอรีบังคับใช้การล็อกอยู่แล้ว คำถามที่มีประโยชน์คือการสนทนา PAM ไปถึงการตัดสินใจนั้นอย่างไร และ VPN รายงานอย่างไร จำนวนในเครื่องที่เพิ่มข้างบนไม่กลายเป็นตัวนับของไดเรกทอรี และนโยบายทั้งสองอาจไม่ตรงกันว่าบัญชีจะเปิดเมื่อใด
pam_faillock มีตำแหน่งเรียกสามตำแหน่ง ไม่ใช่หนึ่ง
โมดูลแยกการดำเนินการสามอย่างที่บรรทัดที่คัดลอกมักทำให้คลุมเครือ การตรวจว่าบัญชีถูกล็อกแล้วหรือไม่ การบันทึกความล้มเหลว และการล้างประวัติหลังสำเร็จ
นี่คือที่ที่การย้ายจากโมดูลนับรุ่นเก่ามักผิดพลาด การคัดลอกบรรทัดจากตัวอย่าง pam_tally2 ที่ใช้งานได้ไปยังสแตก pam_faillock ไม่ใช่การเปลี่ยนชื่อ การตั้งค่าที่บันทึกไว้แตกต่าง และการเรียกที่วางผิดที่อาจบันทึกความล้มเหลวโดยไม่เคยตรวจสอบ
faillock --user alice
faillock --user alice --reset
เครื่องมือตรวจสอบเป็นวิธีที่เร็วที่สุดในการดูว่าตัวนับเป็นของจริงหรือไม่ มันแสดงความล้มเหลวที่บันทึกไว้สำหรับบัญชีและลบได้ หากความล้มเหลวที่ควบคุมไม่เปลี่ยนผลลัพธ์นั้น ตำแหน่งการเรียกก็ผิด
ชื่อบริการเฉพาะไม่ใช่การแยก
การให้ VPN มีไฟล์บริการ PAM ของตัวเองทำให้เห็นนโยบายที่ตั้งใจ แต่ไม่ได้จำกัดผลกระทบ การรวมไฟล์ร่วมใด ๆ นำสิ่งที่ไฟล์นั้นทำมารวมด้วย รวมถึงจำนวนสำหรับทั้งระบบ
ตัดสินใจให้ชัดว่าการล็อกครอบคลุมเฉพาะการเข้าถึง VPN หรือทุกบริการที่พิสูจน์ตัวตนบัญชีเดียวกัน คำตอบทั้งสองป้องกันได้ ความล้มเหลวคือการเชื่อว่าคุณเลือกอย่างหนึ่งในขณะที่สแตกใช้อีกอย่าง
จากนั้นพิจารณาต้นทุน ผู้โจมตีสามารถกระตุ้นการล็อก และผู้ใช้ที่เดือดร้อนคือเจ้าของบัญชี เกณฑ์ ระยะรอ และเส้นทางการกู้คืนของผู้ดูแลเป็นส่วนหนึ่งของนโยบาย และการกู้คืนต้องไม่ขึ้นกับการกำหนดค่า VPN ใหม่ระหว่างเหตุการณ์
ยอมรับลำดับ ไม่ใช่การปฏิเสธครั้งเดียว
ทดสอบด้วยตัวตนที่กำหนดภายใต้แผนที่อนุมัติ และทดสอบเป็นลูกโซ่ไม่ใช่เหตุการณ์เดียว บัญชีที่ถูกต้องพิสูจน์ตัวตนได้ รหัสผ่านที่ผิดโดยเจตนาเลื่อนตัวนับ การล็อกที่กำหนดมีผล และการกู้คืนที่บันทึกไว้คืนการเข้าถึง
faillock --user test-vpn-01
journalctl -u openvpn-server@lab -n 30 --no-pager | grep -i 'auth\|pam'
ดูพฤติกรรมเมื่อสำเร็จอย่างระมัดระวังเท่ากับเมื่อล้มเหลว หากการเข้าสู่ระบบที่สำเร็จไม่ล้างประวัติ บัญชีจะถูกล็อกหลังความผิดพลาดธรรมดาสะสมช้า ๆ หากล้างทุกอย่างจากทุกบริการ ตัวนับอ่อนแอกว่าที่นโยบายกล่าวอ้าง
สุดท้าย หยุดไคลเอนต์ที่ไม่มีการเฝ้าดู ก่อนประกาศชัยชนะ ข้อมูลรับรองที่บันทึกไว้ซึ่งลองใหม่เบื้องหลังจะสร้างความล้มเหลวอีกครั้งในไม่กี่นาทีหลังการกู้คืนและล็อกบัญชีอีก การจำกัดอัตราตามต้นทางอาจคงอยู่เป็นการควบคุมเพิ่มเติม แต่ไม่ใช่นโยบายบัญชี