SSH / SSHD - ฉันจะตั้งค่าความพยายามเข้าสู่ระบบสูงสุดได้อย่างไร


17

วิธีที่ง่ายที่สุดในการตั้งค่าความพยายามเข้าสู่ระบบสูงสุดในสภาพแวดล้อม LAMP คืออะไร (sshd ติดตั้งผ่าน yum) มีแพ็คเกจหรือกฎไฟร์วอลล์แบบง่ายหรือไม่?



@Hyppy ขอบคุณฉันพยายามค้นหา แต่น่าเสียดายที่มีคำถาม / กระทู้ที่มีชื่อไม่ดี
John Himmelman

คำตอบ:


11

ฉันใช้Fail2ban ; ฉันเคยใช้Denyhostsมาก่อนและใช้งานได้ดีเช่นกัน ฉันชอบ Fail2ban ในตอนนี้เพราะสามารถกำหนดค่าได้มากขึ้นและสามารถจัดการการตรวจสอบบริการที่แตกต่างกันได้มากขึ้นตัวอย่างเช่น sshd และหน้าเข้าสู่ระบบของเว็บแอปพลิเคชันของคุณพร้อมกัน

อีกวิธีหนึ่งคุณอาจพิจารณาคือการใช้กฎ LIMIT ในiptables; ฉันโชคร้ายที่ไม่สามารถช่วยคุณทำสิ่งนี้ได้เว้นแต่คุณต้องการติดตั้งShorewallและจากนั้นฉันก็จะนำคุณไปสู่เอกสารที่ดีเยี่ยมในเว็บไซต์นั้นสำหรับวิธีการกำหนดค่ากฎ LIMIT ให้ดี จำกัด ขีดความสามารถของคนที่จะดุร้าย - บังคับเซิร์ฟเวอร์ของคุณ


ฉันควรเพิ่มว่า Fail2ban มีอยู่ในคลังเก็บของ distros หลายแห่งดังนั้นการติดตั้งจึงเป็นเรื่องง่าย ฉันไม่เคยเห็น Denyhosts มาก่อน แต่นั่นไม่ได้หมายความว่ามันไม่ได้อยู่ในบางส่วนและไม่ได้ถูกเพิ่มตั้งแต่ครั้งสุดท้ายที่ฉันตรวจสอบ
Kromey

ฉันพบปัญหาที่ fail2ban ของ v0.8.14 ทำงานไม่ถูกต้องกับคำสั่ง iptables-multiport และนี่เป็นปัญหาที่ทราบแล้วพร้อมกับยูทิลิตี้ fail2ban ที่ได้รับการแก้ไขในเวอร์ชันใหม่ ... นี่คือคำอธิบาย: github.com/fail2ban/fail2ban/issues/798ดังนั้นฉันจึงเชื่อในกลไกความปลอดภัยที่พัฒนาเป็นซอฟต์แวร์เซิร์ฟเวอร์หรือยูทิลิตี้ของบุคคลที่สาม ...
George Gaál

44

ฉันไม่ชอบใช้เครื่องมือของบุคคลที่สาม ดังนั้นฉันใช้การรวมกันของการกำหนดค่า ssh และการตั้งค่าไฟร์วอลล์ ด้วยวิธีการต่อไปนี้ผู้โจมตีจะได้รับอนุญาตให้สร้างการล็อกอินผิดพลาด 3 ครั้งภายใน 2 นาทีมิเช่นนั้นจะถูกปิดกั้นเป็นเวลา 120 วินาที

1) เพิ่มบรรทัดต่อไปนี้ลงใน /etc/ssh/sshd_config

MaxAuthTries 1

การดำเนินการนี้จะอนุญาตเพียง 1 ครั้งต่อการเชื่อมต่อ รีสตาร์ทเซิร์ฟเวอร์ ssh

2) เพิ่มกฎไฟร์วอลล์ต่อไปนี้

สร้างห่วงโซ่ใหม่

iptables -N SSHATTACK
iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7
iptables -A SSHATTACK -j DROP

บล็อกที่อยู่ IP แต่ละรายการเป็นเวลา 120 วินาทีซึ่งสร้างการเชื่อมต่อมากกว่าสามรายการภายใน 120 วินาที ในกรณีที่มีการพยายามเชื่อมต่อครั้งที่สี่การร้องขอจะได้รับการมอบหมายให้กับSSHATTACKchain ซึ่งรับผิดชอบการบันทึกการโจมตี ssh ที่เป็นไปได้และในที่สุดก็ปล่อยคำขอ

iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --set
iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK

3) ดูรายการบันทึกของการโจมตี ssh ที่เป็นไปได้ /var/log/syslog

Dec 27 18:01:58 ubuntu kernel: [  510.007570] Possible SSH attack! IN=eth0 OUT= MAC=01:2c:18:47:43:2d:10:c0:31:4d:11:ac:f8:01 SRC=192.168.203.129 DST=192.168.203.128 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30948 DF PROTO=TCP SPT=53272 DPT=1785 WINDOW=14600 RES=0x00 SYN URGP=0

2
! น่ากลัว แต่ฉันมีปัญหาบางคน / บอทในฝรั่งเศสไม่ได้กำหนดค่าเครื่องมือแฮ็กเกอร์ของเขาอย่างถูกต้องดังนั้นเขาจึงเข้าสู่ระบบแม้ว่าปริมาณการใช้งานของเขาจะลดลง ผลที่ได้บันทึกของฉันเต็มไปด้วยข้อมูลทุก ๆ วินาทีจากเจ้านี่ มีวิธีใดบ้างไหม?
Smarties89

2
สำหรับคนที่มีประสบการณ์น้อยเช่นตัวฉัน: บรรทัด iptables ถูกพิมพ์ลงในพรอมต์ bash ไม่ใช่ป้อนไฟล์ในที่ใดที่หนึ่ง
Andrew Swift

4

ไม่มีแพ็คเกจเฉพาะที่เกี่ยวข้องกับ SSH เพื่อตั้งค่านี้ อย่างไรก็ตามคุณสามารถติดตั้ง CSF ซึ่งเป็น ConfigServer & Firewall

น้ำไขสันหลัง

การเปลี่ยนแปลงการกำหนดค่าสองอย่างที่ฉันแนะนำให้ทำในไฟล์: / etc / ssh / sshd_config

จำกัด จำนวนสูงสุดของการเชื่อมต่อที่ไม่ได้รับการรับรองความถูกต้องที่เซิร์ฟเวอร์ ssh จะจัดการในเวลาเดียวกัน สิ่งที่เล็กกว่านี้ก็คือยิ่งยากสำหรับตัวเล็กสคริปต์ในการสร้างความพยายามในการถอดรหัสที่ขนานกันและประสานงานกับการเชื่อมต่อที่หลากหลาย แก้ไข sshd_config และเปลี่ยน MaxStartups จากค่าเริ่มต้นของ "10" เป็น "3:50:10" ค่าที่คั่นด้วยโคลอนบอกให้เซิร์ฟเวอร์ ssh "อนุญาตให้ผู้ใช้ 3 คนพยายามเข้าสู่ระบบในเวลาเดียวกันและจะพยายามลดการเชื่อมต่อแบบสุ่มและมากขึ้นระหว่าง 3 ถึงสูงสุด 10" หมายเหตุ: สิ่งนี้ควรเพิ่มขึ้นบนเซิร์ฟเวอร์ที่มีจำนวนผู้ใช้ ssh ที่ถูกต้องเข้าสู่ระบบ

  • เริ่มต้น : MaxStartups 10
  • MaxStartups 3:50:10

ลดระยะเวลาสูงสุดที่อนุญาตให้ลงชื่อเข้าใช้สำเร็จก่อนยกเลิกการเชื่อมต่อ ค่าเริ่มต้นของ 2 นาทีเป็นเวลานานเกินไปที่จะระงับการเปิดการเชื่อมต่อที่ไม่ได้ตรวจสอบสิทธิ์ (ดูด้านบน); 30 วินาทีมีเวลามากพอที่จะลงชื่อเข้าใช้:

  • เริ่มต้น : LoginGraceTime 2 ม
  • LoginGraceTime 30

3

ฉันใช้กฎ IPTables เหล่านี้สำหรับสิ่งนี้:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 --rttl  --name SSH -j DROP

ซึ่งจะอนุญาตให้เพียง 4 แพ็คเก็ต TCP / SYN ไปยังพอร์ต 22 จากที่อยู่ IP ใน 5 นาที หากพยายามมากกว่านี้ประตูจะปิดลงจนถึง 5 นาที


ต้องการการแก้ไขอะไร
timkofu

-A INPUT -p tcp -m tcp --dport 22 -m limit --limit 48/hour -j ACCEPTสวยมากเช่นเดียวกับ:
Alix Axel

ฉันทำคำสั่ง iptables ทั้งสองนี้ใน Debian Jessie แต่ยังสามารถเห็นการเข้าสู่ระบบ SSH พยายามทุก 2 วินาทีจากที่อยู่ IP เดียวกัน ความคิดใด ๆ
Alexey Ozerov

1

มีตัวเลือกที่คุณสามารถใส่ลงในไฟล์ sshd_config ของคุณสำหรับเซิร์ฟเวอร์:

 MaxAuthTries
         Specifies the maximum number of authentication attempts permitted per
         connection.  Once the number of failures reaches half this value, additional 
         failures are logged.  The default is 6.

มีประโยชน์ (โดยเฉพาะเมื่อรวมกับคำแนะนำอื่น ๆ ที่ทำไปแล้ว) แต่ไม่ได้แก้ปัญหาด้วยตัวเองเพราะมันเล็กน้อยสำหรับใครบางคนที่จะเชื่อมต่อใหม่
Kromey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.