คู่มือ VPS Security
UFW Firewall คืออะไร: ตั้งค่า Firewall บน Ubuntu VPS ฉบับสมบูรณ์ 2026
เมื่อคุณเช่า VPS ใหม่มาจาก Bangmod Cloud, DigitalOcean หรือ provider อื่นๆ — เซิร์ฟเวอร์ของคุณเปิดรับ traffic ทุก port โดย default และมีบอต malicious scanner กำลัง probe port ของคุณตลอดเวลา ภายใน 24 ชั่วโมงแรก
UFW (Uncomplicated Firewall) คือเครื่องมือ firewall มาตรฐานบน Ubuntu ที่พัฒนาเพื่อให้ตั้งค่า iptables ได้ง่ายขึ้น บทความนี้จะพาคุณตั้งค่า UFW ตั้งแต่ศูนย์ถึง production-ready ในเวลาไม่กี่นาที
sudo ufw allow ssh ก่อน sudo ufw enable เสมอ มิฉะนั้นคุณจะถูก lock out จากเซิร์ฟเวอร์ทันที
สารบัญ
UFW คืออะไรและทำงานอย่างไร
UFW ย่อมาจาก Uncomplicated Firewall พัฒนาโดย Ubuntu team เพื่อแก้ปัญหา syntax ของ iptables ที่ซับซ้อน เป้าหมายคือให้ผู้ใช้ทั่วไปสามารถตั้ง firewall ได้โดยไม่ต้องจำ chain/table/rule ของ iptables
ตาม Ubuntu Wiki อย่างเป็นทางการ: UFW เป็น "user-friendly way to create an IPv4 or IPv6 host-based firewall" และ disabled by default บน Ubuntu ทุก version
UFW กับ iptables
UFW ไม่ได้แทนที่ iptables — มันคือ frontend ที่เขียน rule ให้ iptables ทำงานแทนเรา เมื่อคุณรัน sudo ufw allow 80 UFW จะแปลงเป็น iptables rule ที่ถูกต้องให้เองโดยอัตโนมัติ
| คุณสมบัติ | UFW | iptables โดยตรง |
|---|---|---|
| ความยาก | ง่าย — syntax อ่านออก | ยาก — ต้องรู้ chain/table |
| IPv6 | รองรับในตัว | ต้องตั้งแยก (ip6tables) |
| Application Profiles | มี (nginx, apache, openssh) | ไม่มี ต้องกำหนด port เอง |
| Persistence | auto ทุก reboot | ต้อง save/restore manual |
| เหมาะกับ | VPS ทั่วไป, Dev/Prod | Advanced network admin |
ติดตั้งและเปิดใช้งาน UFW
บน Ubuntu 20.04 / 22.04 / 24.04 — UFW มาพร้อมในระบบแล้ว แต่ถ้าต้องการติดตั้งใหม่:
sudo apt update sudo apt install ufw -y
ก่อน enable UFW บังคับต้อง allow SSH ก่อน:
# วิธีที่ 1: allow SSH โดยใช้ service name (แนะนำ) sudo ufw allow ssh # วิธีที่ 2: allow port 22 โดยตรง sudo ufw allow 22/tcp # วิธีที่ 3: ถ้าคุณเปลี่ยน SSH port แล้ว (เช่น 2222) sudo ufw allow 2222/tcp
จากนั้นจึง enable UFW:
sudo ufw enable # กด y เพื่อยืนยัน
ตรวจสอบสถานะ:
sudo ufw status verbose
ผลลัพธ์ที่ถูกต้อง:
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed)
คำสั่งพื้นฐาน UFW ที่ต้องรู้
ดูสถานะ
# ดูสถานะทั่วไป sudo ufw status # ดูละเอียดพร้อม default policy sudo ufw status verbose # ดูพร้อมหมายเลข rule (ใช้สำหรับลบ) sudo ufw status numbered
Allow และ Deny
# Allow port sudo ufw allow <port> sudo ufw allow <port>/tcp sudo ufw allow <port>/udp # Allow port range sudo ufw allow 8000:8080/tcp # Deny port sudo ufw deny <port> sudo ufw deny <port>/tcp
ลบ Rule
# วิธีที่ 1: ลบโดยระบุ rule เดิม sudo ufw delete allow 80/tcp # วิธีที่ 2: ลบโดยหมายเลข (จาก ufw status numbered) sudo ufw delete 3
Reset และ Disable
# ปิด UFW ชั่วคราว sudo ufw disable # Reset ลบ rule ทั้งหมดกลับ default sudo ufw reset
sudo ufw reset จะลบ rule ทั้งหมดรวมถึง SSH rule — หากรันบน remote server โดยไม่ระวังจะถูก lock out
กฎ Firewall สำหรับ Web Server
สำหรับ VPS ที่ทำหน้าที่เป็น web server รัน Nginx หรือ Apache — ต้องเปิด port เหล่านี้:
# HTTP sudo ufw allow 80/tcp # HTTPS sudo ufw allow 443/tcp # หรือใช้ Application Profile (ถ้ามี Nginx/Apache ติดตั้งแล้ว) sudo ufw allow 'Nginx Full' sudo ufw allow 'Apache Full'
กฎสำหรับ Database Server
# MySQL/MariaDB — เปิดเฉพาะ IP ที่เชื่อถือได้ sudo ufw allow from 192.168.1.100 to any port 3306 # PostgreSQL — เปิดเฉพาะ subnet sudo ufw allow from 10.0.0.0/8 to any port 5432 # Redis — ห้ามเปิดสู่ public เด็ดขาด sudo ufw deny 6379
ตัวอย่าง Ruleset สำหรับ LAMP/LEMP Stack
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
ป้องกัน SSH ด้วย UFW
SSH port 22 คือเป้าหมายหลักของ brute force attack — มีบอตสแกน port 22 ตลอด 24 ชั่วโมง มีหลายวิธีป้องกันด้วย UFW:
1. Allow SSH เฉพาะ IP ที่เชื่อถือได้
# อนุญาตเฉพาะ IP ของคุณ sudo ufw allow from 203.0.113.5 to any port 22 proto tcp # อนุญาต subnet ทั้งออฟฟิศ sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp
2. เปลี่ยน SSH Port
วิธีที่นิยมคือเปลี่ยน SSH จาก port 22 เป็น port อื่น (เช่น 2222) แล้ว allow port ใหม่เท่านั้น:
# ใน /etc/ssh/sshd_config — เปลี่ยน Port 22 → Port 2222 # จากนั้น: sudo ufw allow 2222/tcp sudo ufw deny 22/tcp # หลังจาก reconnect ผ่าน port ใหม่แล้วเท่านั้น sudo systemctl restart sshd
UFW Rate Limiting
UFW มีฟีเจอร์ rate limiting ในตัว — block IP ที่พยายาม connect เกิน 6 ครั้งใน 30 วินาที เหมาะมากสำหรับป้องกัน brute force SSH:
sudo ufw limit ssh # หรือระบุ port sudo ufw limit 22/tcp
เมื่อ limit active — UFW จะ drop connection จาก IP ที่ attempt เกินกำหนด แต่ยังคง allow connection ปกติจาก IP อื่นๆ
แนะนำ: ใช้ ufw limit ssh บน Production ทุกเซิร์ฟเวอร์
ฟีเจอร์นี้ช่วยลด SSH brute force ได้อย่างมีประสิทธิภาพโดยไม่ต้องติดตั้ง Fail2ban (แม้ว่า Fail2ban จะมีความสามารถมากกว่า) — เหมาะสำหรับ VPS เล็กๆ ที่ต้องการ simplicity
UFW Application Profiles
Application บางตัวที่ติดตั้งแล้วจะ register profile กับ UFW โดยอัตโนมัติ — ทำให้ allow ง่ายกว่าการระบุ port
# ดู profile ที่มี sudo ufw app list # ตัวอย่าง output: # Available applications: # Apache # Apache Full # Apache Secure # Nginx Full # Nginx HTTP # Nginx HTTPS # OpenSSH # Allow โดยใช้ profile name sudo ufw allow 'Nginx Full' # เปิดทั้ง HTTP และ HTTPS sudo ufw allow 'Nginx HTTPS' # เปิดเฉพาะ HTTPS sudo ufw allow 'OpenSSH' # เปิด SSH # ดูรายละเอียด profile sudo ufw app info 'Nginx Full'
การตั้งค่า Logging
UFW Logging ช่วยให้ติดตามว่า traffic ไหนถูก block — ตาม Ubuntu docs ระดับ logging มีดังนี้:
| Level | ความหมาย |
|---|---|
off | ปิด logging ทั้งหมด |
low | log เฉพาะ packet ที่ถูก block (default) |
medium | log blocked + packet ที่ไม่ตรง rule |
high | log ทุก packet พร้อม rate limiting |
full | log ทุก packet ไม่มี rate limiting |
# เปิด logging (default = low) sudo ufw logging on # ตั้ง level sudo ufw logging medium # ปิด logging sudo ufw logging off
Log จะถูกบันทึกที่ /var/log/ufw.log — ดูด้วย:
sudo tail -f /var/log/ufw.log
กฎขั้นสูงและการจัดการ Rule
Allow/Deny โดยใช้ IP Address
# Allow IP เดี่ยว (ทุก port) sudo ufw allow from 203.0.113.5 # Allow IP เดี่ยว เฉพาะ port sudo ufw allow from 203.0.113.5 to any port 3306 # Deny IP (block ทุก traffic) sudo ufw deny from 198.51.100.0/24
Allow โดยใช้ Interface
# Allow traffic เข้าผ่าน eth0 เฉพาะ port 80 sudo ufw allow in on eth0 to any port 80
Insert Rule ที่ Position ต้องการ
# ดู rule ปัจจุบันพร้อมหมายเลข sudo ufw status numbered # แทรก rule ที่ position 1 (priority สูงสุด) sudo ufw insert 1 allow from 203.0.113.5 to any port 22
IPv6 Support
ตรวจสอบว่า IPv6 enabled ใน UFW config:
sudo nano /etc/default/ufw # ตรวจว่ามีบรรทัด: # IPV6=yes
Best Practices สำหรับ Production Server
1. Principle of Least Privilege
เปิด port เฉพาะที่จำเป็นเท่านั้น — ทุก port ที่เปิดเพิ่มเติมคือ attack surface เพิ่มขึ้น
2. ใช้ Cloud Firewall ร่วมกับ UFW
Provider เช่น Bangmod Cloud และ DigitalOcean มี cloud-level firewall ที่ block traffic ก่อนถึงเซิร์ฟเวอร์ — ควรใช้ทั้ง cloud firewall + UFW เป็น defense-in-depth
3. Backup Rules ก่อน Reset
# Export rules ไว้ sudo cp /etc/ufw/user.rules /etc/ufw/user.rules.backup sudo cp /etc/ufw/user6.rules /etc/ufw/user6.rules.backup
4. Test Rules บน Staging ก่อน Production
หากต้องเปลี่ยน rule บน production ควรทำ dry run บน staging server ก่อน และเปิด console หรือ KVM access ไว้ก่อนเสมอ เพื่อ recovery กรณีถูก lock out
5. Ruleset แนะนำสำหรับ WordPress/VPS ทั่วไป
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw limit ssh # SSH + rate limiting sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw deny 3306/tcp # Block MySQL จาก public sudo ufw deny 6379/tcp # Block Redis จาก public sudo ufw enable
ต้องการ VPS ที่ตั้งค่า Security ง่าย?
AsiaGB.com มี VPS พร้อม DirectAdmin และ support ภาษาไทยตลอด 24 ชั่วโมง
สรุป: UFW Firewall คือก้าวแรกของ VPS Security
UFW เป็นเครื่องมือที่ตั้งค่าได้ง่าย ใช้เวลาไม่ถึง 5 นาที แต่ช่วยป้องกัน brute force และ unauthorized access ได้อย่างมีประสิทธิภาพ ขั้นตอนที่ต้องทำทันทีหลังเปิด VPS ใหม่:
- Allow SSH ก่อน
- Enable UFW
- Allow port ที่จำเป็น (80, 443)
- เปิด
ufw limit sshเพื่อป้องกัน brute force - ตรวจสอบด้วย
sudo ufw status verbose
คู่มือที่เกี่ยวข้อง
FAQ — คำถามที่พบบ่อยเกี่ยวกับ UFW Firewall
UFW คืออะไร?
UFW (Uncomplicated Firewall) คือเครื่องมือจัดการ firewall มาตรฐานบน Ubuntu พัฒนาเพื่อให้ใช้งาน iptables ง่ายขึ้น มี syntax อ่านออกและเข้าใจได้ง่าย
UFW เปิดใช้งานอยู่โดย default ไหม?
ไม่ — ตาม Ubuntu Wiki อย่างเป็นทางการ UFW ถูก disabled ไว้ by default คุณต้องรัน sudo ufw enable ก่อนจึงจะมีผล
ต้องตั้ง rule ก่อน enable ไหม?
ใช่อย่างยิ่ง — ต้อง sudo ufw allow ssh ก่อน sudo ufw enable เสมอ มิฉะนั้นจะถูก lock out ออกจากเซิร์ฟเวอร์ทันที เพราะ default policy คือ deny incoming ทั้งหมด
UFW กับ iptables ต่างกันอย่างไร?
UFW เป็น frontend ที่เขียนบน iptables — ใช้คำสั่งเดียวกันได้ง่ายกว่า แต่ under the hood ยังคงใช้ iptables kernel module เหมือนเดิม
ดู rule ทั้งหมดที่ตั้งไว้ได้อย่างไร?
รัน sudo ufw status verbose เพื่อดู rule ทั้งหมด หรือ sudo ufw status numbered เพื่อดูพร้อมหมายเลขสำหรับลบ
UFW รองรับ IPv6 ไหม?
รองรับ — UFW จัดการ IPv4 และ IPv6 ได้ในคำสั่งเดียว ต้องตรวจสอบว่ามี IPV6=yes ใน /etc/default/ufw
VPS บน Bangmod Cloud หรือ DigitalOcean ควรตั้ง UFW ไหม?
แนะนำอย่างยิ่ง — provider มี cloud firewall แต่ UFW เป็น host-based firewall ที่ป้องกันอีกชั้น ควรใช้ทั้งคู่เพื่อ defense-in-depth