วิธีรักษาความปลอดภัยเซิร์ฟเวอร์ Linux ของคุณด้วย fail2ban

เผยแพร่แล้ว: 2022-01-29
หน้าต่างเทอร์มินัลที่มีสไตล์ซึ่งทำงานบนแล็ปท็อป Linux สไตล์ Ubuntu
Fatmawati Achmad Zaenuri/Shutterstock

ด้วย fail2ban คอมพิวเตอร์ Linux ของคุณจะบล็อกที่อยู่ IP ที่มีความล้มเหลวในการเชื่อมต่อมากเกินไปโดยอัตโนมัติ เป็นการรักษาความปลอดภัยที่ควบคุมตนเอง! เราจะแสดงวิธีใช้งานให้คุณดู

ความปลอดภัย ความปลอดภัย ความปลอดภัย

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

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

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

วิธีเดียวที่สามารถทำได้ในทางปฏิบัติคือทำให้กระบวนการทั้งหมดเป็นไปโดยอัตโนมัติ ด้วยการกำหนดค่าที่เรียบง่ายเล็กน้อย fail2ban จะจัดการการตรวจสอบ การแบน และการเลิกแบนสำหรับคุณ

โฆษณา

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

แน่นอน หากคุณกังวลเกี่ยวกับความปลอดภัย คุณอาจมีไฟร์วอลล์ที่กำหนดค่าด้วยชุดกฎที่มีข้อมูลเพียงพอ fail2ban เพิ่มและลบกฎของตัวเองเท่านั้น ฟังก์ชันไฟร์วอลล์ปกติของคุณจะไม่ถูกแตะต้อง

เราสามารถเห็นชุดกฎที่ว่างเปล่าของเราโดยใช้คำสั่งนี้:

 sudo iptables -L 

ที่เกี่ยวข้อง: คู่มือเริ่มต้นสำหรับ iptables, Linux Firewall

การติดตั้ง fail2ban

การติดตั้ง fail2ban นั้นง่ายสำหรับการกระจายทั้งหมดที่เราใช้ในการวิจัยบทความนี้ บน Ubuntu 20.04 คำสั่งจะเป็นดังนี้:

 sudo apt-get ติดตั้ง fail2ban 

บน Fedora 32 พิมพ์:

 sudo dnf ติดตั้ง fail2ban 

บน Manjaro 20.0.1 เราใช้ pacman :

 sudo pacman -Sy fail2ban 

การกำหนดค่า fail2ban

การติดตั้ง fail2ban มีไฟล์การกำหนดค่าเริ่มต้นที่เรียกว่า jail.conf ไฟล์นี้จะถูกเขียนทับเมื่อมีการอัปเกรด fail2ban ดังนั้นเราจะสูญเสียการเปลี่ยนแปลงของเราหากเราทำการปรับแต่งไฟล์นี้

เราจะคัดลอกไฟล์ jail.conf ไปยังไฟล์ชื่อ jail.local แทน การเปลี่ยนแปลงการกำหนดค่าของเราใน jail.local จะคงอยู่ตลอดการอัปเกรด ไฟล์ทั้งสองจะถูกอ่านโดยอัตโนมัติโดย fail2ban

นี่คือวิธีการคัดลอกไฟล์:

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 

ตอนนี้เปิดไฟล์ในตัวแก้ไขที่คุณชื่นชอบ เราจะใช้ gedit :

 sudo gedit /etc/fail2ban/jail.local
โฆษณา

เราจะค้นหาสองส่วนในไฟล์: [ค่าเริ่มต้น] และ [sshd] ดูแลเพื่อค้นหาส่วนจริงแม้ว่า ป้ายกำกับเหล่านั้นยังปรากฏใกล้กับด้านบนสุดในส่วนที่อธิบายด้วย แต่นั่นไม่ใช่สิ่งที่เราต้องการ

/etc/fail2ban/jail.local เปิดในหน้าต่าง gedit

คุณจะพบส่วน [ค่าเริ่มต้น] อยู่ที่แถวๆ 40 ซึ่งเป็นส่วนยาวที่มีความคิดเห็นและคำอธิบายมากมาย

/etc/fail2ban/jail.local เปิดในหน้าต่าง gedit และเลื่อนไปที่บรรทัดที่ 89

เลื่อนลงไปประมาณบรรทัดที่ 90 และคุณจะพบกับการตั้งค่าสี่อย่างต่อไปนี้ที่คุณต้องรู้:

  • ละเว้น: รายการที่อนุญาตพิเศษของที่อยู่ IP ที่จะไม่มีวันถูกแบน พวกเขามีการ์ด Get Out of Jail Free ถาวร ที่อยู่ IP localhost ( 127.0.0.1 ) อยู่ในรายการโดยค่าเริ่มต้น พร้อมกับ IPv6 ที่เทียบเท่า ( ::1 ) หากมีที่อยู่ IP อื่นๆ ที่คุณรู้ว่าไม่ควรถูกแบน ให้เพิ่มในรายการนี้และเว้นช่องว่างระหว่างแต่ละที่อยู่
  • bantime: ระยะเวลาที่ที่อยู่ IP ถูกแบน (ตัว "m" หมายถึงนาที) หากคุณพิมพ์ค่าโดยไม่มี “m” หรือ “h” (เป็นชั่วโมง) จะถือว่าเป็นวินาที ค่า -1 จะแบนที่อยู่ IP อย่างถาวร ระวังอย่าปิดกั้นตัวเองอย่างถาวร
  • findtime: ระยะเวลาที่พยายามเชื่อมต่อที่ล้มเหลวหลายครั้งเกินไปจะทำให้ที่อยู่ IP ถูกแบน
  • maxretry: ค่าสำหรับ "ความพยายามที่ล้มเหลวมากเกินไป"

หากการเชื่อมต่อจากที่อยู่ IP เดียวกันทำให้ maxretry ล้มเหลวในการเชื่อมต่อภายในช่วงเวลาที่ findtime จะถูกแบนในช่วง bantime ข้อยกเว้นเพียงอย่างเดียวคือที่อยู่ IP ในรายการ ignoreip

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

คุณอาจเดาได้จากชื่อส่วน [ค่าเริ่มต้น] แต่การตั้งค่าที่เราตรวจสอบเป็นค่าเริ่มต้น ตอนนี้ มาดูการตั้งค่าสำหรับการคุมขัง SSH

ที่เกี่ยวข้อง: วิธีแก้ไขไฟล์ข้อความแบบกราฟิกบน Linux ด้วย gedit

การกำหนดค่าคุก

Jails ให้คุณย้ายประเภทการเชื่อมต่อเข้าและออกจากการตรวจสอบ fail2ban's หากการตั้งค่าเริ่มต้นไม่ตรงกับที่คุณต้องการใช้กับคุก คุณสามารถตั้งค่าเฉพาะสำหรับ bantime , findtime และ maxretry

โฆษณา

เลื่อนลงไปที่บรรทัดที่ 280 แล้วคุณจะเห็นส่วน [sshd]

/etc/fail2ban/jail.local เปิดในหน้าต่าง gedit และเลื่อนไปที่บรรทัดที่ 280

นี่คือที่ที่คุณสามารถตั้งค่าสำหรับคุกการเชื่อมต่อ SSH หากต้องการรวมคุกนี้ในการเฝ้าติดตามและแบน เราต้องพิมพ์บรรทัดต่อไปนี้:

 เปิดใช้งาน = จริง

เรายังพิมพ์บรรทัดนี้:

 maxretry = 3

การตั้งค่าเริ่มต้นคือห้า แต่เราต้องการให้ระมัดระวังในการเชื่อมต่อ SSH ให้มากขึ้น เราลดลงเหลือสาม จากนั้นบันทึกและปิดไฟล์

เราได้เพิ่มการคุมขังนี้ในการตรวจสอบ fail2ban's และแทนที่การตั้งค่าเริ่มต้นอย่างใดอย่างหนึ่ง คุกสามารถใช้การตั้งค่าเริ่มต้นและการตั้งค่าเฉพาะของคุกร่วมกันได้

เปิดใช้งาน fail2ban

จนถึงตอนนี้ เราได้ติดตั้ง fail2ban และกำหนดค่าแล้ว ตอนนี้ เราต้องเปิดใช้งานเพื่อให้ทำงานเป็นบริการเริ่มต้นอัตโนมัติ จากนั้นเราต้องทดสอบเพื่อให้แน่ใจว่าใช้งานได้ตามที่คาดไว้

โฆษณา

ในการเปิดใช้งาน fail2ban เป็นบริการ เราใช้คำสั่ง systemctl :

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

เรายังใช้เพื่อเริ่มบริการ:

 sudo systemctl start fail2ban 

เราสามารถตรวจสอบสถานะของบริการโดยใช้ systemctl ได้เช่นกัน:

 สถานะ sudo systemctl fail2ban.service 

ทุกอย่างดูดี—เรามีไฟเขียว ทุกอย่างก็เรียบร้อย

มาดูกันว่า fail2ban เห็นด้วยหรือไม่:

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

สิ่งนี้สะท้อนถึงสิ่งที่เราตั้งขึ้น เราได้เปิดใช้งานคุกเดียวชื่อ [sshd] หากเรารวมชื่อคุกไว้ในคำสั่งก่อนหน้านี้ เราสามารถเจาะลึกลงไปได้:

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

แสดงรายการจำนวนความล้มเหลวและที่อยู่ IP ที่ถูกแบน แน่นอนว่าสถิติทั้งหมดเป็นศูนย์ในขณะนี้

การทดสอบคุกของเรา

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

โฆษณา

ค่า maxretry จะทริกเกอร์หลังจากพยายามเชื่อมต่อล้มเหลวสามครั้ง ไม่ใช่พยายามใช้รหัสผ่านล้มเหลวสามครั้ง ดังนั้น เราต้องพิมพ์รหัสผ่านที่ไม่ถูกต้องสามครั้งเพื่อไม่ให้การเชื่อมต่อล้มเหลว

จากนั้นเราจะพยายามเชื่อมต่ออีกครั้งและพิมพ์รหัสผ่านไม่ถูกต้องอีกสามครั้ง การพยายามใช้รหัสผ่านที่ไม่ถูกต้องครั้งแรกของคำขอเชื่อมต่อที่สามควรทริกเกอร์ fail2ban.

หลังจากรหัสผ่านไม่ถูกต้องครั้งแรกในคำขอเชื่อมต่อครั้งที่สาม เราไม่ได้รับการตอบกลับจากเครื่องระยะไกล เราไม่ได้รับคำอธิบายใดๆ เราเพิ่งได้รับไหล่เย็น

คุณต้องกด Ctrl+C เพื่อกลับไปที่พรอมต์คำสั่ง หากเราลองอีกครั้ง เราจะได้คำตอบที่ต่างออกไป:

 ssh [email protected] 

ก่อนหน้านี้ ข้อความแสดงข้อผิดพลาดคือ "การอนุญาตถูกปฏิเสธ" คราวนี้ การเชื่อมต่อถูกปฏิเสธทันที เราเป็นคนไม่มีพรสวรรค์ เราถูกห้าม

ดูรายละเอียดของคุก [sshd] อีกครั้ง:

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

โฆษณา

มีความล้มเหลวสามครั้งและหนึ่งที่อยู่ IP (192.168.4.25) ถูกแบน

ดังที่เราได้กล่าวไว้ก่อนหน้านี้ fail2ban บังคับใช้การแบนโดยเพิ่มกฎให้กับชุดกฎของไฟร์วอลล์ ลองดูชุดกฎอีกครั้ง (ก่อนหน้านี้ว่างเปล่า):

 sudo iptables -L 

มีการเพิ่มกฎในนโยบาย INPUT โดยส่งทราฟฟิก SSH ไปยัง f2b-sshd กฎในสายโซ่ f2b-sshd ปฏิเสธการเชื่อมต่อ SSH จาก 192.168.4.25 เราไม่ได้เปลี่ยนการตั้งค่าเริ่มต้นสำหรับ bantime ดังนั้นใน 10 นาที ที่อยู่ IP นั้นจะถูกยกเลิกและสามารถส่งคำขอเชื่อมต่อใหม่ได้

หากคุณกำหนดระยะเวลาการแบนที่นานขึ้น (เช่น หลายชั่วโมง) แต่ต้องการให้ที่อยู่ IP ทำการร้องขอการเชื่อมต่ออื่นเร็วกว่านี้ คุณสามารถรอรับโทษก่อนได้

เราพิมพ์ข้อมูลต่อไปนี้เพื่อทำสิ่งนี้:

 sudo fail2ban-client ตั้งค่า sshd unbanip 192.168.5.25 

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

 ssh [email protected] 

เรียบง่ายและมีประสิทธิภาพ

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

ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ