Security
เฮ้! น้องๆ เคยเจอปัญหาคนพยายามแฮ็กเซิร์ฟเวอร์เราไหม? ไอ้พวก Brute Force ที่มันสุ่มรหัสผ่านไปเรื่อยๆ นั่นแหละ น่ารำคาญสุดๆ สมัยผมทำร้านเน็ต SiamCafe เมื่อก่อน เจอบ่อยมาก พวกเด็กๆ อยากลองวิชา (ฮา) แต่ตอนนี้มันร้ายแรงกว่านั้นเยอะ ต้องป้องกันไว้ก่อน
Fail2Ban เนี่ยแหละ คือพระเอกของเรา มันเป็นเครื่องมือที่ช่วยบล็อก IP address ของคนที่พยายามเข้าถึงระบบของเราแบบผิดๆ เช่น พยายามล็อกอินผิดๆ ซ้ำๆ หรือพยายามสแกนพอร์ต
ลองคิดดูสิ ถ้ามีคนพยายามล็อกอิน SSH เข้าเซิร์ฟเวอร์เราแบบผิดๆ วันละเป็นพันๆ ครั้ง มันเปลืองทรัพยากรเซิร์ฟเวอร์นะ แถมยังเสี่ยงโดนแฮ็กอีกด้วย Fail2Ban จะช่วยลดภาระของเซิร์ฟเวอร์ และเพิ่มความปลอดภัยโดยการบล็อก IP ของคนเหล่านั้นอัตโนมัติ
เมื่อก่อนผมต้องมานั่งดู log file เอง แล้วก็ block IP เองทีละ IP โคตรเสียเวลา! พอมี Fail2Ban ชีวิตดีขึ้นเยอะ SiamCafe Blog มีบทความเก่าๆ ที่ผมเคยเขียนเรื่องความปลอดภัยอยู่ ลองไปอ่านดูได้
Fail2Ban ทำงานโดยการตรวจสอบ log file ของบริการต่างๆ ที่เราต้องการป้องกัน (เช่น SSH, Apache, Nginx) แล้วมองหารูปแบบการโจมตีที่กำหนดไว้ล่วงหน้า (เช่น พยายามล็อกอินผิดๆ ซ้ำๆ) ถ้าเจอก็จะทำการบล็อก IP address ที่ก่อเหตุ
สมมติว่าเราต้องการป้องกัน SSH Brute Force Fail2Ban จะตรวจสอบ log file ของ SSH (/var/log/auth.log หรือ /var/log/secure) แล้วมองหาข้อความที่บ่งบอกว่ามีคนพยายามล็อกอินผิดๆ ถ้า Fail2Ban เจอว่ามี IP address พยายามล็อกอินผิดๆ เกิน 3 ครั้งภายใน 10 นาที มันก็จะบล็อก IP address นั้นด้วย iptables เป็นเวลา 1 ชั่วโมง
มาลงมือทำกันเลย! ผมจะสอนวิธีการติดตั้งและตั้งค่า Fail2Ban แบบง่ายๆ
บน Debian/Ubuntu:
sudo apt update
sudo apt install fail2ban
บน CentOS/RHEL:
sudo yum install epel-release
sudo yum install fail2ban
ไฟล์ configuration หลักของ Fail2Ban คือ /etc/fail2ban/jail.conf แต่เราไม่ควรแก้ไขไฟล์นี้โดยตรง เพราะมันจะถูกเขียนทับเมื่อมีการอัปเดต Fail2Ban ให้สร้างไฟล์ /etc/fail2ban/jail.local แทน
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
ในไฟล์ /etc/fail2ban/jail.local เราสามารถกำหนดค่าต่างๆ ได้ เช่น
ตัวอย่างการตั้งค่าสำหรับ SSH:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 3600
findtime = 600
maxretry = 3
อธิบาย:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
sudo fail2ban-client status sshd
คำสั่งนี้จะแสดงข้อมูลเกี่ยวกับ Jail "sshd" เช่น จำนวน IP address ที่ถูกบล็อก
หลายคนอาจจะสงสัยว่า Fail2Ban กับ Firewall ต่างกันยังไง? มาดูตารางเปรียบเทียบกัน
| คุณสมบัติ | Fail2Ban | Firewall |
|---|---|---|
| หน้าที่หลัก | ป้องกัน Brute Force Attack | ควบคุมการเข้าถึง network |
| วิธีการทำงาน | วิเคราะห์ log file และบล็อก IP address ที่น่าสงสัย | อนุญาตหรือปฏิเสธ traffic ตามกฎที่กำหนดไว้ |
| ระดับการป้องกัน | Application Level (เช่น SSH, Apache) | Network Level |
| การตั้งค่า | ซับซ้อนกว่า ต้องกำหนด Filter และ Jail | ง่ายกว่า สามารถกำหนดกฎได้โดยตรง |
สรุปคือ Firewall ทำหน้าที่เหมือนยามเฝ้าประตูใหญ่ คอยตรวจสอบว่าใครได้รับอนุญาตให้เข้าบ้าน ส่วน Fail2Ban ทำหน้าที่เหมือนตำรวจที่คอยจับโจรที่พยายามงัดแงะประตูบ้าน
SiamCafe Blog ยังมีบทความเปรียบเทียบเครื่องมือ security อีกหลายตัว ลองอ่านดูนะดูวิดีโอเพิ่มเติมเกี่ยวกับFail2Ban ป้องกัน Brute Force:
ไม่เยอะครับ Fail2Ban ถูกออกแบบมาให้ใช้ทรัพยากรอย่างมีประสิทธิภาพ มันจะทำงานเมื่อมีการล็อกอินผิดพลาดเท่านั้น ไม่ได้ทำงานตลอดเวลา
Fail2Ban ไม่ได้ถูกออกแบบมาเพื่อป้องกัน DDoS โดยตรง แต่มันสามารถช่วยลดผลกระทบของ DDoS ได้บ้าง โดยการบล็อก IP address ที่ส่ง traffic มากเกินไป
Fail2Ban ถูกออกแบบมาสำหรับ Linux แต่ก็มี alternatives สำหรับ Windows เช่น Win2Ban
อันนี้เบสิคเลยน้อง! สมัยผมทำร้านเน็ต เคยเจอเด็กตั้ง password เป็น "123456" หรือ "password" คือแบบ...เอิ่มมมมม ไม่ไหวๆ สอนมันไปเลย ตั้งให้ยากๆ ตัวเลข ตัวอักษรพิเศษ จัดเต็ม
พวก SSH (port 22) หรือ RDP (port 3389) เนี่ย Hacker มันสแกนหาอยู่แล้ว เปลี่ยนไปเป็น port อื่นที่มัน random ยากๆ ซะ
# /etc/ssh/sshd_config
Port 22222
แล้วอย่าลืมเปิด firewall ให้ port ใหม่ด้วยนะ
ถ้าเรารู้ว่า IP ไหนที่ต้องเข้ามาใช้ server เราแน่ๆ (เช่น IP ออฟฟิศ) ก็ whitelist ไปเลย จะได้ไม่ต้องโดน Fail2Ban บล็อค
# /etc/fail2ban/jail.local
[sshd]
ignoreip = 192.168.1.0/24, 10.0.0.0/16
Fail2Ban มันช่วยป้องกัน แต่เราก็ต้องคอยส่อง logs ดูด้วย ว่ามีอะไรผิดปกติไหม มีใครพยายาม brute force เยอะผิดปกติหรือเปล่า จะได้แก้ไขทัน
ไม่เยอะครับน้อง! มันทำงานเบื้องหลังเงียบๆ แต่ถ้า server น้อง resource น้อยมากๆ ก็อาจจะต้องปรับแต่ง config นิดหน่อย ให้มันทำงานเบาลง
เคยเจอเคสนี้บ่อย! เด็กที่ร้าน login ผิดๆ ถูกๆ จนโดนบล็อค IP ตัวเอง วิธีแก้คือ
fail2ban-client set sshd unbanip <IP ที่โดนบล็อค>Fail2Ban ไม่ได้ออกแบบมาเพื่อป้องกัน DDoS โดยตรง แต่มันสามารถช่วยลดผลกระทบได้บ้าง โดยการบล็อค IP ที่พยายามยิง traffic เข้ามาเยอะๆ แต่ถ้าโดน DDoS จริงๆ ต้องใช้พวก DDoS protection services นะครับ
ทำได้ครับ แต่ไม่แนะนำ! เพราะถ้า block ถาวร แล้ว IP นั้นเป็น IP จริงๆ ที่ user ใช้งานอยู่ จะทำให้ user นั้นเข้าใช้งานไม่ได้เลย ควรตั้งเวลา ban ให้เหมาะสมดีกว่า
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = -1 ; // -1 คือ ban ถาวร
แวะชม iCafeForex นะน้องๆ
Fail2Ban เป็นเครื่องมือที่ช่วยป้องกัน brute force attack ได้ดีมากๆ แต่ก็ต้องตั้งค่าให้เหมาะสม และ monitor logs อย่างสม่ำเสมอ อย่าลืมเรื่อง password ที่แข็งแรง และเปลี่ยน default port ด้วยนะครับ น้องๆคนไหนอยากอ่านเรื่อง IT สนุกๆ แวะไปที่ SiamCafe Blog ได้เลย