คำตอบสั้น ๆ: ติดตั้ง Fail2ban บน Ubuntu และ AlmaLinux/Rocky ตั้งค่า Jail sshd ให้แบน IP ที่เดารหัสผ่านซ้ำ ตรวจรายชื่อ IP ที่ถูกแบน และปลดแบนเมื่อบล็อกผิดตัว
คู่มือนี้อธิบาย Fail2ban ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
Fail2ban เป็นโปรแกรมที่คอยอ่าน Log ของบริการต่าง ๆ เมื่อพบ IP ใดเข้าสู่ระบบผิดซ้ำหลายครั้งในช่วงเวลาสั้น ๆ จะสั่ง Firewall ให้บล็อก IP นั้นชั่วคราวโดยอัตโนมัติ เหมาะกับเซิร์ฟเวอร์ที่เปิด SSH สู่อินเทอร์เน็ต ซึ่งมักถูกบอตสุ่มเดารหัสผ่านอยู่ตลอดเวลา
Fail2ban ช่วยลดภาระและลดความเสี่ยง แต่ไม่ได้แทนการใช้ SSH Key ควรใช้ทั้งสองอย่างร่วมกัน คู่มือนี้ใช้ได้กับ Ubuntu 22.04/24.04 และ AlmaLinux/Rocky Linux 8-9
สิ่งที่ต้องเตรียม
- สิทธิ์ root หรือผู้ใช้ที่ใช้
sudoได้ - Firewall ที่ทำงานอยู่ ได้แก่ UFW บน Ubuntu หรือ firewalld บน AlmaLinux/Rocky (Fail2ban บน Ubuntu ใช้ iptables/nftables ได้โดยตรงแม้ไม่ได้เปิด UFW)
- IP สาธารณะของสำนักงานหรือบ้านคุณ เพื่อใส่เป็นข้อยกเว้นไม่ให้ตัวเองถูกแบน ดูได้จากเว็บไซต์ตรวจ IP หรือจากคำสั่ง
whoบนเซิร์ฟเวอร์ขณะเชื่อมต่ออยู่
ขั้นตอนที่ 1: ติดตั้ง Fail2ban
Ubuntu
sudo apt update
sudo apt install -y fail2ban python3-systemd
python3-systemd ทำให้ Fail2ban อ่าน Log จาก systemd journal ได้โดยตรง ซึ่งเชื่อถือได้กว่าการอ่านไฟล์ Log
AlmaLinux / Rocky Linux
Fail2ban อยู่ใน Repository EPEL ต้องเปิด EPEL ก่อน
sudo dnf install -y epel-release
sudo dnf install -y fail2ban
แพ็กเกจนี้ติดตั้ง fail2ban-firewalld มาด้วย ซึ่งตั้งให้ Fail2ban สั่งบล็อกผ่าน firewalld โดยอัตโนมัติ (ดูได้ที่ /etc/fail2ban/jail.d/00-firewalld.conf)
ขั้นตอนที่ 2: สร้างไฟล์ตั้งค่า jail.local
ห้ามแก้ไฟล์ /etc/fail2ban/jail.conf โดยตรง เพราะจะถูกเขียนทับเมื่ออัปเดตแพ็กเกจ ให้สร้างไฟล์ jail.local ซึ่งจะถูกอ่านทับค่าใน jail.conf
sudo nano /etc/fail2ban/jail.local
ใส่ค่าต่อไปนี้ เปลี่ยน 198.51.100.25 เป็น IP ของคุณ (ใส่ได้หลาย IP คั่นด้วยช่องว่าง)
[DEFAULT]
# IP ที่จะไม่ถูกแบนเด็ดขาด
ignoreip = 127.0.0.1/8 ::1 198.51.100.25
# แบนนาน 1 ชั่วโมง
bantime = 1h
# นับจำนวนครั้งที่ผิดภายในช่วง 10 นาที
findtime = 10m
# ผิดครบ 5 ครั้งจึงแบน
maxretry = 5
[sshd]
enabled = true
port = ssh
backend = systemd
ความหมายของค่าหลัก
| ค่า | ความหมาย |
|---|---|
bantime | ระยะเวลาที่ IP ถูกบล็อก ใช้หน่วย m, h, d ได้ ค่า -1 คือแบนถาวร (ไม่แนะนำ) |
findtime | ช่วงเวลาที่ใช้นับจำนวนครั้งที่ผิด |
maxretry | จำนวนครั้งที่ผิดภายใน findtime ก่อนถูกแบน |
port | Port ที่จะบล็อกสำหรับ IP ที่ถูกแบน ssh หมายถึง 22 |
ถ้าคุณเปลี่ยน SSH Port แล้ว ให้ใส่เลข Port จริง เช่น port = 2222 มิฉะนั้น Fail2ban จะบล็อกที่ Port 22 ซึ่งไม่ได้ใช้ และผู้โจมตียังเข้ามาที่ Port ใหม่ได้
ขั้นตอนที่ 3: ตรวจไฟล์และเริ่มใช้งาน
ตรวจไวยากรณ์ของไฟล์ตั้งค่าทั้งหมดก่อน
sudo fail2ban-client -t
ถ้าถูกต้องจะได้ข้อความ OK: configuration test is successful จากนั้นเปิดใช้งานและตั้งให้เริ่มเมื่อบูต
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
ใช้ restart ด้วยเพื่อให้ค่าใน jail.local มีผล ในกรณีที่แพ็กเกจเริ่ม Service ไปแล้วตั้งแต่ติดตั้ง