คุณใช้เครื่องมือหรือเทคนิคใดเพื่อป้องกันการโจมตีด้วยกำลังดุร้ายกับพอร์ต ssh ของคุณ ฉันสังเกตเห็นในบันทึกความปลอดภัยของฉันว่าฉันมีหลายล้านครั้งที่พยายามเข้าสู่ระบบในฐานะผู้ใช้ที่หลากหลายผ่าน ssh
นี่คือกล่อง FreeBSD แต่ฉันคิดว่ามันจะใช้ได้ทุกที่
คุณใช้เครื่องมือหรือเทคนิคใดเพื่อป้องกันการโจมตีด้วยกำลังดุร้ายกับพอร์ต ssh ของคุณ ฉันสังเกตเห็นในบันทึกความปลอดภัยของฉันว่าฉันมีหลายล้านครั้งที่พยายามเข้าสู่ระบบในฐานะผู้ใช้ที่หลากหลายผ่าน ssh
นี่คือกล่อง FreeBSD แต่ฉันคิดว่ามันจะใช้ได้ทุกที่
คำตอบ:
นี่คือโพสต์ที่ดีเกี่ยวกับเรื่องนั้นโดย Rainer Wichmann
มันอธิบายข้อดีข้อเสียของวิธีการเหล่านี้:
ฉันใช้fail2banซึ่งจะล็อค IP ออกหลังจากพยายามหลายครั้งไม่สำเร็จตามระยะเวลาที่กำหนด
รวมสิ่งนี้กับการทดสอบความแข็งแรงของรหัสผ่าน (โดยใช้john (John the Ripper)) เพื่อให้มั่นใจว่าการโจมตีด้วยเดรัจฉานจะไม่สำเร็จ
TARPIT
เป้าหมายหากคุณรู้สึกไม่พอใจ (จาก xtables-addons)
สิ่งเล็ก ๆ ที่คุณสามารถทำได้คือใช้บางอย่างเช่น DenyHosts:
http://denyhosts.sourceforge.net/
มันใช้ในตัว hosts.allow / hosts.deny เพื่อป้องกันผู้ทำผิด SSH
หนึ่งในวิธีที่ง่ายที่สุดในการหลีกเลี่ยงการโจมตีเหล่านี้คือการเปลี่ยนพอร์ตที่ sshd ฟัง
ตามที่ Chris ชี้ให้เห็นให้ใช้คีย์เข้ารหัสแทนรหัสผ่าน
เพิ่มไปที่:
คุณต้องการผู้คนหรือสถานที่ (ที่มี IP สาธารณะลอยตัว) เข้าถึงการเชื่อมต่อ ssh สาธารณะของคุณจริงๆ?
ขึ้นอยู่กับจำนวนโฮสต์สาธารณะ ssh ที่คุณกำลังบำรุงรักษาและไม่ว่าคุณจะสามารถ จำกัด เกณฑ์การเชื่อมต่อทั่วไปของคุณได้หรือไม่นั้นอาจเป็นการกำหนดค่าที่ง่ายกว่าและดูแลรักษาได้เพื่อ จำกัด การเข้าถึงโฮสต์ภายนอกไม่กี่แห่ง
หากวิธีนี้ใช้ได้ผลกับคุณก็สามารถทำให้ค่าใช้จ่ายในการดูแลระบบของคุณง่ายขึ้น
นอกเหนือจากคำแนะนำที่ดีอื่น ๆ สิ่งหนึ่งที่ทำได้ง่าย ๆ คือการเชื่อมต่อขาเข้าที่ จำกัด อัตรา จำกัด การเชื่อมต่อ 3 ครั้งต่อนาทีต่อ IP:
iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
ใช้ตัวเลือก "AllowUsers" ใน sshd_config เพื่อให้แน่ใจว่ามีเพียงผู้ใช้ชุดเล็กเท่านั้นที่สามารถเข้าสู่ระบบได้เลย คนอื่น ๆ ทั้งหมดจะถูกปฏิเสธแม้ว่าชื่อผู้ใช้และรหัสผ่านจะถูกต้อง
คุณสามารถ จำกัด ผู้ใช้ให้เข้าสู่ระบบจากโฮสต์เฉพาะ
เช่น,
AllowUsers user1 user2@host.example.com
วิธีนี้จะลดช่องว่างการค้นหาและหลีกเลี่ยงผู้ใช้เก่าที่ถูกทิ้งไว้โดยไม่ตั้งใจหรือเปิดใช้งาน (แม้ว่าแน่นอนว่าสิ่งเหล่านี้ควรจะปิดใช้งานอยู่ดีนี่เป็นวิธีที่ง่ายในการหยุดพวกเขา
สิ่งนี้ไม่ได้หยุดการโจมตีที่ดุร้ายอย่างสิ้นเชิง แต่จะช่วยลดความเสี่ยง
ใช้อะไรแบบนั้นกับ PF:
ตาราง <ssh-brute>
บล็อกคงอยู่ในบันทึกอย่างรวดเร็วจากฉลาก ssh_brute
ส่งผ่านใน $ ext_if proto tcp ถึง ($ ext_if) พอร์ต ssh ปรับสถานะ \
(max-src-conn-rate 3/10, โอเวอร์โหลด flush ทั่วโลก)
การเคาะพอร์ตเป็นวิธีที่ค่อนข้างแข็งแกร่งในการป้องกันสิ่งนี้ เที่ยวยุ่งยิ่งเล็กน้อยบางครั้งน่ารำคาญ แต่มันทำให้ปัญหาหายไปอย่างแน่นอน
บริบทเป็นสิ่งสำคัญ แต่ฉันขอแนะนำบางอย่างเช่น:
นอกจาก ข้อเสนอแนะที่ จำกัด อัตราของ sherbangแล้วความยาวของการล่าช้าก็สำคัญ ด้วยการเพิ่มการหน่วงเวลาระหว่างกลุ่มของการพยายามเข้าสู่ระบบ 3 ครั้งจาก 2 นาทีถึง 20 นาทีจำนวนที่อยู่ IP ที่แตกต่างกันซึ่งทำให้พยายามลงชื่อเข้าใช้มากกว่าสามครั้งลดลงเปรียบเทียบช่วงเวลาสองสัปดาห์ที่ยาวนานกับเครื่องหนึ่งของฉันจาก 44 ครั้งถึง 3 . ไม่มีที่อยู่เหล่านี้สามรายการที่พยายามนานเกินกว่า 11 ชั่วโมง
เกร็ดเล็กเกร็ดน้อยมาก แต่ auth.log กลายเป็นที่อ่านได้ง่ายขึ้นมากสำหรับฉัน ...
ฉันแค่ไม่สนใจมัน ปล่อยให้พวกเขาคาดเข็มขัดที่ท่าเรือพวกเขาจะไม่ไปบังคับกุญแจ
ติดตั้ง OSSEC ไม่เพียงแค่ตรวจสอบการลงชื่อเข้าใช้ซ้ำ ๆ เท่านั้น แต่จะเข้าสู่บล็อกชั่วคราวที่มี iptables สำหรับ ip ที่ละเมิด และในตอนท้ายมันจะส่งรายงานระบุรายละเอียดให้คุณ มันบันทึกทุกอย่างซึ่งดี มีคนลองชื่อล็อกอินมากกว่า 8000 ชื่อเพื่อลงชื่อเข้าใช้ด้วย ฉันแยกวิเคราะห์บันทึกและได้รายชื่อผู้ใช้ที่ดีออกไปจากข้อตกลง;)