วิธีป้องกันเซิร์ฟเวอร์ SSH จากการโจมตีแบบเดรัจฉานโดยใช้ fail2ban การเชื่อมต่อรูทโดยตรง

เพื่อปกป้องเซิร์ฟเวอร์ของเราจากรหัสผ่านที่ดุร้าย คุณสามารถใช้ยูทิลิตี้ sshguard หรือ sshit

หลักการทำงาน.

sshguard และ shit ทำงานในลักษณะเดียวกัน พวกเขาวิเคราะห์ข้อความของระบบเกี่ยวกับการรับรองความถูกต้องที่ไม่ถูกต้อง และหากถึงค่าที่กำหนด ให้ป้อน IP ที่โจมตีลงในกฎการบล็อกของไฟร์วอลล์ หลังจากช่วงเวลาหนึ่ง ip จะถูกลบออกจากกฎ
ดังนั้น จำเป็นต้องมีไฟร์วอลล์ที่กำหนดค่าไว้สำหรับการดำเนินการ

SSHGuard

sshguard สามารถทำงานร่วมกับ

  • ไฟร์วอลล์เนทีฟ AIX- สำหรับระบบปฏิบัติการ IBM AIX
  • netfilter / iptables- สำหรับระบบปฏิบัติการบน Linux
  • ตัวกรองแพ็คเก็ต (PF)- สำหรับระบบปฏิบัติการ BSD (เปิด, ฟรี, Net, DragonFly -BSD)
  • IPFirewall (IPFW)- สำหรับ FreeBSD และ Mac OS X
  • ตัวกรอง IP (IPFILTER)- สำหรับ FreeBSD, NetBSD และ Solaris
  • tcpd "s hosts_access (/etc/hosts.allow)- พกพาได้บน UNIX
  • โมฆะ- แบ็กเอนด์ที่ไม่ทำอะไรแบบพกพาสำหรับการใช้การตรวจจับ แต่ไม่ใช่การป้องกัน

ฉันใช้ PF ดังนั้นในบันทึกย่อจึงมีตัวอย่างใน PF

กำลังติดตั้ง sshguard

ฟรีบีเอสดี:

ติดตั้งจากพอร์ต

Cd / usr / พอร์ต / ความปลอดภัย / sshguard-pf / && ทำการติดตั้งให้สะอาด

หากคุณไม่ได้ใช้พอร์ตด้วยเหตุผลบางประการ ให้ดาวน์โหลดเวอร์ชันล่าสุดจากเว็บไซต์ sshguard และคอมไพล์ด้วยตนเอง

./configure --with-firewall = pf && make && make install

เดเบียน:

apt-get ติดตั้ง sshguard

การตั้งค่าระบบปฏิบัติการเพื่อให้ sshguard ทำงาน

สร้างไฟล์สำหรับจัดเก็บบันทึก

# แตะ / var / บันทึก / sshguard

เดเบียน (ส่งเสียงฮืด ๆ):

แก้ไขบรรทัดต่อไปนี้ใน // etc / default / sshguard

#mcedit / etc / default / sshguard #ARGS = "- a 40 -p 420 -s 1200" ARGS = "- a 5 -p 420 -s 2400 -b 5: / etc / sshguard / blacklist"

และรีสตาร์ท sshguard
บริการ sshguard เริ่มใหม่

ฟรีบีเอสดี:

เราจำเป็นต้องเพิ่มสองบรรทัดในการกำหนดค่า PF

ตาราง ยังคงมีอยู่

เราประกาศตารางที่ sshguard เข้าสู่หุ่นยนต์ไอพี

บล็อกอย่างรวดเร็วใน $ if0 proto tcp จาก

อันที่จริงกฎการบล็อกนั้นควรทำเครื่องหมายที่ด้านบนสุดของบล็อกกฎของไฟล์การกำหนดค่า PF $ if0 อินเทอร์เฟซที่การเชื่อมต่อจะถูกบล็อก เพื่อบล็อกบนอินเทอร์เฟซทั้งหมด แทนที่ด้วยใด ๆ
อ่านไฟล์ปรับแต่งอีกครั้ง

Auth.info; auhpriv.info | exec / usr / local / sbin / sshguard

และรีสตาร์ท syslog

# / etc / rc.d / syslogd รีสตาร์ท

อันที่จริงหลังจากการปรับเปลี่ยนเหล่านี้ sshguard จะบล็อกการโจมตีด้วยพารามิเตอร์เริ่มต้น
เมื่อโจมตีใน /var/log/auth.logเราจะเห็นสิ่งต่อไปนี้

Jun1611: 01: 40 www sshd: การทดสอบผู้ใช้ไม่ถูกต้องจาก 61.172.251.183Jun1612: 29: 48 www sshd: การทดสอบผู้ใช้ไม่ถูกต้องจาก 85.114.130.168 Jun1612: 29: 49 www sshd: การทดสอบผู้ใช้ไม่ถูกต้องจาก 85.114.130.168 Jun1612: 29: 49 www sshd: การทดสอบผู้ใช้ไม่ถูกต้องจาก 85.114.130.168Jun1612: 29: 50 www sshd: การทดสอบผู้ใช้ไม่ถูกต้องจาก 85.114.130.168Jun1612: 29: 50 www sshguard: Blocking85.114.130.168: 4for> 420secs: 4 ความล้มเหลวใน 2 วินาที

การกำหนดค่าตัวเลือก sshguard

sshguard มีพารามิเตอร์จำนวนหนึ่งที่เราสามารถแทนที่ได้
-NSจำนวนครั้งที่พยายามตรวจสอบสิทธิ์ที่ล้มเหลวหลังจากนั้น IP จะถูกบล็อก ค่าเริ่มต้นคือ 4
-NS ip จะถูกปลดล็อคกี่วินาที ค่าเริ่มต้นคือ 420
-NS sshguard จำ IP ได้กี่วินาที ค่าเริ่มต้นคือ 1200 เพื่อให้ชัดเจนยิ่งขึ้น หากมีการโจมตีจาก ip หนึ่งครั้งใน 30 นาที มันจะไม่ถูกแบนด้วยการตั้งค่าเริ่มต้น
-w ip สีขาว เครือข่าย หรือเส้นทางไปยังไฟล์ที่อยู่สีขาว รูปแบบไฟล์เป็นหนึ่งบรรทัด - หนึ่งรายการ # กำหนดความคิดเห็น
-NSกำหนดหลังจากจำนวนบล็อก IP ที่จะถูกเพิ่มในบัญชีดำและเส้นทางไปยังบัญชีดำ บัญชีดำถูกโหลดเมื่อ sshguard เริ่มทำงานและจะไม่ถูกล้างโดยอัตโนมัติ

sshguard ไม่มีไฟล์กำหนดค่า พารามิเตอร์จะถูกตั้งค่าเมื่อ sshguard เริ่มทำงาน ในกรณีของเรา sshguard เริ่ม syslog ดังนั้นเราจะแก้ไข syslog.conf เพื่อให้ sshguard บล็อก IP หลังจากพยายามตรวจสอบสิทธิ์ไม่สำเร็จ 3 ครั้งเป็นเวลา 30 นาที และหลังจาก 5 ล็อกบัญชีดำ

Auth.info; auhpriv.info | exec / usr / local / sbin / sshguard -a 3-p 1500-b 5: /usr/local/etc/sshguard.blacklist

ครั้งแรกจะถูกบล็อกเป็นเวลา 420 วินาทีและลบหลังจาก 7 นาที
ครั้งที่สองโดย 2 * 420 y จะถูกลบออกหลังจาก 14 นาที
ครั้งที่สามสำหรับ 2 * 2 * 420 และถูกลบหลังจาก 28 นาทีเป็นต้น ...
2 ^ (N-1) * 420 ครั้ง

อึ

อึเป็นสคริปต์ Perl ตามลำดับ ระบบต้องมี Perl เช่นเดียวกับ 2 โมดูล

  • IPC :: แชร์ได้
  • Proc :: PID :: File

อึสามารถใช้ได้กับ pf และ ipfw เท่านั้น

กำลังติดตั้งอึ

cd / usr / พอร์ต / ความปลอดภัย / อึ / && ทำการติดตั้งใหม่ทั้งหมด

อึ config.

อึมีไฟล์กำหนดค่า /usr/local/etc/sshit.conf ซึ่งคุณสามารถแทนที่ค่าเริ่มต้นได้

FIREWALL_TYPE = "pf"; # ไฟร์วอลล์ใดที่เราใช้ MAX_COUNT = 3; # จำนวนของความพยายามรับรองความถูกต้องที่ล้มเหลวหลังจากที่ ip ถูกบล็อก WITHIN_TIME = 60; # ภายในกี่วินาที จำนวนของการตรวจสอบที่ไม่สำเร็จจะต้องเกิดขึ้น RESET_IP = 300; # หลังจากกี่วินาที IP จะถูกปลดล็อค PFCTL_CMD = "/ sbin / pfctl"; PF_TABLE = "badhosts" # ชื่อของตารางที่ป้อน ip ที่ไม่ถูกต้อง

กำลังกำหนดค่าระบบปฏิบัติการสำหรับอึ

โดยการเปรียบเทียบกับการตั้งค่าสำหรับ sshguard แก้ไขไฟล์การกำหนดค่า PF

ตาราง ยังคงบล็อกอย่างรวดเร็วใน $ if0 proto tcp จาก ถึง $ if0 port ssh label "ssh brute"

อ่านไฟล์การกำหนดค่าอีกครั้ง

#pfctl -f /etc/pf.conf

กำลังแก้ไข syslog.conf

Auth.info; auhpriv.info | exec / usr / local / sbin / อึ

และรีสตาร์ท syslog

SSH เป็นโปรโตคอลที่ปลอดภัยสำหรับการถ่ายโอนข้อมูล (คำสั่ง ไฟล์ วิดีโอ ฯลฯ) ระหว่างคอมพิวเตอร์

โดยค่าเริ่มต้น จะเปิดใช้งานบน VPS และเซิร์ฟเวอร์เฉพาะของผู้ให้บริการโฮสต์ส่วนใหญ่ เนื่องจากทำให้สามารถจัดการเครื่องระยะไกลได้อย่างง่ายดายและปลอดภัย อย่างไรก็ตาม คุณสามารถเช่าเซิร์ฟเวอร์ VPS ได้ในราคาถูกบนบริการ Well-Web เนื่องจาก SSH ทำงานบน VPS ทั้งหมด เพื่อหลีกเลี่ยงปัญหาเมื่อใช้ Secure Shell การป้องกัน SSH ที่เหมาะสมจึงเป็นสิ่งจำเป็น

ปิดการเข้าถึงรูท

ก่อนอื่น ขอแนะนำให้ปิดใช้งานความสามารถในการเชื่อมต่อกับเครื่องจากระยะไกลภายใต้บัญชี superuser (รูท) ในการทำเช่นนี้ คุณต้องค้นหาไฟล์ sshd_config ซึ่งโดยปกติ (แต่ไม่เสมอไป) จะอยู่ในไดเร็กทอรี / etc / ssh / และเปิดขึ้นมา

ในนั้นคุณต้องค้นหารายการ PermitRootLogin และแทนที่ค่าด้วย "ไม่" นั่นคือคุณควรได้รับบันทึกต่อไปนี้:

PermitRootLogin no

โดยธรรมชาติแล้ว สิ่งนี้จะไม่ป้องกันการแฮ็ก แต่มันจะทำให้ยากขึ้นบ้าง

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

เปลี่ยนพอร์ตเริ่มต้น

เนื่องจากการแฮ็กเซิร์ฟเวอร์ผ่าน SSH มักเกิดขึ้นจากการโจมตีแบบเดรัจฉาน จึงควรเปลี่ยนพอร์ตมาตรฐานที่ 22 เป็นพอร์ตอื่น มันง่ายมากที่จะทำ ก่อนอื่น คุณต้องเปิดไฟล์ sshd_config ที่กล่าวถึงแล้ว และเพิ่มหนึ่งบรรทัดที่นั่น:

พอร์ต port_number

รายการจะมีลักษณะเช่นดังนี้:

พอร์ต 3048

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

การจำกัดการเข้าถึง IP

วิธีการป้องกันอีกวิธีหนึ่ง ซึ่งในทางปฏิบัติจะลดความเป็นไปได้ของการเชื่อมต่อที่ไม่ได้รับอนุญาตให้เป็นศูนย์ คือการกำหนดข้อจำกัดในการอนุญาต สามารถกำหนดค่า SSH ในลักษณะที่เฉพาะเครื่องระยะไกลที่มีที่อยู่ IP เฉพาะเท่านั้นที่สามารถเข้าสู่ระบบเซิร์ฟเวอร์ได้ เมื่อต้องการทำสิ่งนี้ ในไฟล์ sshd_config ในบรรทัด AllowUser ให้เพิ่ม @IP_number ให้กับชื่อของผู้ใช้แต่ละคน ตัวอย่างเช่น บันทึกสามารถมีลักษณะดังนี้:

อนุญาตให้ผู้ใช้ [ป้องกันอีเมล], [ป้องกันอีเมล]

ก่อนที่จะใช้วิธีนี้ ขอแนะนำให้ตรวจสอบให้แน่ใจว่าไม่มีสถานการณ์ใดที่คุณอาจต้องเข้าสู่ระบบเซิร์ฟเวอร์จากเครื่องที่ไม่มีที่อยู่ IP ที่การกำหนดค่าไว้

รหัสผ่านที่ปลอดภัย

และแน่นอน คุณควรใช้รหัสผ่านเดรัจฉาน ยาวและมีสัญลักษณ์ต่างๆ ให้มากที่สุดเท่าที่จะเป็นไปได้ ควรใช้กับ krakozyabras นี้จะต้องมี

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

fail2ban เป็นเฟรมเวิร์กป้องกันการบุกรุกโอเพ่นซอร์สที่รู้จักกันดีสำหรับ Linux โดยจะตรวจสอบบันทึกของระบบต่างๆ (เช่น /var/log/auth.log หรือ / var / log / ปลอดภัย) และบังคับใช้การป้องกันต่างๆ โดยอัตโนมัติจากการกระทำที่น่าสงสัยที่ตรวจพบ ที่จริงแล้ว fail2ban สามารถมีประโยชน์มากในการป้องกันการโจมตีแบบเดรัจฉานบนเซิร์ฟเวอร์ SSH

ในบทช่วยสอนนี้ ฉันจะสาธิต วิธีการติดตั้งและกำหนดค่า fail2ban เพื่อปกป้องเซิร์ฟเวอร์ SSH จากการโจมตีแบบเดรัจฉานจากที่อยู่ IP ระยะไกล.

การติดตั้ง Fail2ban บน Linux

ในการติดตั้ง fail2ban บน CentOS หรือ RHEL ก่อนอื่นให้ติดตั้งที่เก็บ EPEL แล้วรันคำสั่งต่อไปนี้

ในการติดตั้ง fail2ban บน Fedora ให้เรียกใช้:

$ sudo yum ติดตั้ง fail2ban

ในการติดตั้ง fail2ban บน Ubuntu, Debian หรือ Linux Mint:

$ sudo apt-get install fail2ban

การกำหนดค่า Fail2ban สำหรับ SSH Server

ตอนนี้คุณพร้อมที่จะกำหนดค่า fail2ban เพื่อทำให้เซิร์ฟเวอร์ SSH ของคุณแข็งแกร่งขึ้น คุณต้องแก้ไขไฟล์กำหนดค่าใน /etc/fail2ban/jail.conf ไฟล์กำหนดค่ามีส่วน "เริ่มต้น" ซึ่งคุณกำหนดพารามิเตอร์เริ่มต้นสำหรับบริการทั้งหมดที่ได้รับการตรวจสอบและส่วนเฉพาะบริการที่คุณกำหนดคุกเฉพาะบริการ (เช่น SSH, Apache ฯลฯ ) เพื่อเขียนทับพารามิเตอร์ ค่าเริ่มต้น

ในส่วนการคุมขังของบริการบางอย่าง (ซึ่งอยู่หลังส่วนการคุมขัง) คุณต้องกำหนดส่วนที่คุณจะกำหนดการตั้งค่าเฉพาะสำหรับการคุมขัง SSH การแบนที่อยู่ IP ปัจจุบันทำได้โดย iptables

ตัวอย่างต่อไปนี้อยู่ใน /etc/fail2ban/jail.conf ซึ่งมีการตั้งค่าคุก "ssh-iptables" แน่นอนว่าอาจมีคุกอื่นๆ สำหรับการใช้งานที่แตกต่างกัน ขึ้นอยู่กับความต้องการของคุณ

$ sudo vi /etc/fail2ban/jail.local # รายการที่อยู่ IP ที่คั่นด้วยช่องว่าง คำนำหน้า CIDR หรือชื่อโฮสต์ DNS # เพื่อเลี่ยงการรักษาความปลอดภัย fail2ban ละเว้น = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24 # จำนวนวินาทีที่ไคลเอ็นต์ถูกบล็อก bantime = 86400 # จำนวนครั้งที่ไม่สำเร็จ หลังจากนั้นการบล็อกเกิดขึ้น maxretry = 5 # จำนวนวินาทีในระหว่างที่พยายามไม่สำเร็จจะถูกบันทึกสะสม findtime = 600 mta = sendmail เปิดใช้งาน = true ตัวกรอง = การกระทำ sshd = iptables sendmail-whois # สำหรับการแจกแจงแบบใช้เดเบียน logpath = /var/log/auth.log # สำหรับการแจกแจงตามเส้นทาง Red Hat = / var / log / ปลอดภัย # ssh เกณฑ์การลองใหม่สูงสุดเฉพาะ maxretry = 3

ตามการกำหนดค่าที่กำหนด fail2ban จะแบนที่อยู่ IP ระยะไกลโดยอัตโนมัติซึ่งได้รับการพยายามไม่สำเร็จอย่างน้อย 3 ครั้งในช่วง 10 นาทีที่ผ่านมา เมื่อถูกแบนแล้ว IP ที่ละเมิดจะถูกบล็อกเป็นเวลา 24 ชั่วโมง กิจกรรมนี้จะได้รับแจ้งทางไปรษณีย์

หลังจากที่ไฟล์การกำหนดค่าพร้อมแล้ว ให้เริ่มบริการ fail2ban ใหม่ดังที่แสดงด้านล่าง

บน Debian, Ubuntu หรือ CentOS / RHEL 6:

$ sudo บริการ fail2ban เริ่มต้นใหม่

บน Fedora หรือ CentOS / RHEL 7:

$ sudo systemctl รีสตาร์ท fail2ban

ในการตรวจสอบว่า fail2ban เริ่มต้นได้สำเร็จหรือไม่ ให้รันคำสั่ง fail2ban-client ด้วยอาร์กิวเมนต์ "ping" หาก fail2ban ทำงานตามปกติ คุณควรเห็นการตอบสนอง "pong"

$ sudo fail2ban-client ping เซิร์ฟเวอร์ตอบกลับ: pong

การทดสอบ Fail2ban บน SSH กับการโจมตีแบบเดรัจฉาน

ในการตรวจสอบว่า fail2ban ทำงานหรือไม่ ให้ลองลงชื่อเข้าใช้เซิร์ฟเวอร์ SSH โดยใช้รหัสผ่านที่ไม่ถูกต้องเพื่อจำลองการโจมตีแบบเดรัจฉาน ในระหว่างนี้ ให้ตรวจสอบ /var/log/fail2ban.log ซึ่งบันทึกเหตุการณ์ที่น่าสนใจทั้งหมดที่เกิดขึ้นใน fail2ban

$ sudo tail -f /var/log/fail2ban.log

จากบันทึกด้านบน fail2ban แบนที่อยู่ IP 192.168.1.8 เนื่องจากตรวจพบข้อผิดพลาดหลายครั้งในการพยายามเข้าสู่ระบบ SSH จากที่อยู่ IP นี้

ตรวจสอบสถานะ Fail2ban และปลดบล็อกที่อยู่ IP ที่ถูกบล็อก

คุก “ssh-iptables” ใน fail2ban ใช้ iptables เพื่อบล็อกที่อยู่ IP ของผู้ฝ่าฝืน คุณสามารถตรวจสอบการแบนได้อย่างง่ายดายโดยดูกฎ iptables ปัจจุบันดังที่แสดงด้านล่าง

$ sudo iptables --list -n Chain INPUT (policy ACCEPT) เป้าหมาย prot opt ​​​​source ปลายทาง fail2ban-SSH tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt: 22 Chain FORWARD (นโยบาย ACCEPT) เป้าหมาย prot opt ​​​ปลายทางต้นทาง Chain OUTPUT (นโยบาย ACCEPT) ปลายทาง prot เลือกปลายทางต้นทาง Chain fail2ban-SSH (1 การอ้างอิง) เป้าหมาย prot เลือกปลายทางต้นทาง DROP ทั้งหมด - 192.168.1.8 0.0.0.0/0 คืนทั้งหมด - 0.0.0.0/0 0.0.0.0/0

หากคุณต้องการปลดบล็อกที่อยู่ IP จาก fail2ban คุณสามารถเรียกใช้คำสั่ง iptables:

$ sudo iptables -D fail2ban-SSH -s 192.168.1.8 -j DROP

แม้ว่าคุณสามารถตรวจสอบและจัดการรายการ IP ที่ถูกบล็อกใน fail2ban ได้ด้วยตนเองโดยใช้คำสั่ง iptables วิธีที่ถูกต้องคือการใช้เครื่องมือบรรทัดคำสั่ง ail2ban-client เครื่องมือนี้ช่วยให้คุณจัดการไม่เพียงแค่คุก “ssh-iptables” เท่านั้น แต่ยังรวมถึงคุกประเภท fail2ban ประเภทอื่น ๆ ในอินเทอร์เฟซบรรทัดคำสั่งแบบรวมศูนย์

วิธีตรวจสอบสถานะ fail2ban (ซึ่งจะแสดงรายการคุกที่ใช้งานอยู่ในปัจจุบัน):

$ sudo fail2ban- สถานะไคลเอนต์

วิธีตรวจสอบสถานะการคุมขังเฉพาะ (เช่น ssh-iptables):

$ sudo fail2ban- สถานะไคลเอนต์ ssh-iptables

คำสั่งดังกล่าวจะแสดงรายการที่อยู่ IP ที่ถูกแบน

ในการปลดบล็อคที่อยู่ IP เฉพาะ:

$ sudo fail2ban-client set ssh-iptables unbanip 192.168.1.8

หมายเหตุ หากคุณหยุด fail2ban ที่อยู่ IP ที่ถูกบล็อกทั้งหมดจะถูกยกเลิกการปิดกั้น เมื่อคุณรีสตาร์ท fail2ban มันจะค้นหารายการที่อยู่ IP ที่ละเมิดจาก / var / log / ปลอดภัย (หรือ /var/log/auth.log) และแบนที่อยู่ IP เหล่านั้นอีกครั้งหากเวลาแบนยังไม่หมดอายุ

การตั้งค่า Fail2ban ให้โหลดอัตโนมัติและเปิดใช้งาน

หลังจากที่คุณทดสอบ fail2ban สำเร็จแล้ว ขั้นตอนสุดท้ายในการเปิดใช้งาน fail2ban คือการเริ่มทำงานโดยอัตโนมัติเมื่อเปิดเซิร์ฟเวอร์ ในการแจกแจงแบบเดเบียน การเริ่มต้นอัตโนมัติของ fail2ban ถูกเปิดใช้งานโดยค่าเริ่มต้น ในการแจกแจงแบบอิง Red Hat ให้เปิดใช้งานการเริ่มอัตโนมัติด้วยวิธีต่อไปนี้

บน CentOS / RHEL 6:

$ sudo chkconfig fail2ban บน

บน Fedora หรือ CentOS / RHEL 7:

$ sudo systemctl เปิดใช้งาน fail2ban

ผล

ในบทช่วยสอนนี้ ฉันสาธิตวิธีติดตั้งและกำหนดค่า fail2ban เพื่อรักษาความปลอดภัยเซิร์ฟเวอร์ SSH แม้ว่า fail2ban จะสามารถบรรเทาการโจมตีแบบเดรัจฉานได้ โปรดจำไว้ว่ามันไม่สามารถปกป้องเซิร์ฟเวอร์ SSH จากแคมเปญการบังคับเดรัจฉานที่ซับซ้อน (กระจาย) ได้ ซึ่งผู้โจมตีจะเลี่ยงผ่าน fail2ban โดยใช้ที่อยู่ IP ที่ควบคุมโดยบอทนับพัน

OpenSSHช่วยให้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์จากระยะไกล จัดการไฟล์ และจัดการระบบได้ วันนี้เราต้องการบอกคุณเกี่ยวกับวิธีที่ดีที่สุดที่จะเพิ่มความปลอดภัยของระบบตาม OpenSSH

ไฟล์คอนฟิก

  • / etc / ssh / sshd_config- ไฟล์การกำหนดค่าเซิร์ฟเวอร์ OpenSSH;
  • / etc / ssh / ssh_config- ไฟล์กำหนดค่าของส่วนไคลเอนต์ของ OpenSSH;
  • ~ / .ssh /- ไดเร็กทอรีที่เก็บการตั้งค่า SSH ของผู้ใช้
  • ~ / .ssh / ได้รับอนุญาต_keys หรือ ~ / .ssh / ได้รับอนุญาต_keys- รายการคีย์ (RSA หรือ DSA) ที่ใช้เชื่อมต่อกับบัญชีผู้ใช้
  • / etc / nologin- หากไฟล์นี้มีอยู่ในระบบ sshd จะป้องกันไม่ให้ผู้ใช้ทั้งหมดยกเว้นรูทเชื่อมต่อกับระบบ
  • /etc/hosts.allow และ /etc/hosts.deny- ระบบการห้าม (ส่วนหนึ่งของการรักษาความปลอดภัย) ทำงานโดยการเปรียบเทียบกับ ACL;
  • พอร์ต SSH โดยค่าเริ่มต้น - 22

ไม่จำเป็น - ปิดเครื่อง

หากเซิร์ฟเวอร์ของคุณไม่ต้องการการเชื่อมต่อ SSH ระยะไกล อย่าลืมปิดการใช้งาน ระบบอย่าง CentOS / RHEL ทำได้ดังนี้:

Chkconfig sshd ปิด yum ลบ openssh-server

ใช้ SSH เวอร์ชัน 2

โปรโตคอล SSH ของเวอร์ชันแรกมีปัญหาด้านความปลอดภัยที่ปิดในเวอร์ชันที่สอง ดังนั้นใช้รุ่นที่สอง ตรวจสอบให้แน่ใจว่าได้ระบุตัวเลือกโปรโตคอล 2 ในไฟล์ / etc / ssh / sshd_config

จำกัดการเข้าถึง SSH

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

อนุญาตให้ผู้ใช้รูทเครือข่ายเมเรียน

ในทางกลับกัน คุณสามารถให้สิทธิ์การเข้าถึงแก่ผู้ใช้ทั้งหมด ยกเว้นผู้ใช้ที่ระบุ:

DenyUsers รูทเครือข่ายเมเรียน

เวลาไม่ใช้งาน

สิ่งสำคัญคือต้องระบุเวลาที่เซสชันที่ไม่ใช้งานจะถูกยกเลิก (เสร็จสิ้น) สามารถทำได้ด้วยตัวเลือกต่อไปนี้:

ClientAliveInterval 300 ClientAliveCountMax 0

ในการตั้งค่านี้ เราได้ระบุเวลาที่ไม่ใช้งาน 300 วินาที (5 นาที)

เกี่ยวกับ .rhosts ไฟล์

ความจริงก็คือไฟล์นี้มีรายชื่อโฮสต์และผู้ใช้ หากไฟล์นี้มีการผสมผสานระหว่างโฮสต์และผู้ใช้ ผู้ใช้รายนี้จะสามารถเชื่อมต่อกับระบบผ่าน SSH โดยไม่ต้องถามรหัสผ่าน เราขอแนะนำให้ปิดใช้งานคุณลักษณะ "ยอดเยี่ยม" นี้:

IgnoreRhosts ใช่

ไม่มีการรับรองความถูกต้องตามโฮสต์!

ที่เรียกว่า การรับรองความถูกต้องตามโฮสต์อนุญาตให้ผู้ใช้จากโฮสต์เฉพาะเชื่อมต่อกับเซิร์ฟเวอร์ ปิดการใช้งาน:

HostbasedAuthentication no

การเชื่อมต่อรูทโดยตรง

PermitRootLogin no

รับทำแบนเนอร์

สำหรับการเชื่อมต่อแต่ละครั้ง ให้สร้างแบนเนอร์ที่คุณสามารถคุกคามผู้บุกรุกที่พยายามเข้าถึงโดยไม่ได้รับอนุญาต พารามิเตอร์ Banner มีหน้าที่ตั้งค่าแบนเนอร์

พอร์ต 22 จากภายในเท่านั้น!

ทำการเข้าถึงพอร์ต 22 ของระบบผ่านลูกข่ายกฎไฟร์วอลล์เท่านั้น เหนือสิ่งอื่นใด ให้ออกจากการเข้าถึงจากภายใน LAN เท่านั้น ตัวอย่างเช่น ใน Iptablesคุณสามารถให้การเข้าถึง 192.168.11.0/24:

A RH-Firewall-1-INPUT -s 192.168.11.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

ฟังได้ที่ไหน

ตามค่าเริ่มต้น SSH จะรับฟังการเชื่อมต่อบนอินเทอร์เฟซที่มีอยู่ทั้งหมด เราแนะนำให้เปลี่ยนพอร์ตเริ่มต้นและระบุที่อยู่ IP ที่คุณต้องการรอการเชื่อมต่อ ตัวอย่างเช่น เราจะระบุพอร์ต 962 และที่อยู่ IP 192.168.11.24

พอร์ต 962 ListenAddress 192.168.11.24

รหัสผ่านที่คาดเดาได้ยาก

ใช้รหัสผ่านที่รัดกุม มีเครื่องมือมากมายในเครือข่ายที่จะสร้างรหัสผ่านเข้ารหัสออนไลน์ได้ฟรีและไม่มี SMS :)

ปฏิเสธรหัสผ่านเปล่า

มีผู้ใช้ที่ไม่มีรหัสผ่าน การเข้าถึง SSH ของพวกเขาจะต้องถูกปฏิเสธโดยใช้ตัวเลือก:

พอร์ต 962 PermitEmptyPasswords no

วิเคราะห์บันทึก

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

LogLevel ข้อมูล

บทความนี้มีประโยชน์กับคุณหรือไม่?

บอกฉันทีว่าทำไม?

ขออภัยที่บทความนี้ไม่เป็นประโยชน์สำหรับคุณ: (ได้โปรด หากไม่ทำให้มันยาก โปรดระบุเหตุผล เราจะขอบคุณมากสำหรับคำตอบโดยละเอียด ขอขอบคุณที่ช่วยเราให้ดีขึ้น!

ในบทความนี้ เราจะมาดูวิธีการพื้นฐานในการปกป้อง SSH จาก มวลการโจมตีเดรัจฉาน ในกรณีนี้ การโจมตีแบบ Mass bruteforce ไม่ได้หมายถึงการโจมตีแบบ brute-force แบบกำหนดเป้าหมายบนรหัสผ่าน SSH ของคุณ แต่เป็นการยึดเซิร์ฟเวอร์จำนวนมาก เพื่อระบุตัวตนในภายหลังซึ่งไม่เสถียรกับการจับคู่รหัสผ่านสำหรับการเข้าสู่ระบบและรหัสผ่านแบบเดรัจฉาน

คุณสมบัติหลักของการโจมตี SSH bruteforce ขนาดใหญ่คือการสแกนช่วง IP อย่างกว้างขวางบนพอร์ตเปิด 22 และการใช้ชื่อผู้ใช้และรหัสผ่านซึ่งมักใช้ (เช่น root: passwd123, admin: server123 เป็นต้น)

ในการดูสถิติจากล็อกไฟล์ของการพยายามให้สิทธิ์ SSH บนเซิร์ฟเวอร์ของคุณไม่สำเร็จ ให้ป้อนคำสั่ง:

Cat / var / log / ปลอดภัย * | grep "รหัสผ่านล้มเหลว" | grep sshd | awk "(พิมพ์ $1, $2)" | sort -k 1,1M -k 2n | uniq -c

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

1. ถ้าคุณ ไม่ได้ใช้สำหรับการอนุญาต ชื่อผู้ใช้ที่ใช้กันทั่วไป เช่น รูท ผู้ดูแลระบบ ผู้ดูแลระบบ ผู้ใช้ ฯลฯ และใช้รหัสผ่านที่ซับซ้อนสำหรับการอนุญาต จากนั้นคุณสามารถไปยังจุดที่สองได้ทันที หากต้องการเปลี่ยนรหัสผ่านให้ซับซ้อนยิ่งขึ้น ให้ป้อนคำสั่ง:

รหัสผ่าน # your_login #

ที่ไหน # your_login #- ชื่อผู้ใช้ของคุณ
เมื่อป้อนรหัสผ่านใหม่ รหัสผ่านจะไม่ปรากฏ เคอร์เซอร์จะอยู่ในตำแหน่งเดียว

ไปที่เซิร์ฟเวอร์ผ่าน SSH สร้างผู้ใช้ใหม่และตั้งรหัสผ่านสำหรับสิ่งนี้เราป้อนคำสั่ง:

Adduser # ผู้ใช้ใหม่ # passwd # ผู้ใช้ใหม่ #

ที่ไหน # ผู้ใช้ใหม่ #- ชื่อผู้ใช้ใหม่ของคุณ อย่าใช้ชื่อผู้ใช้ที่ใช้กันทั่วไป ไม่ใช่ตัวเลือกที่ไม่ดี your_nickadmin(เช่น foxadmin, useralex, rootidler)

2. หลังจากนั้น ไปที่ SSH ด้วยชื่อผู้ใช้และรหัสผ่านใหม่ และเปิดการกำหนดค่า SSH daemon (sshd_config) ด้วยคำสั่ง:

Vi / etc / ssh / sshd_config

หลังจากนั้นคุณควรเห็นสิ่งนี้:

บรรทัดที่ขึ้นต้นด้วย # ถูกแสดงความคิดเห็นออกมา

ถึง ปกป้อง SSH จากเดรัจฉานขนาดใหญ่, ยกเลิกความคิดเห็นและเปลี่ยนหรือเพิ่มพารามิเตอร์ต่อไปนี้ ไฟล์:
NS) ท่า- ท่าเรือที่ SSHDยอมรับและการเชื่อมต่อบริการ Uncomment (ลบก่อนขึ้นต้นบรรทัด # ) และเปลี่ยนค่าเริ่มต้น 22 ไปยังพอร์ตอื่น ๆ ตั้งแต่ 1024 ถึง 65536 ยกเว้นที่สงวนไว้ - รายการพอร์ตที่สงวนไว้ ตัวอย่างเช่น:

พอร์ต 2022

ลบ # และเปลี่ยนค่า พอร์ต 22, กดบนแป้นพิมพ์ก่อน ผมหลังจากแก้ไขบรรทัดที่ต้องการแล้ว ให้กดปุ่ม NS

NS) เข้าสู่ระบบGraceTime- ระยะเวลารอการลงทะเบียนผู้ใช้ในระบบ หากผู้ใช้ไม่สามารถเข้าสู่ระบบภายในเวลาที่กำหนดโดยคำสั่งนี้ เซสชันจะสิ้นสุดลง มาลดค่านี้กัน:

เข้าสู่ระบบGraceTime 1m

NS) PermitRootLogin- อนุญาตให้ผู้ใช้ รากเข้าสู่ระบบผ่านโปรโตคอล SSH เปลี่ยนไป ไม่.

PermitRootLogin no

NS) อนุญาตให้ผู้ใช้- ชื่อผู้ใช้ที่อนุญาตให้เข้าสู่ระบบผ่านโปรโตคอล SSH คั่นด้วยช่องว่าง ที่นี่ แทนที่จะเป็น # your_login # เราระบุชื่อผู้ใช้ที่สร้างขึ้นใหม่

อนุญาตให้ผู้ใช้ # your_login #

จ) MaxAuthTries- จำนวนครั้งที่พยายามเข้าสู่ระบบในหนึ่งเซสชัน เมื่อถึงจำนวนครั้งสูงสุดที่อนุญาต เซสชันจะสิ้นสุดลง

MaxAuthTries 2

เป็นผลให้เราได้รับ:

พอร์ต 2022 LoginGraceTime 1m PermitRootLogin ไม่อนุญาตผู้ใช้ # your_login # MaxAuthTries 2

ในบทความนี้ เราจะดำเนินการตั้งค่าให้เสร็จสิ้น SSHเพื่อป้องกันมวล กำลังดุร้าย... หลังจากแก้ไข , กด บนแป้นพิมพ์ : , บรรทัดปรากฏขึ้นด้านล่างแล้วป้อนในนั้น wqและกดปุ่ม เข้า... ในกรณีนี้ การเปลี่ยนแปลงทั้งหมดจะถูกบันทึก

หากคุณทำอะไรผิดพลาด (เช่น คุณเผลอลบบางสิ่งไปโดยไม่ได้ตั้งใจ) ที่จะออกโดยไม่บันทึกใช้แทนแป้นพิมพ์ลัด wq, คีย์ NS!

หลังจากเสร็จสิ้นการกำหนดคอนฟิก SSH ให้รีสตาร์ท daemon ด้วยคำสั่ง:

บริการ sshd รีสตาร์ท

ตอนนี้เมื่อเชื่อมต่อผ่านโปรโตคอล SSH ให้ใช้พอร์ตใหม่ 2022 (หรือที่คุณระบุในการตั้งค่า) แทน พอร์ตมาตรฐาน 22.

ในบทความถัดไปเกี่ยวกับการตั้งค่า SSH ฉันอยากจะบอกคุณว่า ในขณะที่เราจะห้ามการให้สิทธิ์รหัสผ่านและอนุญาตการอนุญาตโดยใช้คีย์ SSH ส่วนตัวเท่านั้น ซึ่งจะเป็นการป้องกันตัวเองให้มากที่สุดจากการเดารหัสผ่าน

ติดต่อกับ