ในการดูแล VPS Server เพื่อให้บริการเว็บไซต์ เว็บแอปพลิเคชัน หรือแอปพลิเคชันต่าง ๆ หนึ่งในปัญหาที่พบบ่อยคือ Bot หรือ Crawler ที่ไม่พึงประสงค์ (เช่น badbots หรือบ็อตอื่น ๆ) ที่เข้ามาสแกนหรือดึงข้อมูลจำนวนมาก ซึ่งอาจทำให้ทราฟฟิกสูงเกิน หรือตั้งใจจะโจมตีช่องโหว่ Server
Fail2Ban เป็นเครื่องมือ Open Source บนระบบลินุกซ์ (LINUX) ที่ช่วยป้องกันการโจมตี Brute Force หรือพฤติกรรมแปลกปลอมอื่น ๆ โดยตรวจสอบ Log File จากบริการต่าง ๆ และหากพบการกระทำที่เข้าข่ายการโจมตีหรือพฤติกรรมอันไม่พึงประสงค์ Fail2Ban จะเพิ่ม กฎ (rules) ลงใน Firewall (iptables หรือ nftables) เพื่อ บล็อก IP ต้นทางชั่วระยะเวลาหนึ่ง
Fail2Ban เป็นซอฟต์แวร์ที่ทำงานอยู่บนเซิร์ฟเวอร์ลินุกซ์ ทำหน้าที่ตรวจจับรูปแบบการเชื่อมต่อที่เป็นอันตรายจาก Log Files ของบริการต่าง ๆ เช่น Apache, Nginx, SSH, FTP เป็นต้น เมื่อตรวจพบ IP ที่เข้ามาเรียกซ้ำผิดปกติหรือพยายาม Brute Force ระบบได้กำหนดเงื่อนไขว่าพบกี่ครั้งในระยะเวลาเท่าไร จึงจะทำการแบน IP นั้น ๆ ซึ่งการแบนจะเป็นการเพิ่มกฎลงใน iptables (หรือ firewalld, nftables แล้วแต่ระบบ) เพื่อปิดกั้นการเข้าถึงจาก IP นั้น
• บล็อกการเดารหัสผ่าน SSH
• บล็อก Bots ที่สแกนหรือ DDoS Web Server (เว็บเซิร์ฟเวอร์)
• บล็อก Bots ที่เข้ามาเกินกว่าที่กำหนด เช่น Badbots , WP-cron, xmlrpc, Amazonbot, Bytespider, GPTBot ฯลฯ
• ลดภาระบน VPS Cloud Server : เมื่อมีการบล็อก IP อันตราย หรือ Bots Flood เข้ามามาก ๆ จะช่วยลดทรัพยากร CPU, RAM ของเซิร์ฟเวอร์
• ป้องกัน Brute Force : ทั้ง SSH, FTP, Web Login, API ฯลฯ
• ปรับแต่งง่าย : สามารถเขียน filter และ jail เพื่อจับรูปแบบใน Log ได้หลากหลาย
• ติดตั้ง และบริหารง่าย : ใช้งานผ่านไฟล์คอนฟิกหลัก jail.local และสั่งงานผ่าน fail2ban-client
• บน Debian/Ubuntu :
sudo apt-get update
sudo apt-get install fail2ban
• บน CentOS/RHEL :
sudo yum install epel-release
sudo yum install fail2ban
• จากนั้นตรวจสอบ/สั่งเริ่ม :
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
• Filters : กฎ Regex จับข้อความใน Log เพื่อตรวจว่ากำลังถูกโจมตี หรือมีพฤติกรรมไม่พึงประสงค์
• Jails : ส่วนกำหนดค่า จะอ่าน Log ไหน ใช้ Filter อะไร เงื่อนไข Ban (maxretry, findtime, bantime) เป็นเท่าไร
• Actions : เมื่อจับได้แล้วจะทำอย่างไร เช่น บล็อกด้วย iptables, ip6tables หรือส่งอีเมลแจ้งเตือน ฯลฯ
• ไฟล์คอนฟิกหลัก : /etc/fail2ban/jail.conf และ /etc/fail2ban/jail.local (ควรแก้ใน jail.local เป็นหลัก เพื่อรักษา config ยาม Fail2Ban อัปเดต)
• ตัวอย่างส่วน DEFAULT :
[DEFAULT]
bantime = 12h ; บล็อก IP 12 ชั่วโมง
findtime = 1h ; ตรวจย้อนภายใน 1 ชั่วโมง
maxretry = 5 ; ถ้าเจอ 5 ครั้งใน 1 ชั่วโมง => บล็อก
ignoreip = 127.0.0.1/8 ::1 [ไอพีที่ไม่บล็อก]
banaction = iptables-multiport
• จากนั้นสามารถเพิ่ม Jail ต่าง ๆ เช่น
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
ตัวอย่างนี้ ถ้าล็อกอิน SSH ผิดเกิน 3 ครั้งใน 1 ชั่วโมง จะโดนบล็อก IP
ตัวอย่างการตั้งค่า Fail2Ban เพื่อบล็อก Amazonbot สร้าง Filter สำหรับ Amazonbot
• สร้างไฟล์ /etc/fail2ban/filter.d/apache-amazonbot.conf
[Definition]
failregex = ^ - .*"(GET|POST|HEAD) [^"]*" [0-9]{3} [0-9-]+ "[^"]*" ".*Amazonbot.*"
ignoreregex =
failregex ระบุว่าถ้าเจอ "Amazonbot" ใน User-Agent => จัดเป็นการละเมิด
• เพิ่ม Jail ใหม่ใน jail.local
[apache-amazonbot]
enabled = true
port = http,https
filter = apache-amazonbot
logpath = /var/log/httpd/access.log
bantime = 1d
findtime = 10
maxretry = 1
อธิบาย :
maxretry = 1 หมายถึง เจอ 1 ครั้งก็ แบน/บล็อค
findtime = 10 ตรวจสอบย้อน 10 วินาที (หรือตั้งเป็น 1 ชั่วโมงเพราะ maxretry=1 จะจับครั้งแรกทันทีเมื่อเชื่อมต่อเข้ามา)
bantime = 1d บล็อก IP เป็นเวลา 1 วัน
• รีโหลด Fail2Ban
sudo systemctl restart fail2ban
# หรือ
sudo fail2ban-client reload
หลังจากนี้ ทุกครั้งที่ Log พบ User-Agent มีคำว่า Amazonbot IP จะโดนบล็อก (ผ่าน iptables) 1 วัน
• การตั้งค่าเพิ่มเติม รูปแบบอื่นในการ บล็อกบอท/หยุดบอท ไม่พึงประสงค์
Rewrite Rule / User-Agent Block ที่ระดับ Web Server (Apache, Nginx) ใน .htaccess (Apache) :
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Amazonbot [NC]
RewriteRule ^.* - [F,L]
การจัดการกับ Bots และ Brute Force Attacks
ไม่ใช้ Fail2Ban :
• ต้องบล็อก IP หรือเพิ่มกฎไฟร์วอลล์ด้วยมือ (Manual) ทุกครั้งที่เกิดการโจมตี
• ใช้เวลา และความพยายามสูงในการตรวจจับ จัดการการโจมตี
ใช้ Fail2Ban :
• Fail2Ban ทำงานอัตโนมัติโดยตรวจจับพฤติกรรมที่เข้าข่าย Brute Force และบล็อก IP ตามค่าที่กำหนด (เช่น maxretry และ findtime) ช่วยลดภาระของผู้ดูแลระบบ
การใช้ทรัพยากร (CPU/RAM)
ไม่ใช้ Fail2Ban :
• VPS อาจใช้ทรัพยากรสูง โดยเฉพาะในกรณีที่มีบ็อต หรือการโจมตีแบบ Flooding จำนวนมาก
• Log ของระบบจะถูกเขียนเพิ่มขึ้นอย่างรวดเร็ว ทำให้ต้องใช้พื้นที่จัดเก็บมากขึ้น
ใช้ Fail2Ban :
• Fail2Ban จะบล็อก IP ที่ไม่พึงประสงค์ได้ทันที ลดการใช้ทรัพยากรในระยะยาว
• Log line เก่าจะถูกลบ/หมุนเวียนไป ลดการใช้พื้นที่จัดเก็บ
*ความสะดวกในการตั้งค่า และการใช้งาน
ไม่ใช้ Fail2Ban :
• Admin ต้องเขียนสคริปต์ หรือปรับแต่งไฟล์ iptables ด้วยตัวเอง
• อาจเกิดความผิดพลาดในระหว่างการตั้งค่าหรือการจัดการ
ใช้ Fail2Ban :
• การตั้งค่าทำได้ง่ายผ่านไฟล์คอนฟิก เช่น jail.local และไฟล์ในโฟลเดอร์ filter.d
• Fail2Ban จะเพิ่มกฎไฟร์วอลล์ (iptables) ให้เองโดยอิงจาก Regex ที่กำหนด
ความยืดหยุ่นในการป้องกัน และอัปเดต
ไม่ใช้ Fail2Ban :
• ต้องเขียนกฎ iptables หลายข้อเพื่อจัดการกับรูปแบบการโจมตีต่าง ๆ
• หากมีการอัปเดต หรือเปลี่ยนแปลง ต้องจัดการกฎเหล่านั้นใหม่เอง
ใช้ Fail2Ban :
• มีระบบ Regex ที่สามารถปรับแต่งให้รองรับการป้องกันที่หลากหลาย
• รองรับการอัปเดต และขยายการป้องกันโดยง่าย
• ลด Downtime ของเว็บไซต์ เมื่อ Cloud Server (VPS) ถูกโจมตีโดย Brute Force หรือ Flooding Attack ที่ไม่ได้รับการจัดการ อาจทำให้เซิร์ฟเวอร์ล่ม (Downtime) ซึ่งส่งผลเสียต่อ SEO โดยตรง เพราะ Google จะลดคะแนนเว็บไซต์ที่มีการล่มบ่อย
• เพิ่มความเร็วเว็บไซต์ (Page Load Speed) การลดภาระของ CPU/RAM จากการโจมตีที่ไม่ได้รับการจัดการช่วยเพิ่มความเร็วในการโหลดเว็บไซต์ ซึ่งเป็นหนึ่งในปัจจัยสำคัญที่ Google ใช้จัดอันดับ SEO
• ป้องกันการโจมตีที่อาจฝังมัลแวร์ (Malware) หากไม่มีการป้องกัน และเซิร์ฟเวอร์ถูกแฮก มัลแวร์ที่ถูกฝังในเว็บไซต์อาจถูก Google มองว่าเป็นเว็บไซต์อันตราย (Malicious Site) และลดอันดับใน SEO
• รักษาประสบการณ์ผู้ใช้งาน (User Experience) เว็บไซต์ที่ถูกโจมตี และโหลดช้าจะทำให้ผู้ใช้งานออกจากเว็บไซต์เร็ว (Bounce Rate สูง) ซึ่งส่งผลลบต่อ SEO
• ช่วยลดปัญหา IP Blacklist หากไม่มีระบบป้องกันที่ดี IP ของ Cloud Server (VPS) อาจถูกขึ้นบัญชีดำในฐานะต้นทางของการโจมตี ทำให้เสียคะแนนใน SEO โดยรวม
Fail2Ban ช่วยยกระดับความปลอดภัยให้ Cloud Server (VPS) คลาวด์เซิร์ฟเวอร์ส่วนตัว บนลินุกซ์ได้อย่างมาก ไม่ว่าจะเป็นการป้องกัน Brute Force Login หรือการบล็อกบ็อตไม่พึงประสงค์อย่าง “Badbots” ก็ตาม เพียงปรับแต่ง Jail/Filter ให้เหมาะสม และตรวจสอบ Log อย่างสม่ำเสมอ ก็สามารถใช้งาน Cloud Server (VPS) ได้อย่างประสิทธิภาพ และสบายใจมากขึ้น!
กรณีศึกษา : บริษัท eCommerce ขนาดกลาง - "ABC Store"
ปัญหา :
เว็บไซต์ของ ABC Store ซึ่งโฮสต์อยู่บน Cloud Server (VPS) ถูกโจมตีจาก Bots และ Brute Force Attacks เป็นประจำ ทำให้ทราฟฟิกบนเซิร์ฟเวอร์เพิ่มสูงขึ้นโดยไม่มีเหตุผล เซิร์ฟเวอร์โหลดช้า บางครั้งเว็บไซต์ล่มในช่วงเวลาที่มีทราฟฟิกสูง Google ลดคะแนน SEO เนื่องจาก Downtime และความช้าในการโหลดหน้าเว็บไซต์ ส่งผลต่อยอดขาย
• ติดตั้ง และตั้งค่า Fail2Ban บน Cloud Server (VPS) ของ ABC Store พร้อมปรับแต่ง Jail และ Filter เพื่อบล็อก Brute Force Attacks และ Badbots
• ตั้งค่า Log Monitoring เพื่อวิเคราะห์พฤติกรรม Bots และปรับแต่ง Regex Filter อย่างละเอียด
• ตั้งค่า Firewall ด้วย iptables ควบคู่กับ Fail2Ban
• เพิ่ม IP Whitelisting สำหรับทีมงาน และระบบ API ของ ABC Store
• Optimize Web Server (Apache/Nginx) ให้รองรับทราฟฟิกสูง
• ติดตั้ง และปรับแต่งระบบ Caching
AFRA APACHE (อาฟร่า อาปาเช่ ประเทศไทย) ช่วยเสริมความปลอดภัย และลดภาระการทำงานของเซิร์ฟเวอร์อย่างมีประสิทธิภาพ
• บริการติดตั้ง Fail2Ban เพื่อบล็อก Brute Force Attacks, Bots Flood, และ Badbots
• บริการตั้งค่า และดูแล Cloud Server (VPS) ตรวจสอบ และตั้งค่า Log Files เพื่อช่วยป้องกันการโจมตีแบบแปลกปลอม
• บริการแก้ไขปัญหา VPS Server และดูแลเซิร์ฟเวอร์ (Managed Service) ปรับแต่งเซิร์ฟเวอร์ให้มีประสิทธิภาพสูงสุด (Performance Optimization)
• บริการติดตั้งระบบ Linux เช่น Ubuntu, AlmaLinux , Debian พร้อมตั้งค่าความปลอดภัยเบื้องต้น
• บริการติดตั้ง Web Server เช่น Apache, Nginx และการตั้งค่าเฉพาะทาง