Fail2Ban
Fail2Ban เป็นโปรแกรมด้าน Security สำหรับ Linux ที่ช่วยป้องกันการโจมตีแบบ Brute Force หรือการพยายาม Login ซ้ำ ๆ โดยไม่สำเร็จ เช่น บอทที่คอยสุ่ม Username/Password เพื่อพยายามเข้า SSH, Database หรือ Service อื่น ๆ ที่เปิดให้เข้าถึงจาก Network
หลักการทำงานของ Fail2Ban
flowchart LR
A[อ่าน Log] --> B[ตรวจจับ<br/>พฤติกรรมผิดปกติ] --> C[Ban IP<br/>ชั่วคราว]
ตัวอย่างการทำงาน
Section titled “ตัวอย่างการทำงาน”ก่อนติดตั้ง Fail2Ban
Hacker ยังสุ่มได้ไม่จำกัด และทุกครั้งที่ login ผิด ระบบก็แค่บันทึก log ไว้เฉย ๆ ไม่ได้ป้องกันอะไร
หลังติดตั้ง Fail2Ban
Hacker พยายาม Login SSH ผิดครบ 3 ครั้ง ภายใน 10 นาที ระบบจะ Block IP นั้นทันที 24 ชั่วโมง
Installation
Section titled “Installation”# ติดตั้งsudo apt-get install fail2ban -y
# ตรวจสอบสถานะsudo systemctl status fail2ban
# เปิดใช้งานและให้เริ่มอัตโนมัติตอน bootsudo systemctl enable --now fail2ban
# ตรวจสอบเวอร์ชันfail2ban-client versionตั้งค่า SSH
Section titled “ตั้งค่า SSH”โดย default จะมีการตั้งค่า jail sshd ไว้อยู่แล้ว แต่ควรปรับแต่งเพิ่ม เปิดไฟล์ด้วยคำสั่ง:
nano /etc/fail2ban/jail.d/defaults-debian.confใส่ config ดังนี้:
[sshd]enabled = truemaxretry = 3findtime = 10mbantime = 24hreload config และตรวจสอบค่า:
# reload configsudo fail2ban-client reload
# เช็คว่า bantime ถูกอัพเดทหรือยัง (ต้องขึ้น 86,400 = 24 ชั่วโมง)sudo fail2ban-client get sshd bantimeConfig
Section titled “Config”โดยทั่วไปไฟล์ config จะอยู่ใน /etc/fail2ban/
โครงสร้างไฟล์
Section titled “โครงสร้างไฟล์”| ไฟล์/Path | ความหมาย |
|---|---|
fail2ban.conf | config หลักของ daemon |
jail.conf | config ตัวอย่างของ jail (ไม่ควรแก้ไฟล์นี้โดยตรง) |
jail.d/*.conf | ไฟล์ override config ของ jail ที่จะถูก merge เข้ากับ jail.conf |
filter.d/*.conf | regex สำหรับ parse log แต่ละ service |
action.d/*.conf | action ที่ใช้ตอน ban เช่น iptables, route |
ความหมายของ property หลัก
Section titled “ความหมายของ property หลัก”| Property | ความหมาย |
|---|---|
enabled | เปิด/ปิดการทำงานของ jail |
maxretry | จำนวนครั้งที่ login ผิดได้ก่อนโดน ban |
findtime | ช่วงเวลาที่ใช้นับ (เช่น 10m, 1h) |
bantime | ระยะเวลาที่ ban (เช่น 24h, 1d) |
port | port ที่ jail ดูแล |
logpath | path ของ log ที่จะอ่าน |
filter | ชื่อ filter (regex) ที่ใช้ parse log |
คำสั่งที่ใช้บ่อย
Section titled “คำสั่งที่ใช้บ่อย”# 1. ดูว่ามี Jail อะไรทำงานอยู่sudo fail2ban-client status
# 2. ดูรายละเอียดของ jail (เช่น sshd)sudo fail2ban-client status sshd
# 3. ดู IP ที่โดน bansudo fail2ban-client get sshd banip
# 4. ปลด bansudo fail2ban-client set sshd unbanip 49.22.177.139
# 5. ban IP เองsudo fail2ban-client set sshd banip 49.22.177.139
# 6. ดู log สดsudo tail -f /var/log/fail2ban.log
# 7. ตรวจสอบ config ว่าถูกไหมsudo fail2ban-client -t
# 8. reload หลังแก้ configsudo fail2ban-client reloadคำสั่ง Get config
Section titled “คำสั่ง Get config”# ดูค่า config ของ jailsudo fail2ban-client get <jail> <property>
# จำนวนครั้งที่ login ผิดได้sudo fail2ban-client get sshd maxretry
# เวลาที่ ban (วินาที)sudo fail2ban-client get sshd bantime
# ช่วงเวลาที่ใช้นับ (วินาที)sudo fail2ban-client get sshd findtimeตัวอย่าง Jail อื่น ๆ
Section titled “ตัวอย่าง Jail อื่น ๆ”นอกจาก sshd สามารถเปิด jail อื่น ๆ เพิ่มได้ เช่น:
[sshd]enabled = truemaxretry = 3findtime = 10mbantime = 24h
[nginx-http-auth]enabled = truemaxretry = 5findtime = 10mbantime = 1h
[postgresql]enabled = truemaxretry = 5findtime = 10mbantime = 24hport = 5432logpath = /var/log/postgresql/postgresql-*-main.logถ้าต้อง whitelist IP บางตัวไม่ให้โดน ban (เช่น IP ของทีม) สามารถเพิ่ม
ignoreipใน jail config ได้
[DEFAULT]ignoreip = 127.0.0.1/8 192.168.1.0/24
[sshd]enabled = truemaxretry = 3findtime = 10mbantime = 24h