คำตอบสั้น ๆ: เปิดใช้ firewalld ทำความเข้าใจ Zone และค่า Runtime กับ Permanent เปิด Service และ Port เขียน Rich Rule จำกัดตาม IP และปิด Service ที่ไม่ได้ใช้
คู่มือนี้อธิบาย firewalld ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
firewalld เป็น Firewall มาตรฐานของ AlmaLinux และ Rocky Linux 8-9 ทำงานบน nftables และจัดกฎเป็นกลุ่มเรียกว่า Zone แต่ละ Zone มีรายการ Service และ Port ที่อนุญาต ส่วน Network Interface หรือ IP ต้นทางจะถูกผูกกับ Zone ใด Zone หนึ่ง เซิร์ฟเวอร์ทั่วไปใช้ Zone public เพียง Zone เดียวก็เพียงพอ
จุดที่ต้องเข้าใจก่อนเริ่มคือ firewalld มีค่าสองชุด ได้แก่ Runtime (มีผลทันทีแต่หายเมื่อรีโหลดหรือรีบูต) และ Permanent (บันทึกถาวรแต่ยังไม่มีผลจนกว่าจะรีโหลด) คู่มือนี้ใช้รูปแบบ --permanent ตามด้วย --reload ซึ่งเข้าใจง่ายและไม่ลืมบันทึก สำหรับ Ubuntu ให้ดู ตั้งค่า Firewall ด้วย UFW บน Ubuntu
สิ่งที่ต้องเตรียม
- AlmaLinux หรือ Rocky Linux 8/9 และสิทธิ์ root หรือ
sudo - รู้ว่า SSH ใช้ Port อะไร ตรวจได้ด้วย
sudo ss -tlnp | grep sshd - เปิด SSH Session ค้างไว้ และเตรียม Console Server ผ่าน Web UI เป็นช่องทางสำรอง
ขั้นตอนที่ 1: ติดตั้งและเปิดใช้งาน firewalld
Image บางแบบไม่ได้ติดตั้งหรือไม่ได้เปิด firewalld ไว้ ตรวจสถานะก่อน
sudo systemctl status firewalld
ถ้าไม่พบ Service ให้ติดตั้ง
sudo dnf install -y firewalld
ก่อนเปิดใช้งานครั้งแรก ให้ตรวจว่า Zone เริ่มต้นอนุญาต SSH อยู่แล้ว โดยใช้ firewall-offline-cmd ซึ่งทำงานได้แม้ firewalld ยังไม่รัน
sudo firewall-offline-cmd --get-default-zone
sudo firewall-offline-cmd --zone=public --list-services
ผลลัพธ์ปกติของ Zone public คือ cockpit dhcpv6-client ssh ถ้าไม่มี ssh ให้เพิ่มก่อนด้วย sudo firewall-offline-cmd --zone=public --add-service=ssh จากนั้นเปิด firewalld และตั้งให้ทำงานเมื่อบูต
sudo systemctl enable --now firewalld
sudo firewall-cmd --state
ผลลัพธ์ต้องเป็น running
ขั้นตอนที่ 2: ดูการตั้งค่าปัจจุบัน
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all
--get-active-zones บอกว่า Interface ใดอยู่ใน Zone ใด ส่วน --list-all แสดงรายละเอียดของ Zone เริ่มต้น ตัวอย่าง
public (active)
target: default
interfaces: eth0
services: cockpit dhcpv6-client ssh
ports:
rich rules:
ขั้นตอนที่ 3: เปิด Service และ Port
เปิดเว็บ HTTP และ HTTPS ด้วยชื่อ Service ที่ firewalld รู้จัก
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
ดูรายชื่อ Service ทั้งหมดที่มีได้ด้วย sudo firewall-cmd --get-services ถ้าบริการของคุณไม่มีในรายการ ให้เปิดเป็นเลข Port แทน
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=10000-10100/udp
ค่าที่ใส่ --permanent ยังไม่มีผลจนกว่าจะรีโหลด
sudo firewall-cmd --reload
ได้ผลลัพธ์ success การรีโหลดไม่ตัด SSH Session ที่เชื่อมต่ออยู่