วิธีการบล็อก IP ใน ssh


1

บุคคลที่ยืนกรานมากพยายามอย่างต่อเนื่องเพื่อเข้าถึง (ไม่ได้รับอนุญาต) เข้าสู่ระบบของฉันในช่วงสองสามวันที่ผ่านมา ... มีรายการที่มีจำนวนพันล้านรายการเช่นใน /var/log/auth.log:

Jun 21 03:55:15 cloudy sshd[32487]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.20  user=root
Jun 21 03:55:16 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:19 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:21 cloudy sshd[32487]: Failed password for root from 116.31.116.20 port 30629 ssh2
Jun 21 03:55:21 cloudy sshd[32487]: Received disconnect from 116.31.116.20: 11:  [preauth]
Jun 21 03:55:21 cloudy sshd[32487]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.31.116.20  user=root

ฉันต้องการขอคำแนะนำเกี่ยวกับวิธีการบล็อกบุคคลนี้จากการใช้ทรัพยากรจากคอมพิวเตอร์มีความเป็นไปได้ที่จะ "ฮาร์ดบล็อก" IP จากการเปิดการเชื่อมต่อ ssh หรือไม่? โปรดทราบว่าฉันใช้ Debian 8 เป็นระบบปฏิบัติการ

คำตอบ:


3

3
สิ่งนี้จะไม่ได้ผลสำหรับทุกคน hosts.deny เป็นส่วนหนึ่งของห้องสมุดภายนอกที่เรียกว่า TCP Wrappers . เซิร์ฟเวอร์ SSH จะให้เกียรติไฟล์นี้ก็ต่อเมื่อมีการสนับสนุน tcp wrapper โดยใครก็ตามที่คอมไพล์มัน OpenSSH เวอร์ชันปัจจุบัน ไม่มีการรองรับ TCP Wrapper อีกต่อไป แม้ว่าผู้ดูแลระบบ distro Linux อาจยังคงเพิ่มเข้าไปในแพ็คเกจ OpenSSH ที่พวกเขาแจกจ่าย
Kenster

1

คุณยังสามารถใช้ iptables

สร้างไฟล์ที่มีที่อยู่ IP ที่คุณต้องการบล็อกเป็น blocked.ips.txt

ตอนนี้สร้างและเรียกใช้สคริปต์ที่มีต่อไปนี้:

blocked=$(egrep -v -E "^#|^$" ./blocked.ips.txt)
for ip in $blocked
do
    iptables -I INPUT -s $ip -p tcp --dport ssh -j DROP
done

วิ่ง iptables -L ควรให้ผลลัพธ์ของแพ็กเก็ตที่ถูกทิ้ง


1

วิธีการ iptables เป็นวิธีที่ตรงที่สุด Erik Handriks เสนอว่าเป็นสคริปต์

สองตัว -s: - สคริปต์จะต้องเริ่มต้นหลังจากการรีสตาร์ททุกครั้ง (หากตารางไม่ได้สำรองข้อมูลภายในด้วย iptables) - การเรียกสคริปต์ตามเดิมสองครั้งขึ้นไปจะเป็นการทำซ้ำรายการ

ลองทำตัวคนเลวด้วย:

iptables -I อินพุต -s -p tcp --dport ssh -j DROP

ในการแจกแจงส่วนใหญ่ iptables มีกลไกการบันทึกกฎการกู้คืน ดูว่ามี '/ var / lib / iptables / rules-save' อยู่หรือไม่ สำหรับ distro ของคุณมันอาจนั่งอยู่ที่อื่น (ที่นี่ที่เดียว)

หลังจากที่คุณเพิ่ม BAD IP ทุกอันให้ลอง:

iptables- บันทึก & gt; / var / lib / iptables / กฎระเบียบบันทึก

หลังจากรีสตาร์ทตรวจสอบกับ 'iptables -L' มีอะไรออกไป ...


0

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

ดูข้อมูลเพิ่มเติมได้ที่: https://www.upcloud.com/support/installing-fail2ban-on-debian-8-0/


0

บนเซิร์ฟเวอร์ของฉัน (Ubuntu 16.04) ฉันใช้ UFW (UncomplicatedFireWall) เลเยอร์การทำให้เข้าใจง่ายกว่า iptables) ซึ่งดูเหมือนว่าจะเป็นปัญหามาตรฐานที่ค่อนข้างมากในเซิร์ฟเวอร์ Ubuntu (แต่ควรจะมีไว้สำหรับ distros อื่น ๆ ) สำหรับกรณีเหล่านี้ฉันใช้:

ufw insert 1 deny from nnn.nnn.nnn.nnn

UFW ยังอนุญาตให้คุณ จำกัด จำนวนการเชื่อมต่อ

ufw limit ssh/tcp

โปรดทราบว่าสิ่งนี้ยังนำไปใช้กับการเชื่อมต่อที่ประสบความสำเร็จดังนั้นหากคุณใช้สคริปต์ที่ใช้หลายคำสั่ง ssh คุณต้องปิดการใช้งานข้อ จำกัด นี้สำหรับ IP ของคุณโดยการออก:

ufw insert 1 allow in from nnn.nnn.nnn.nnn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.