UFW Rules Generator: สร้างคำสั่ง firewall บน Ubuntu โดยไม่ต้องเสี่ยงพลาด syntax
สร้างคำสั่ง ufw ทั้ง allow, deny, reject และ limit พร้อม port range, เลือก TCP/UDP และกำหนด source IP — ได้ syntax พร้อม copy-paste ทำงานฝั่ง client 100%
Table of Contents
UFW Rules Generator: สร้างคำสั่ง firewall บน Ubuntu โดยไม่ต้องเสี่ยงพลาด syntax
UFW หรือ Uncomplicated Firewall ทำให้ firewall ระดับ host บน Ubuntu อ่านเข้าใจง่ายขึ้นมาก แทนที่จะต้องไล่ไวยากรณ์ chain ของ iptables คุณแค่พิมพ์ ufw allow 80/tcp แล้วจบ ความอ่านง่ายนี่แหละที่ทำให้มันกลายเป็นค่าเริ่มต้น แต่ก็ตัดสองทาง เพราะ command line ยังให้อภัยไม่ได้อยู่ดี พลาดสลับ deny เป็น allow พิมพ์ port เพี้ยน หรือรัน ufw enable ก่อนเปิดช่องให้ SSH แค่พิมพ์ผิดจุดเดียว คุณก็ถูกล็อกออกจากเซิร์ฟเวอร์ตัวเองผ่าน SSH ทันที
UFW Rules Generator ช่วยตัดความเสี่ยงเรื่อง syntax ออกไป เลือก verb — allow, deny, reject หรือ limit — ใส่ port หรือ port range เลือก TCP หรือ UDP และถ้าต้องการก็จำกัดกฎไว้เฉพาะ source IP หรือ CIDR เครื่องมือจะปล่อยคำสั่งที่ถูกต้องออกมาพร้อม copy-paste ลง terminal, provisioning script หรือ runbook ได้เลย ทุกอย่างประมวลผลฝั่ง client 100% รายละเอียดกฎของคุณจึงไม่หลุดออกจากเบราว์เซอร์
ทำไมต้องใช้ UFW Rules Generator?
- ป้องกันปัญหาถูกล็อกออกจาก SSH ตั้งแต่ต้นทาง — การรัน ufw enable ก่อนเพิ่มกฎ allow ให้ SSH คือความผิดพลาดที่ตัด session admin กลางคำสั่ง ให้ยึดลำดับที่ถูกต้อง: กฎ SSH ก่อน enable ทีหลัง และเปิด session ทิ้งไว้จนกว่าจะยืนยันว่าเข้าได้
- พฤติกรรม verb ถูกต้อง ไม่ต้องเดา — deny, reject และ limit ไม่ใช่ของที่สลับกันได้ การเลือกผิดตัวเปลี่ยนวิธีที่เซิร์ฟเวอร์ตอบ scanner ทันที
- จัดการ port range ได้แม่นยำ — ไวยากรณ์แบบ ufw allow 3000:3010/tcp พิมพ์เองแล้วพลาดง่าย ผิดรูปแบบเมื่อไรอาจเงียบไปเลย หรือเปิดกว้างกว่าที่ตั้งใจ
- กำหนด source โดยไม่ต้องจำลำดับ argument — กฎอย่าง ufw allow from 203.0.113.0/24 to any port 5432 proto tcp จำลำดับ argument ด้วยหัวเปล่ายากมาก กรอกฟอร์มแทนได้เลย
- เป็นส่วนตัวโดยดีไซน์ — ทุกอย่างประมวลผลในเบราว์เซอร์ ไม่มีการส่งข้อมูลขึ้นเซิร์ฟเวอร์ กฎของคุณจึงอยู่กับเครื่องคุณ
ฟีเจอร์หลัก
| ฟีเจอร์ | สิ่งที่ทำ |
|---|---|
| verb ครบ 4 แบบ | สร้างกฎ allow, deny, reject และ limit สำหรับ port ใดก็ได้ |
| port เดี่ยวและ port range | รองรับทั้ง port เดี่ยวและช่วงแบบ colon เช่น 3000:3010 |
| เลือกโปรโตคอล TCP/UDP | ผูกโปรโตคอลที่ถูกต้องเข้ากับทุกกฎ |
| ตัวเลือก from-source | จำกัดกฎให้มีผลเฉพาะ IP เดียวหรือทั้ง CIDR block |
| syntax พร้อม copy-paste | output เป็น ufw grammar มาตรฐาน วางลง shell ได้ทันที |
| client-side 100% | สร้างกฎทั้งหมดในเบราว์เซอร์ ไม่มีข้อมูลถูกส่งออกไป |
จุดที่ทำให้ output ใช้ได้จริงคือคำสั่งเป็น ufw grammar มาตรฐานล้วน และฟอร์มเรียงตามวิธีที่คุณคิดถึงกฎ — เปิด port นี้ให้ source นี้ — แทนที่จะตามลำดับ argument ของ ufw
วิธีใช้งาน
- เลือก verb — allow เพื่อเปิด traffic, deny หรือ reject เพื่อปิด, limit สำหรับบริการอย่าง SSH ที่ต้องการ rate limit
- ใส่ port หรือช่วง port — port เดี่ยวอย่าง 443, ช่วงอย่าง 3000:3010 หรือชื่อ service
- เลือกโปรโตคอล — TCP, UDP หรือทั้งสอง ตามวิธีที่ service ติดต่อจริง
- กำหนด source ถ้าต้องการ — เพิ่ม IP หรือ subnet เพื่อให้กฎมีผลเฉพาะต้นทางที่เชื่อถือได้
- copy แล้วใช้ตามลำดับ — เพิ่มกฎ SSH ก่อนรัน ufw enable แล้วตรวจสอบด้วย ufw status
allow, deny, reject และ limit ต่างกันอย่างไร
สี่ verb นี้หน้าตาใกล้กันแต่พฤติกรรมต่างกันคนละเรื่อง
allow อนุญาต traffic ที่ตรงเงื่อนไขผ่าน firewall นี่คือตัวหลักที่ใช้บ่อยสุด: port เว็บ, port ฐานข้อมูลที่จำกัดไว้เฉพาะ subnet ของแอป หรือ endpoint สำหรับ monitoring ส่วน traffic ที่ไม่ตรงกฎไหนเลยจะตกไปตาม default policy ซึ่งเป็นเหตุผลว่าทำไม ufw default deny incoming จึงเข้าคู่กับรายการ allow สั้น ๆ ได้ดีมาก
deny ทิ้ง packet ที่ตรงเงื่อนไขแบบเงียบ ๆ ไม่มีการตอบกลับ ไม่มี error ไม่มีทางรู้เลยว่ามี port อยู่หลัง host ที่ยังมีชีวิต ส่วน reject จะปฏิเสธการเชื่อมต่ออย่างจริงจัง โดยส่ง ICMP port-unreachable หรือ TCP reset กลับไป ความต่างนี้สำคัญมากในมุมการสแกน: port ที่ถูก deny บังคับให้ scanner รอ timeout เต็มครั้งต่อหนึ่ง packet ช้าทั้งการไล่สแกน ขณะที่ port ที่ถูก reject ตอบทันทีและยืนยันว่า host ยังมีชีวิตอยู่ กฎมือ: ใช้ deny กับหน้าที่โดนอินเทอร์เน็ตกวาดหา ใช้ reject ในเครือข่ายภายในที่ user ตัวจริงควรเจอ error ชัดเจนและ fail เร็ว
limit คือเทคนิคกัน brute force ที่ ufw มีในตัว ufw limit ssh/tcp อนุญาตการเชื่อมต่อใหม่จาก IP เดียวได้มากสุดหกครั้งในสามสิบวินาที ที่เกินจากนั้นถูกทิ้งพร้อม log มันไม่ได้มาแทนการใช้ key-based authentication แต่ก็ทำให้บอทเดา password ได้ช้าลงจนไม่คุ้ม โดยไม่ต้องติดตั้ง daemon แยก
ไวยากรณ์ port และ range มีแบบเดียว: ufw allow 80/tcp, ufw allow 5353/udp และ ufw allow 3000:3010/tcp — range ต้องมี protocol suffix ต่อท้ายด้วย ใช้ชื่อ service อย่าง ssh ได้เหมือนกัน แต่เขียน port ตัวเลขชัด ๆ จะชัดเจนกว่าเวลาแชร์ script ให้คนอื่น
กฎแบบ from-source ช่วยจำกัดทุก verb ให้มีผลเฉพาะต้นทาง: ufw allow from 203.0.113.7 to any port 22 proto tcp เปิด SSH ให้ admin หนึ่งคน ส่วน CIDR ครอบคลุมทั้งออฟฟิศ การจำกัด port admin และ port ฐานข้อมูลแบบนี้ตัดช่องทางโจมตีทั้งตระกูลออกจากอินเทอร์เน็ตไปเลย
ลำดับสำคัญมาก เพราะ ufw ใช้หลัก first match wins กฎ allow กว้าง ๆ ที่วางไว้ก่อนจะบังกฎ deny ที่อยู่ทีหลัง ข้อยกเว้นจึงต้องมาก่อน — ufw insert 1 deny from 192.0.2.100 ดันกฎขึ้นบนสุด แทนที่จะต่อท้ายแล้วไม่มีวันถูกใช้
ลำดับที่ปลอดภัยตอน enable คือสิ่งที่คนเริ่มต้นมักทำสวนทาง — เพิ่มกฎ SSH ตอนที่ firewall ยังไม่ทำงาน ค่อย enable ทีหลัง:
ufw default deny incoming ufw default allow outgoing ufw limit ssh/tcp ufw allow 80/tcp ufw allow 443/tcp ufw enable
นั่นคือชุดกฎครบสำหรับเว็บเซิร์ฟเวอร์ทั่วไป: SSH ถูก rate limit, HTTP กับ HTTPS เปิด และที่เหลือถูก deny โดยดีฟอลต์
กรณีการใช้งานจริง
ตั้งค่า VPS ใหม่
สิบนาทีแรกของเซิร์ฟเวอร์ใหม่คือช่วงที่เกิด lockout บ่อยที่สุด สร้างกฎ allow ให้ port SSH แล้วเปลี่ยนเป็น limit ทันที เพิ่ม port เว็บ ตั้ง default policy แล้วค่อย enable firewall โดยเปิด session ค้างไว้เพื่อยืนยันว่า login ครั้งที่สองเข้าได้
บริการ self-hosted
stack ใน homelab สะสม port เร็วมาก: media server, dashboard, service ที่ผ่าน Docker มาอีกชุด สร้างกฎ allow ให้เฉพาะช่วง port ที่ service ใช้จริง — ufw allow 3000:3010/tcp สำหรับกลุ่มแอป Node — แล้ว deny ที่เหลือ
ล็อกอุปกรณ์ IoT ให้แน่น
Raspberry Pi ที่โผล่บนอินเทอร์เน็ตต้องการกฎแน่นที่สุดในบรรดาของที่คุณมี: allow SSH (แบบ limit), allow ให้ service เดียวที่อุปกรณ์มีไว้เพื่ออะไร แล้ว deny ที่เหลือทั้งหมด สามคำสั่ง สร้างเสร็จในไม่กี่วินาที และอุปกรณ์ก็เลิกเป็นประตูเปิดไว้ของเครือข่ายคุณ
สภาพแวดล้อม staging
เซิร์ฟเวอร์ staging ถือข้อมูลจริงแต่ไม่ควรให้คนทั่วไปค้นพบ แทนที่จะ allow กว้าง ให้สร้างกฎ from-source เฉพาะ CIDR ของออฟฟิศหรือ VPN แล้วปล่อยให้ default deny จัดการอินเทอร์เน็ตส่วนที่เหลือ
แนวปฏิบัติที่ดี
- เปิด session SSH ค้างไว้ระหว่างทดสอบ — ใส่กฎแล้ว login จาก session ที่สองก่อนปิด session เดิม เพื่อยืนยันว่ากฎไม่ได้ล็อกตัวเอง
- ใช้ ufw status numbered ก่อนลบกฎ — ลบด้วยหมายเลขแม่นยำกว่า การลบด้วยข้อความอาจโดนกฎที่หน้าตาคล้ายกันผิดตัว
- เริ่มจาก default deny incoming — แนว deny ก่อนแล้วเปิดเฉพาะที่จำเป็นตรวจสอบง่ายกว่าการเปิดกว้างแล้วมาไล่ปิดทีหลัง
- เรียงลำดับกฎอย่างตั้งใจ — วางกฎ deny หรือ limit เฉพาะเจาะจงไว้หน้ากฎ allow กว้าง ๆ และตรวจลำดับใหม่ทุกครั้งที่แทรกกฎ
- เปิด log เมื่อกฎมีปัญหา — ufw logging on บันทึก packet ที่ถูก block ลง kernel log เปลี่ยนคำถาม "ทำไมต่อไม่ได้" ให้มีคำตอบให้อ่าน
- ถือว่าชุดกฎเป็นโค้ด — เก็บคำสั่งที่สร้างไว้ใน provisioning script เพื่อให้ policy ถูก version และสร้างใหม่ได้ในไม่กี่นาที
ล็อกเซิร์ฟเวอร์ถัดไปของคุณให้มั่นใจ
การตั้งค่า firewall ควรเป็นงานห้านาที ไม่ใช่พิธีกรรมเสี่ยงภัย เปิด UFW Rules Generator สร้างกฎ allow, deny, reject และ limit ด้วยฟอร์มแบบมีโครงสร้างพร้อม syntax สำหรับ copy-paste แล้วส่งมอบชุดกฎที่คุณอธิบายได้ทีละบรรทัด — ฟรี และทำงานในเบราว์เซอร์ล้วน ๆ
เครื่องมือที่เกี่ยวข้องที่คุณอาจสนใจ:
- SSH Config Generator — เลิกพิมพ์ hostname, port และ user ซ้ำ ๆ ด้วย config SSH แยกตาม host
- Nginx Log Analyzer — ดูก่อนว่าเว็บเซิร์ฟเวอร์ของคุณเจอ IP และ request แบบไหน ก่อนตัดสินใจกฎ firewall
- AWS IAM Policy Builder — ใช้ความคิดแบบ least privilege เดียวกันกับสิทธิ์บนคลาวด์ พร้อม IAM policy JSON ที่ผ่านการ validate
ขอให้สนุกกับการเขียนกฎ firewall!
คำถามที่พบบ่อย
ถ: UFW Rules Generator เชื่อมต่อกับเซิร์ฟเวอร์ของฉันหรือไม่?
ตอบ: ไม่ครับ เครื่องมือทำงานฝั่ง client ทั้งหมด สร้างคำสั่ง ufw ในเบราว์เซอร์ของคุณเอง และไม่มีข้อมูลใดถูกส่งออกไปไหน การนำกฎไปใช้กับเซิร์ฟเวอร์ยังคงเป็นขั้นตอนที่คุณทำเองอย่างตั้งใจ
ถ: ควรใช้ deny หรือ reject กับ port ที่ปิด?
ตอบ: เซิร์ฟเวอร์ที่หันหน้าเข้าหาอินเทอร์เน็ตควรใช้ deny เพราะการทิ้งแบบเงียบ ๆ ไม่บอกอะไร scanner เลยและทำให้การสแกนช้าลง ส่วนเครือข่ายภายในใช้ reject จะดีกว่า เพราะการปฏิเสธทันทีทำให้ user ตัวจริง fail เร็วและเจอ error ที่อ่านรู้เรื่อง
ถ: ufw limit ทำอะไรกับ SSH จริง ๆ?
ตอบ: มันจำกัดอัตราการเชื่อมต่อใหม่ คือจาก IP เดียวได้มากสุดหกครั้งในสามสิบวินาที ส่วนที่เกินถูกทิ้งพร้อม log เมื่อใช้ร่วมกับ key-based authentication การ brute force SSH จะไม่คุ้มไปเลยโดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่ม
ถ: นำคำสั่งที่ได้ไปใช้ใน provisioning script หรือ cloud-init ได้ไหม?
ตอบ: ได้ครับ output เป็น ufw grammar มาตรฐาน ใช้ได้ทั้งวางใน terminal, bash script หรือ cloud-init user data แค่คงวินัยเรื่องลำดับ: default policy กับกฎ SSH มาก่อน แล้วปิดท้ายด้วย ufw enable