Security
Fail2Ban เนี่ย สมัยผมทำร้านเน็ตก็ใช้ประจำ คอยแบน IP ที่พยายาม Brute-Force เข้า SSH หรือ FTP แต่ยุคสมัยมันเปลี่ยนไปแล้วพี่น้อง แฮกเกอร์มันฉลาดขึ้นเยอะ Fail2Ban อาจจะเอาไม่อยู่ CrowdSec เลยเข้ามาตอบโจทย์ตรงนี้แหละ
CrowdSec มันไม่ใช่แค่ Fail2Ban เวอร์ชั่นอัพเกรด แต่มันเป็นการปฏิวัติวงการ Security เลยก็ว่าได้ เพราะมันใช้หลักการ Crowd-Sourced Threat Intelligence คือช่วยกันดู ช่วยกันแบน ทำให้เราป้องกันภัยคุกคามได้เร็วกว่าและครอบคลุมกว่า
CrowdSec คือ Open-Source Intrusion Prevention System (IPS) ที่ทำงานโดยการวิเคราะห์ Log Files จาก Server หรือ Application ต่างๆ ถ้าเจอพฤติกรรมที่น่าสงสัย เช่น พยายาม Login ผิดหลายครั้ง หรือ Scan Port ก็จะแบน IP นั้นทันที
แต่สิ่งที่ทำให้ CrowdSec เหนือกว่า Fail2Ban คือมันจะแชร์ข้อมูล IP ที่ถูกแบนไปยัง Community ทำให้ทุกคนที่ใช้ CrowdSec ได้รับการป้องกันจาก IP อันตรายเหล่านั้นไปด้วย นี่แหละคือพลังของ Crowd-Sourced Threat Intelligence
ทำไมต้องใช้ CrowdSec?
สมัยผมทำร้านเน็ต โดน Hack บ่อยมาก ถ้ามี CrowdSec ตั้งแต่ตอนนั้น คงสบายไปเยอะ SiamCafe Blog มีบทความเก่าๆ เรื่อง Security เพียบ ลองไปอ่านดูได้
การติดตั้ง CrowdSec ไม่ยากอย่างที่คิด ผมจะสอนแบบ Step-by-Step เลยนะ
ก่อนอื่นต้องติดตั้ง CrowdSec Agent ก่อน ซึ่งวิธีการติดตั้งจะแตกต่างกันไปตาม OS ที่เราใช้
สำหรับ Debian/Ubuntu:
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script_deb.sh | sudo bash
sudo apt-get update
sudo apt-get install crowdsec
สำหรับ CentOS/RHEL:
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script_rpm.sh | sudo bash
sudo yum install crowdsec
หลังจากติดตั้งเสร็จแล้ว ให้ Start CrowdSec Agent:
sudo systemctl start crowdsec
sudo systemctl enable crowdsec
CrowdSec มาพร้อมกับ Default Configuration ที่ใช้งานได้เลย แต่เราสามารถปรับแต่งให้เหมาะกับความต้องการของเราได้
Configuration Files จะอยู่ที่ /etc/crowdsec/
สิ่งที่ควร Config:
ตัวอย่างการ Config Scenario เพื่อ Detect Brute-Force Attack บน SSH:
# /etc/crowdsec/scenarios/ssh-bf.yaml
name: crowdsecurity/ssh-bf
description: Detect SSH Brute-Force Attacks
filter: |
evt.Parsed.program == 'sshd' AND
evt.Parsed.message contains 'Failed password for invalid user' OR
evt.Parsed.message contains 'Failed password for'
expression: "evt.Meta.log_type == 'ssh'"
duration: 5m
threshold: 5
Scenario นี้จะ Detect เมื่อมี Login ผิดพลาดบน SSH เกิน 5 ครั้ง ภายใน 5 นาที
Bouncer คือตัวที่ทำหน้าที่ Block IP ที่ถูกแบนโดย CrowdSec มี Bouncer ให้เลือกใช้หลายแบบ เช่น:
ตัวอย่างการติดตั้ง cs-firewall-bouncer:
sudo apt-get install crowdsec-firewall-bouncer # Debian/Ubuntu
sudo yum install crowdsec-firewall-bouncer # CentOS/RHEL
หลังจากติดตั้งแล้ว ให้ Config Bouncer ให้เชื่อมต่อกับ CrowdSec Agent:
sudo cscli bouncers add firewall
Bouncer จะสร้าง API Key ให้เรา นำ Key นี้ไปใส่ใน Configuration File ของ Bouncer
เพื่อให้เห็นภาพชัดเจน ผมทำตารางเปรียบเทียบ CrowdSec กับ Fail2Ban ให้ดู:
| คุณสมบัติ | Fail2Ban | CrowdSec |
|---|---|---|
| Threat Intelligence | Local | Crowd-Sourced |
| Detection | Rule-Based | Rule-Based + Machine Learning |
| Scalability | Limited | High |
| Community Support | Good | Excellent |
| Complexity | Simple | Moderate |
จากตารางจะเห็นว่า CrowdSec เหนือกว่า Fail2Ban ในหลายๆ ด้าน แต่ก็มีความซับซ้อนในการ Config มากกว่า SiamCafe Blog มีบทความเปรียบเทียบ Tools Security อีกเยอะ ลองเข้าไปดู
ดูวิดีโอเพิ่มเติมเกี่ยวกับCrowdSec ทางเลือกแทน Fail2Ban:
หลายคนอาจจะมีคำถามเกี่ยวกับ CrowdSec ผมรวบรวมคำถามที่พบบ่อยมาตอบให้แล้ว:
CrowdSec เป็น Open-Source Software 100% ฟรี ไม่มีค่าใช้จ่ายแอบแฝง แต่ถ้าอยากได้ Support หรือ Features เพิ่มเติม ก็มี Version Enterprise ให้ใช้
CrowdSec ถูกออกแบบมาให้กิน Resource น้อยมาก ไม่ส่งผลกระทบต่อ Performance ของ Server
CrowdSec ได้รับการพัฒนาโดยทีมงานที่มีประสบการณ์ และมีการตรวจสอบ Security อย่างสม่ำเสมอ มั่นใจได้ว่าปลอดภัยแน่นอน
CrowdSec สามารถใช้กับ Application ได้หลากหลาย ไม่ว่าจะเป็น Web Server, Database Server, Email Server หรือแม้แต่ Custom Application ที่เราพัฒนาเอง
หวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนนะครับ ถ้ามีคำถามเพิ่มเติม ถามมาได้เลย ผมยินดีตอบ
สมัยผมทำร้านเน็ต ผมจะแยกเครื่อง Server กับเครื่อง Client ชัดเจน CrowdSec ก็เหมือนกัน ถ้าเป็นไปได้ รันบน Server แยกไปเลย จะได้ไม่กิน Resource เครื่อง Web Server หลักของเรา
ถ้าจำเป็นต้องรันบนเครื่องเดียวกัน ก็ต้อง Monitor Resource ดีๆ นะครับ CPU, RAM, Disk I/O ต้องดูให้ดี
CrowdSec มัน Detect อะไรหลายอย่าง บางทีมันอาจจะ Alert เยอะเกินไป เราต้องปรับ Threshold ให้เหมาะสมกับ Environment ของเรา
เช่น ถ้า Web Server เรามี API Endpoint ที่คนเรียกบ่อยๆ เราอาจจะต้องเพิ่ม Threshold ของ API Endpoint นั้นๆ
CrowdSec มันช่วยเรา Block IP ที่น่าสงสัย แต่เราก็ต้อง Monitor Logs ของมันด้วยนะครับ ว่ามัน Block อะไรไปบ้าง
เคยเจอเคสที่ CrowdSec Block IP ของ Google Bot ไป เพราะ Google Bot มัน Crawl เว็บเราเร็วเกินไป เราก็ต้อง Whitelist IP ของ Google Bot
เหมือน Software ทั่วไป CrowdSec ก็ต้องอัพเดทอยู่เรื่อยๆ เพื่อให้มัน Detect Attack ใหม่ๆ ได้
Scenarios ก็สำคัญ ต้องอัพเดท Scenarios ให้ทันสมัยอยู่เสมอ จะได้ Detect Attack ใหม่ๆ ได้แม่นยำ
CrowdSec Open Source ส่วนใหญ่ฟรีครับ แต่ก็มี Features บางอย่างที่ต้องจ่ายเงิน เช่น CrowdSec Console ที่เป็น Cloud-Based Management Platform
แต่ถ้าใช้แค่ Command Line Interface (CLI) ก็เพียงพอแล้วสำหรับใช้งานทั่วไป
ขึ้นอยู่กับการ Config ครับ ถ้า Config ดีๆ ก็ไม่กิน Resource เยอะเท่าไหร่ แต่ถ้าเปิดทุกอย่างหมด ก็อาจจะกิน Resource พอสมควร
สมัยผมทำร้านเน็ต ผมจะ Monitor Resource ตลอดเวลา ถ้าเครื่องไหนกิน Resource เยอะเกินไป ก็ต้องปรับ Config หรือ Upgrade Hardware
Fail2Ban ทำงานบน Local Server เท่านั้น แต่ CrowdSec สามารถแชร์ข้อมูล Threat Intelligence กับ Community ได้
CrowdSec ฉลาดกว่า Fail2Ban ตรงที่มันใช้ Behavior Detection ในการ Detect Attack ไม่ใช่แค่ Rule-Based Detection
สนใจลงทุน Forex ลองดู iCafeForex นะครับ
CrowdSec รองรับ Web Server หลักๆ ทุกตัวครับ เช่น Apache, Nginx, Caddy
นอกจาก Web Server แล้ว CrowdSec ยังรองรับ Application อื่นๆ อีกมากมาย เช่น SSH, FTP, MySQL
CrowdSec เป็นทางเลือกที่ดีสำหรับ Fail2Ban ถ้าคุณต้องการ Security ที่ฉลาดกว่า และสามารถแชร์ข้อมูล Threat Intelligence กับ Community ได้
CrowdSec อาจจะ Config ยากกว่า Fail2Ban นิดหน่อย แต่ถ้า Setup เสร็จแล้ว มันจะช่วยปกป้อง Web Server ของคุณได้ดีมากๆ
ลองไปศึกษาเพิ่มเติมได้ที่ SiamCafe Blog นะครับ มีบทความ IT ดีๆ อีกเยอะเลย