สารบัญ
UFW คืออะไร และทำไมต้องใช้ Firewall บน VPS
UFW (Uncomplicated Firewall) คือ frontend ของ iptables ที่มาพร้อมกับ Ubuntu ช่วยให้ผู้ดูแลระบบสามารถตั้งค่า firewall ได้ง่ายขึ้น โดยไม่ต้องเขียน syntax iptables ที่ซับซ้อน
VPS ที่เชื่อมต่ออินเทอร์เน็ตโดยตรงนั้นเสี่ยงต่อการถูกโจมตีในรูปแบบต่างๆ ทุกนาที ไม่ว่าจะเป็น SSH brute force, port scanning, หรือการพยายามเข้าถึง service ที่ไม่ควรเปิดให้สาธารณะ Firewall ทำหน้าที่เป็น "ประตูกรอง" ตรวจสอบทุก packet ที่เข้า-ออก VPS ของคุณ
💡 ข้อเท็จจริง: VPS ที่ไม่มี Firewall มักถูก scan port ภายในไม่กี่นาทีหลังจาก deploy หากมี service ที่ vulnerable เปิดอยู่ อาจถูกโจมตีได้ทันที
UFW เหมาะสำหรับ:
- ผู้ดูแล VPS ที่ต้องการ firewall ง่ายๆ ไม่ซับซ้อน
- เซิร์ฟเวอร์ Ubuntu / Debian ทุกเวอร์ชัน
- การตั้งค่าขั้นพื้นฐาน–กลาง ก่อนใช้ solution ที่ซับซ้อนกว่า
- ใช้ร่วมกับ Fail2Ban เพื่อความปลอดภัยที่ดีขึ้น
ข้อกำหนดเบื้องต้นก่อนตั้งค่า UFW
ก่อนเริ่ม ตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้ครบ:
- VPS Ubuntu 20.04 / 22.04 / 24.04 (หรือ Debian 10+)
- สิทธิ์ root หรือ sudo user
- SSH session ที่เชื่อมต่ออยู่
- ทราบ port ที่ SSH ใช้งาน (ค่าเริ่มต้น 22)
⚠️ สำคัญมาก: ก่อนเปิด UFW ต้อง allow port SSH ก่อนเสมอ มิเช่นนั้นหลังเปิด UFW คุณจะเชื่อมต่อ SSH ใหม่ไม่ได้ และต้องใช้ Console ของ provider เข้าแก้ไข
ตรวจสอบสถานะและเปิดใช้งาน UFW
ตรวจสอบว่า UFW ถูกติดตั้งและสถานะปัจจุบัน:
sudo apt update sudo apt install ufw -y # ตรวจสอบสถานะ sudo ufw status verbose
ถ้า UFW ยังไม่ได้ enable จะแสดง Status: inactive ให้ตั้งค่าพื้นฐานก่อนเปิดใช้งาน
ℹ️ Ubuntu 20.04+ มี UFW ติดตั้งมาให้แล้วโดยค่าเริ่มต้น ไม่ต้องติดตั้งเพิ่ม
ตั้งค่า Default Policy ของ UFW
Default policy กำหนดพฤติกรรมเริ่มต้นของ firewall ก่อนที่จะมี rule เฉพาะ แนวทางที่ดีที่สุดคือ "deny all incoming, allow all outgoing":
# บล็อก incoming ทั้งหมดโดยค่าเริ่มต้น sudo ufw default deny incoming # อนุญาต outgoing ทั้งหมด (VPS ส่งออกได้อิสระ) sudo ufw default allow outgoing
นี่คือหลักการ "whitelist" ซึ่งมีความปลอดภัยสูงกว่าการ allow ทุกอย่างแล้วค่อยบล็อกทีหลัง
เปิด Port ที่จำเป็น (SSH, HTTP, HTTPS)
หลังตั้ง default deny แล้ว ต้องเปิด port ที่จำเป็นก่อน เปิด UFW เสมอ:
# SSH (สำคัญมาก — ต้องทำก่อน ufw enable) sudo ufw allow ssh # หรือระบุ port ตรงๆ sudo ufw allow 22/tcp # Web server sudo ufw allow http sudo ufw allow https # เท่ากับ sudo ufw allow 80/tcp sudo ufw allow 443/tcp # ถ้า SSH ใช้ port อื่น เช่น 2222 sudo ufw allow 2222/tcp # เปิดใช้งาน UFW (หลัง allow SSH แล้วเท่านั้น) sudo ufw enable
หลังรัน ufw enable ระบบจะถามยืนยัน ตอบ y เพื่อเปิดใช้งาน
ตรวจสอบและจัดการ Rules ของ UFW
ดู rules ที่มีอยู่ทั้งหมดพร้อมหมายเลข (มีประโยชน์เมื่อต้องการลบ rule เฉพาะ):
# ดู rules แบบง่าย sudo ufw status # ดูแบบละเอียดพร้อม numbered sudo ufw status numbered # ลบ rule ตามหมายเลข (เช่น ลบ rule #3) sudo ufw delete 3 # ลบ rule ตามชื่อ sudo ufw delete allow 8080/tcp
ℹ️ การลบ rule ด้วย ufw delete allow จะลบทั้ง IPv4 และ IPv6 พร้อมกัน
บล็อก IP ที่น่าสงสัยด้วย UFW
ถ้าพบ IP ที่พยายาม scan หรือโจมตีซ้ำๆ สามารถบล็อกได้ทันที:
# บล็อก IP เดี่ยว sudo ufw deny from 192.168.1.100 # บล็อกทั้ง subnet sudo ufw deny from 10.20.0.0/16 # บล็อก IP ไม่ให้เข้า port เฉพาะ sudo ufw deny from 203.0.113.1 to any port 22 # ดู IP ที่ถูกบล็อก sudo ufw status | grep DENY
Rules แบบ deny จะถูก evaluate ก่อน rules แบบ allow ที่เพิ่มทีหลัง ดังนั้นเมื่อบล็อก IP ไว้แล้ว มีผลทันที
ตั้งค่า Rate Limiting ด้วย UFW
UFW มี built-in rate limiting ที่ช่วยป้องกัน brute force โดยไม่ต้องติดตั้ง Fail2Ban เพิ่ม:
# จำกัด connection rate บน SSH sudo ufw limit ssh # หรือ sudo ufw limit 22/tcp
การ limit จะบล็อก IP ที่พยายาม connect เกิน 6 ครั้งใน 30 วินาที เมื่อโดนบล็อกแล้วจะ unblock อัตโนมัติหลัง 60 วินาที
💡 สำหรับ server ที่เปิดให้ login เยอะๆ แนะนำใช้ ufw limit ssh ร่วมกับ Fail2Ban เพื่อป้องกันหลายชั้น
การ Log และ Monitor กิจกรรม UFW
เปิด logging เพื่อตรวจสอบว่า firewall บล็อกอะไรบ้าง:
# เปิด log (3 ระดับ: low, medium, high) sudo ufw logging low # ดู log แบบ realtime sudo tail -f /var/log/ufw.log # ดู log ผ่าน journalctl sudo journalctl -f | grep UFW # นับ blocked connection ใน 24 ชั่วโมงที่ผ่านมา sudo grep -c "UFW BLOCK" /var/log/ufw.log 2>/dev/null || \ sudo journalctl --since "24 hours ago" | grep -c "UFW BLOCK"
Log ระดับ low เหมาะสำหรับ production เพราะบันทึก blocked packet โดยไม่สร้าง I/O มากเกิน
คำสั่ง UFW ที่ใช้บ่อย (ตารางอ้างอิง)
| คำสั่ง | ผลลัพธ์ |
|---|---|
sudo ufw status verbose | ดูสถานะและ rules ทั้งหมด |
sudo ufw enable | เปิดใช้งาน UFW |
sudo ufw disable | ปิด UFW (ไม่ลบ rules) |
sudo ufw reset | รีเซ็ตกลับค่าเริ่มต้น (ลบ rules ทั้งหมด) |
sudo ufw allow 80/tcp | เปิด port 80 TCP |
sudo ufw deny 3306 | บล็อก port 3306 (MySQL) |
sudo ufw limit ssh | Rate limit บน SSH |
sudo ufw delete allow 80/tcp | ลบ rule เปิด port 80 |
sudo ufw allow from 203.0.113.0/24 | อนุญาต IP ใน subnet |
sudo ufw deny from 198.51.100.0/24 | บล็อก IP ใน subnet |
sudo ufw logging medium | ตั้งระดับ log เป็น medium |
sudo ufw app list | แสดง app profiles ที่มี |
คำถามที่พบบ่อย (FAQ)
ufw allow ssh ก่อน ufw enable เซสชันปัจจุบันจะไม่หลุด แต่ถ้าไม่ได้ allow SSH ก่อน การ connect SSH ใหม่จะถูกบล็อก (session เดิมยังอยู่ชั่วคราว) ต้องใช้ VNC Console ของ provider เข้ามาแก้ไขufw limit จะบล็อก IP ที่พยายาม connect เกิน 6 ครั้งใน 30 วินาที และ unblock อัตโนมัติหลัง 60 วินาที เป็น quick win ป้องกัน brute force โดยไม่ต้องติดตั้ง tool เพิ่มIPV6=yes ใน /etc/default/ufw ก่อน rules ที่เพิ่มหลังจากนั้นจะมีผลกับทั้ง IPv4 และ IPv6 พร้อมกันsudo ufw status | grep DENY เพื่อดู rules แบบ deny ที่ตั้งไว้ และ sudo tail -f /var/log/ufw.log เพื่อดู realtime log ของ packet ที่ถูกบล็อกสรุป
UFW เป็น firewall ที่ตั้งค่าง่าย มีประสิทธิภาพสูง และมาพร้อมกับ Ubuntu โดยไม่ต้องติดตั้งเพิ่ม ด้วยคำสั่งไม่กี่บรรทัด คุณสามารถ:
- ตั้ง default deny policy ป้องกันทุก port ที่ไม่ได้เปิด
- เปิดเฉพาะ port ที่จำเป็น (SSH, HTTP, HTTPS)
- บล็อก IP ที่น่าสงสัยได้ทันที
- ป้องกัน brute force ด้วย rate limiting built-in
- Monitor ด้วย log realtime
สำหรับ VPS ที่ต้องการความปลอดภัยระดับสูงขึ้น แนะนำใช้ UFW ร่วมกับ Fail2Ban และ Redis สำหรับ session management ที่ปลอดภัย