คำตอบสั้น ๆ: ติดตั้ง CrowdSec บน Linux Server เลือก collection สำหรับ SSH และ Nginx ติดตั้ง firewall bouncer ตั้ง allowlist จัดการ decision ด้วย cscli และเทียบกับ Fail2ban
คู่มือนี้อธิบาย CrowdSec ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
CrowdSec คือระบบป้องกันการโจมตีแบบโอเพนซอร์สที่อ่านล็อกของบริการบนเครื่อง เช่น SSH และ Nginx แล้วจับพฤติกรรมอันตรายอย่างการเดารหัสผ่านหรือการสแกนหาช่องโหว่ เมื่อพบจะสร้างคำตัดสิน (decision) ให้บล็อก IP นั้น และส่งให้ตัวบังคับใช้ที่เรียกว่า Remediation Component หรือ bouncer ไปบล็อกที่ไฟร์วอลล์ จุดที่ต่างจากเครื่องมือรุ่นเก่าคือ CrowdSec แชร์สัญญาณการโจมตีกับชุมชนผู้ใช้ และรับรายการ IP อันตรายกลับมาเป็น Community Blocklist ทำให้บล็อกผู้โจมตีบางรายได้ก่อนที่เขาจะมาถึงเครื่องคุณ
คู่มือนี้เหมาะกับผู้ดูแล Linux Server ที่เปิด SSH หรือเว็บสู่อินเทอร์เน็ต และต้องการลดบอตที่เดารหัสผ่านและสแกนเว็บ เมื่อทำครบ คุณจะติดตั้ง Security Engine เลือก collection ให้ตรงกับบริการ ติดตั้ง firewall bouncer ตั้ง allowlist กันตัวเองถูกบล็อก จัดการ decision ด้วย cscli และรู้ว่าควรใช้ CrowdSec แทนหรือคู่กับ Fail2ban
สิ่งที่ต้องเตรียม
- Ubuntu, Debian, AlmaLinux หรือ Rocky Linux ที่มีสิทธิ์ root หรือ sudo
- รายการบริการที่เปิดสู่อินเทอร์เน็ตและตำแหน่งล็อกของแต่ละบริการ เช่น
/var/log/nginx/access.log - IP สาธารณะของสำนักงานและเครื่องผู้ดูแล สำหรับใส่ allowlist ก่อนเปิดการบล็อก
- ทางเข้าสำรองอย่าง Console ผ่าน Web UI เผื่อ IP ของคุณถูกบล็อกระหว่างทดสอบ
- ตรวจว่าไม่มีบริการอื่นใช้พอร์ต
127.0.0.1:8080และ6060ซึ่ง CrowdSec ใช้เป็นค่าเริ่มต้น ด้วยsudo ss -ltnp | grep -E ':8080|:6060'
ขั้นตอนที่ 1: ติดตั้ง CrowdSec Security Engine
เพิ่มคลังแพ็กเกจของ CrowdSec ด้วยสคริปต์ทางการ แล้วติดตั้งแพ็กเกจหลัก เอกสารของ CrowdSec เตือนว่าแพ็กเกจรุ่น 1.4.6 ที่คลังของ Ubuntu บางรุ่นให้มานั้นเก่าเกินไป จึงต้องตรวจว่าติดตั้งจากคลังของ CrowdSec จริง
curl -s https://install.crowdsec.net | sudo sh
# Ubuntu / Debian
apt-cache policy crowdsec
sudo apt install crowdsec
# AlmaLinux / Rocky Linux
sudo dnf install crowdsec
ตรวจว่า Candidate ของ apt-cache policy มาจาก packagecloud.io และเวอร์ชันสูงกว่า 1.4.6 ตัวติดตั้งจะตรวจบริการที่มีในเครื่องและติดตั้ง collection ที่ตรงกันให้อัตโนมัติ เช่น crowdsecurity/linux และ crowdsecurity/sshd ขั้นตอนทั้งหมดอยู่ในเอกสาร Install CrowdSec on Linux
ณ จุดนี้ CrowdSec จับการโจมตีได้แล้ว แต่ ยังไม่บล็อกอะไร เพราะ Security Engine ทำหน้าที่ตรวจจับอย่างเดียว การบล็อกเป็นหน้าที่ของ bouncer ในขั้นตอนที่ 4
ขั้นตอนที่ 2: เลือก collection ให้ตรงกับบริการ
collection คือชุดของ parser ที่อ่านล็อกและ scenario ที่ตัดสินว่าพฤติกรรมใดเป็นการโจมตี ดูชุดที่ติดตั้งแล้ว และเพิ่มของ Nginx ถ้าเครื่องเป็นเว็บเซิร์ฟเวอร์
sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx
sudo systemctl reload crowdsec
collection ของ Nginx ดึง scenario สำหรับเว็บทั่วไปมาด้วย เช่น การสแกนหาไฟล์ผู้ดูแลหรือการไล่เปิด URL จำนวนมาก ถ้าเป็นเว็บ WordPress ให้เพิ่ม crowdsecurity/wordpress ด้วย ค้นชุดอื่นได้ด้วย sudo cscli collections list -a
ขั้นตอนที่ 3: ตรวจว่า CrowdSec อ่านล็อกได้จริง
ไฟล์ที่ CrowdSec อ่าน (acquisition) อยู่ใน /etc/crowdsec/acquis.yaml และโฟลเดอร์ /etc/crowdsec/acquis.d/ ถ้าตัวติดตั้งไม่พบล็อกของบริการใด ให้สร้างไฟล์เพิ่มเอง เช่น /etc/crowdsec/acquis.d/nginx.yaml
filenames:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
labels:
type: nginx
บนเครื่องที่ไม่มี /var/log/auth.log เพราะเก็บล็อกใน journald อย่างเดียว ให้อ่าน SSH จาก journal แทน โดยสร้าง /etc/crowdsec/acquis.d/sshd-journal.yaml (บน AlmaLinux ชื่อหน่วยคือ sshd.service)
source: journalctl
journalctl_filter:
- "_SYSTEMD_UNIT=ssh.service"
labels:
type: syslog
รีสตาร์ตด้วย sudo systemctl restart crowdsec แล้วดูตาราง Acquisition Metrics ใน sudo cscli metrics แต่ละแหล่งต้องมีตัวเลข Lines read และ Lines parsed เพิ่มขึ้น ถ้า Lines parsed เป็นศูนย์ทั้งที่ Lines read เพิ่ม แปลว่าป้ายชื่อ type ไม่ตรงกับ parser ที่ติดตั้งไว้
ขั้นตอนที่ 4: ติดตั้ง firewall bouncer
firewall bouncer ดึง decision จาก Local API ของ CrowdSec แล้วใส่ IP ลงชุดกฎของไฟร์วอลล์ในเครื่อง เลือกแบบที่ตรงกับไฟร์วอลล์ที่ใช้ บน Ubuntu และ Debian รุ่นใหม่แนะนำแบบ nftables
# Ubuntu / Debian
sudo apt install crowdsec-firewall-bouncer-nftables
# AlmaLinux / Rocky Linux
sudo dnf install crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list
sudo systemctl status crowdsec-firewall-bouncer --no-pager
ตัวติดตั้งลงทะเบียน bouncer กับ Local API ให้เอง cscli bouncers list ต้องแสดงชื่อ bouncer พร้อมเวลาดึงข้อมูลล่าสุด ถ้าบริการเริ่มไม่ได้และล็อกบอกว่าเชื่อมต่อ API ไม่ได้ ให้สร้างคีย์ใหม่ด้วย sudo cscli bouncers add firewall-bouncer นำคีย์ที่ได้ไปใส่ในบรรทัด api_key ของ /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml แล้วรีสตาร์ตบริการ ถ้าเครื่องใช้ UFW หรือ firewalld อยู่ด้วย bouncer จะทำงานคู่กันได้ ไม่ต้องปิดไฟร์วอลล์เดิม