วิธีใช้ Fail2ban เพื่อรักษาความปลอดภัยเซิร์ฟเวอร์ Linux ของคุณ
การปรับปรุงความปลอดภัยของเซิร์ฟเวอร์ของคุณควรเป็นหนึ่งในความสำคัญสูงสุดของคุณในการจัดการเซิร์ฟเวอร์ linux เมื่อตรวจสอบบันทึกเซิร์ฟเวอร์ของคุณ คุณอาจพบว่ามีความพยายามที่แตกต่างกันในการเข้าสู่ระบบแบบ Brute Force, การฟลัดเว็บไซต์, การค้นหาช่องโหว่ และอื่นๆ อีกมากมาย
ด้วยซอฟต์แวร์ป้องกันการบุกรุกเช่น fail2ban คุณสามารถตรวจสอบบันทึกของเซิร์ฟเวอร์และเพิ่มกฎ iptables พิเศษเพื่อบล็อกที่อยู่ IP ที่เป็นปัญหา
อ่านเพิ่มเติม: วิธีการติดตั้ง Fail2Ban เพื่อปกป้อง SSH บน CentOS/RHEL 8
บทช่วยสอนนี้จะแสดงวิธีการติดตั้ง fail2ban และตั้งค่าการกำหนดค่าพื้นฐานเพื่อปกป้องระบบ Linux ของคุณจากการโจมตีแบบ brute-force
ความต้องการ
Fail2ban เขียนด้วยภาษา python และข้อกำหนดเพียงอย่างเดียวคือต้องติดตั้ง python:
- Fail2ban สาขา 0.9.x ต้องใช้ Python >=2.6 หรือ Python >=3.2
- สาขา Fail2ban 0.8.x ต้องใช้ Python >=2.4
- การเข้าถึงรูทระบบของคุณ
- ทางเลือก iptables หรือ showewall และ sendmail
วิธีการติดตั้ง Fail2Ban ในระบบ Linux
การติดตั้ง fail2ban นั้นค่อนข้างง่าย:
ติดตั้ง Fail2Ban บน CentOS/RHEL
ขั้นแรก อัปเดตแพ็คเกจของคุณ เปิดใช้งานพื้นที่เก็บข้อมูล Epel และติดตั้ง fail2ban ตามที่แสดง
yum update
yum install epel-release
yum install fail2ban
ติดตั้ง Fail2Ban บน Debian/Ubuntu
ขั้นแรก อัปเดตแพ็คเกจของคุณและติดตั้ง fail2ban ตามที่แสดง
apt-get update && apt-get upgrade -y
apt-get install fail2ban
หรือหากคุณต้องการเปิดใช้งานการสนับสนุนเมล (สำหรับการแจ้งเตือนเมล) คุณสามารถติดตั้ง sendmail ได้
yum install sendmail [On CentOS/RHEL]
apt-get install sendmail-bin sendmail [On Debian/Ubuntu]
หากต้องการเปิดใช้งาน fail2ban และ sendmail ให้ใช้คำสั่งต่อไปนี้:
systemctl start fail2ban
systemctl enable fail2ban
systemctl start sendmail
systemctl enable sendmail
วิธีกำหนดค่า Fail2ban ในระบบ Linux
ตามค่าเริ่มต้น fail2ban จะใช้ไฟล์ .conf
ที่อยู่ใน /etc/fail2ban/ ซึ่งจะถูกอ่านก่อน อย่างไรก็ตาม สิ่งเหล่านี้สามารถแทนที่ได้ด้วยไฟล์ .local
ที่อยู่ในไดเร็กทอรีเดียวกัน
ดังนั้น ไฟล์ .local
จึงไม่จำเป็นต้องรวมการตั้งค่าทั้งหมดจากไฟล์ .conf
แต่รวมเฉพาะการตั้งค่าที่คุณต้องการแทนที่เท่านั้น ควรทำการเปลี่ยนแปลงในไฟล์ .local
ไม่ใช่ใน .conf
วิธีนี้จะป้องกันการเขียนทับการเปลี่ยนแปลงเมื่ออัปเกรดแพ็กเก็ต Fail2ban
เพื่อวัตถุประสงค์ของบทช่วยสอนนี้ เราจะคัดลอกไฟล์ fail2ban.conf ที่มีอยู่ไปที่ fail2ban.local
cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
ตอนนี้คุณสามารถทำการเปลี่ยนแปลงในไฟล์ .local
ได้โดยใช้โปรแกรมแก้ไขข้อความที่คุณชื่นชอบ ค่าที่คุณสามารถแก้ไขได้คือ:
ระดับบันทึก – นี่คือระดับรายละเอียดที่จะบันทึก ตัวเลือกที่เป็นไปได้คือ:
- วิกฤต
- ข้อผิดพลาด
- คำเตือน
- สังเกต
- ข้อมูล
- ดีบัก
logtarget – บันทึกการดำเนินการในไฟล์เฉพาะ ค่าเริ่มต้นคือ /var/log/fail2ban.log อย่างไรก็ตาม คุณสามารถเปลี่ยนสิ่งนี้เป็น:
- STDOUT – ส่งออกข้อมูลใด ๆ
กำหนดค่า Fail2ban Jail.local
ไฟล์ที่สำคัญที่สุดไฟล์หนึ่งใน Fail2ban คือ jail.conf
ซึ่งกำหนดคุกของคุณ นี่คือที่ที่คุณกำหนดบริการที่ควรเปิดใช้งาน Fail2ban
ดังที่เราได้กล่าวไว้ก่อนหน้านี้ว่าไฟล์ .conf
สามารถเปลี่ยนแปลงได้ในระหว่างการอัปเกรด ดังนั้นคุณควรสร้างไฟล์ jail.local ซึ่งคุณสามารถใช้การแก้ไขของคุณได้
อีกวิธีในการทำเช่นนี้คือการคัดลอกไฟล์ .conf ด้วย:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
ในกรณีที่คุณใช้ CentOS หรือ Fedora คุณจะต้องเปลี่ยน แบ็กเอนด์ ใน jail.local จาก “อัตโนมัติ ” ถึง “systemd ”
หากคุณใช้ Ubuntu/Debian ก็ไม่จำเป็นต้องทำการแก้ไขนี้ แม้ว่าจะใช้ systemd ก็ตาม
ไฟล์คุกจะเปิดใช้งาน SSH ตามค่าเริ่มต้นสำหรับ Debian และ Ubuntu แต่ไม่ใช่บน CentOS หากคุณต้องการเปิดใช้งาน เพียงเปลี่ยนบรรทัดต่อไปนี้ใน /etc/fail2ban/jail.local:
[sshd]
enabled = true
แบนและลองอีกครั้งครั้ง
คุณสามารถกำหนดค่าสถานการณ์หลังจากที่ที่อยู่ IP ถูกบล็อกได้ เพื่อจุดประสงค์นั้น fail2ban จะใช้ bantime, findtime และ maxretry
- bantime – นี่คือจำนวนวินาทีที่ที่อยู่ IP จะยังคงถูกแบน (ค่าเริ่มต้น 10 นาที)
- findtime – ระยะเวลาระหว่างการพยายามเข้าสู่ระบบ ก่อนที่โฮสต์จะถูกแบน (ค่าเริ่มต้น 10 นาที) กล่าวอีกนัยหนึ่ง หากfail2banถูกตั้งค่าให้บล็อกที่อยู่ IP หลังจากพยายามเข้าสู่ระบบล้มเหลว 3 ครั้ง ความพยายาม 3 เหล่านั้นจะต้องดำเนินการภายในระยะเวลาการค้นหา (10< /แข็งแกร่ง> นาที)
- maxretry – จำนวนความพยายามก่อนที่จะมีการแบน (ค่าเริ่มต้น 3)
ไวท์ลิสต์ที่อยู่ IP
แน่นอนว่าคุณจะต้องการไวท์ลิสต์ที่อยู่ IP บางอย่าง หากต้องการกำหนดค่าที่อยู่ IP ดังกล่าว ให้เปิด /etc/fail2ban/jail.local ด้วยโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ และยกเลิกการใส่เครื่องหมายความคิดเห็นในบรรทัดต่อไปนี้:
ignoreip = 127.0.0.1/8 ::1
จากนั้นคุณสามารถใส่ที่อยู่ IP ที่คุณต้องการละเว้นได้ ที่อยู่ IP ควรแยกออกจากช่องว่างหรือลูกน้ำ
การแจ้งเตือนทางอีเมล
หากคุณต้องการรับการแจ้งเตือนทางอีเมลเมื่อมีเหตุการณ์ คุณจะต้องกำหนดการตั้งค่าต่อไปนี้ใน /etc/fail2ban/jail.local:
- destemail – ที่อยู่อีเมลที่คุณจะได้รับการแจ้งเตือน
- ชื่อผู้ส่ง – ผู้ส่งที่คุณจะเห็นเมื่อได้รับข้อความ
- ผู้ส่ง – ที่อยู่อีเมลที่ failed2ban จะส่งอีเมล
ค่าเริ่มต้น mta (ตัวแทนการโอนจดหมาย) ถูกตั้งค่าเป็น ส่งจดหมาย
หากต้องการรับการแจ้งเตือนทางอีเมล คุณจะต้องเปลี่ยนการตั้งค่า “การกระทำ ” จาก:
Action = %(action_)s
ไปที่หนึ่งในรายการเหล่านี้:
action = %(action_mw)s
action = %(action_mwl)s
- %(action_mw)s – จะแบนโฮสต์และส่งอีเมลพร้อมรายงาน whois
- %(action_mwl)s – จะแบนโฮสต์ ให้ข้อมูล whois และข้อมูลที่เกี่ยวข้องทั้งหมดจากไฟล์บันทึก
การกำหนดค่า Fail2ban Jail เพิ่มเติม
จนถึงตอนนี้เราได้ดูตัวเลือกการกำหนดค่าพื้นฐานแล้ว หากคุณต้องการกำหนดค่าคุก คุณจะต้องเปิดใช้งานในไฟล์ jail.local ไวยากรณ์ค่อนข้างง่าย:
[jail_to_enable]
. . .
enabled = true
โดยที่คุณควรแทนที่ jail_to_enable ด้วยคุกจริง เช่น “sshd ” ในไฟล์ jail.local ค่าต่อไปนี้จะถูกกำหนดไว้ล่วงหน้าสำหรับบริการ ssh:
[sshd]
port = ssh
logpath = %(sshd_log)s
คุณสามารถเปิดใช้งานตัวกรองซึ่งจะช่วยระบุว่าบรรทัดในบันทึกเป็นบรรทัดที่ล้มเหลวหรือไม่ ค่าตัวกรองจริงๆ แล้วเป็นการอ้างอิงไปยังไฟล์ที่มีชื่อบริการตามด้วย .conf ตัวอย่างเช่น: /etc/fail2ban/filter.d/sshd.conf
ไวยากรณ์คือ:
filter = service
ตัวอย่างเช่น:
filter = sshd
คุณสามารถตรวจสอบตัวกรองที่มีอยู่ในไดเรกทอรีต่อไปนี้: /etc/fail2ban/filter.d/
ใช้ Fail2ban-client
Fail2ban มาพร้อมกับไคลเอนต์ที่สามารถใช้เพื่อตรวจสอบและเปลี่ยนแปลงการกำหนดค่าปัจจุบัน เนื่องจากมีตัวเลือกมากมาย คุณจึงสามารถอ่านคู่มือได้โดย:
man fail2ban-client
ที่นี่คุณจะเห็นคำสั่งพื้นฐานบางส่วนที่คุณสามารถใช้ได้ หากต้องการตรวจสอบสถานะปัจจุบันของ fail2ban หรือการจำคุกโดยเฉพาะ คุณสามารถใช้:
fail2ban-client status
ผลลัพธ์จะมีลักษณะคล้ายกับสิ่งนี้:
สำหรับคุกส่วนบุคคล คุณสามารถเรียกใช้:
fail2ban-client status sshd
ในภาพหน้าจอด้านล่าง คุณจะเห็นว่าฉันจงใจล้มเหลวในการเข้าสู่ระบบหลายครั้ง ดังนั้น Fail2ban จึงสามารถบล็อกที่อยู่ IP ที่ฉันพยายามเชื่อมต่อได้:
บทสรุป
Fail2ban เป็นระบบป้องกันการบุกรุกที่ยอดเยี่ยมและมีเอกสารครบถ้วน ซึ่งช่วยเพิ่มความปลอดภัยให้กับระบบ Linux ของคุณ ต้องใช้เวลาพอสมควรในการทำความคุ้นเคยกับการตั้งค่าและไวยากรณ์ แต่เมื่อคุณคุ้นเคยแล้ว คุณจะรู้สึกอิสระที่จะเปลี่ยนแปลงและขยายกฎของมัน