การ จำกัด อัตราความพยายามในการเข้าสู่ระบบเป็นวิธีที่ง่ายในการป้องกันการโจมตีด้วยรหัสผ่านความเร็วสูง อย่างไรก็ตามมันยากที่จะ จำกัด การโจมตีแบบกระจายและวิ่งจำนวนมากในระดับต่ำในสัปดาห์หรือเป็นเดือน ฉันชอบหลีกเลี่ยงการใช้เครื่องมือตอบกลับอัตโนมัติเช่น fail2ban และนี่คือเหตุผลสองประการ:
- ผู้ใช้ที่ถูกกฎหมายบางครั้งลืมรหัสผ่าน ฉันไม่ต้องการแบนผู้ใช้ที่ถูกกฎหมายจากเซิร์ฟเวอร์ของฉันบังคับให้ฉันเปิดใช้งานบัญชีของตนเองอีกครั้ง (หรือแย่กว่านั้นลองคิดดูว่าที่อยู่ใดที่ถูกแบน 100/1000 ไอพีนั้นเป็นของพวกเขา)
- ที่อยู่ IP ไม่ใช่ตัวระบุที่ดีสำหรับผู้ใช้ หากคุณมีผู้ใช้หลายคนที่อยู่เบื้องหลัง IP เดียว (ตัวอย่างเช่นโรงเรียนที่ใช้ NAT กับเครื่องนักเรียน 500 เครื่อง) ผู้ใช้รายเดียวที่คาดเดาไม่ได้สองสามคนสามารถนำคุณไปสู่โลกแห่งความเจ็บปวด ในขณะเดียวกันความพยายามคาดเดารหัสผ่านส่วนใหญ่ที่ฉันเห็นมีการแจกจ่าย
ดังนั้นฉันจึงไม่พิจารณา fail2ban (และเครื่องมือตอบกลับอัตโนมัติที่คล้ายกัน) เป็นวิธีที่ดีมากในการรักษาความปลอดภัยเซิร์ฟเวอร์จากการโจมตีที่ดุร้าย กฎ IPTables ง่าย ๆ ที่ถูกตั้งค่าให้ลดลงในบันทึกสแปม (ซึ่งฉันมีอยู่ในเซิร์ฟเวอร์ linux ส่วนใหญ่ของฉัน) คือสิ่งนี้:
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
มันป้องกันการพยายามเชื่อมต่อมากกว่า 4 ครั้งจาก IP เดียวไปยัง ssh ในช่วงเวลา 60 วินาทีใด ๆ ส่วนที่เหลือสามารถจัดการได้โดยมั่นใจว่ารหัสผ่านมีความแข็งแกร่งพอสมควร บนเซิร์ฟเวอร์ความปลอดภัยสูงบังคับให้ผู้ใช้ใช้การรับรองความถูกต้องของคีย์สาธารณะเป็นอีกวิธีหนึ่งที่จะหยุดการเดา