ค้นหาเว็บไซต์

วิธีใช้ 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 – ส่งออกข้อมูลใด ๆ
    • STDERR – ส่งออกข้อผิดพลาดใดๆ
    • SYSLOG – การบันทึกตามข้อความ
    • ไฟล์ – ส่งออกไปยังไฟล์
  • socket – ไดเรกทอรีที่จะวางไฟล์ซ็อกเก็ต
  • pidfile – ตำแหน่งของ pidfile

กำหนดค่า 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 ของคุณ ต้องใช้เวลาพอสมควรในการทำความคุ้นเคยกับการตั้งค่าและไวยากรณ์ แต่เมื่อคุณคุ้นเคยแล้ว คุณจะรู้สึกอิสระที่จะเปลี่ยนแปลงและขยายกฎของมัน