ตั้งค่า Firewall ด้วย firewalld บน AlmaLinux และ Rocky Linux
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 ที่เชื่อมต่ออยู่
ขั้นตอนที่ 4: อนุญาตเฉพาะ IP ต้นทางด้วย Rich Rule
บริการอย่างฐานข้อมูลไม่ควรเปิดให้ทั้งอินเทอร์เน็ต ตัวอย่างนี้อนุญาต MySQL (3306) เฉพาะจาก IP 203.0.113.20
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.20/32" port port="3306" protocol="tcp" accept'
sudo firewall-cmd --reload
ถ้าต้องการให้ SSH เข้าได้เฉพาะ IP สำนักงาน ให้เพิ่ม Rich Rule สำหรับ SSH ก่อน รีโหลด และทดสอบเข้าด้วยหน้าต่างใหม่ให้ได้ แล้วจึงถอด Service ssh ออกจาก Zone
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.25/32" service name="ssh" accept'
sudo firewall-cmd --reload
# ทดสอบ SSH จากหน้าต่างใหม่ให้ผ่านก่อน แล้วจึงรัน
sudo firewall-cmd --permanent --zone=public --remove-service=ssh
sudo firewall-cmd --reload
บล็อก IP ที่ไม่ต้องการ
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.0.2.50" drop'
sudo firewall-cmd --reload
ขั้นตอนที่ 5: ปิด Service ที่ไม่ใช้
Zone public เปิด cockpit (Port 9090) ไว้ตั้งแต่ต้น ถ้าไม่ได้ใช้ Cockpit ควรปิด
sudo firewall-cmd --permanent --remove-service=cockpit
sudo firewall-cmd --reload
ลบ Port หรือ Rich Rule ใช้รูปแบบเดียวกับตอนเพิ่ม เพียงเปลี่ยน --add- เป็น --remove- เช่น --remove-port=8080/tcp
ตรวจสอบผลลัพธ์
sudo firewall-cmd --list-all
sudo firewall-cmd --list-rich-rules
ตรวจว่า services, ports และ rich rules ตรงกับที่ต้องการ จากนั้นทดสอบจากภายนอก เช่น เปิดเว็บไซต์ในเบราว์เซอร์ และ SSH จากหน้าต่างใหม่ ถ้าต้องการทดสอบว่า Port ใดเปิดจากเครื่องอื่นที่เป็น Linux ใช้ nc -vz 203.0.113.10 443
หากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้เปิดพอร์ตนั้นเพิ่มด้วย
ปัญหาที่พบบ่อย
เพิ่มกฎแล้วหายหลังรีบูต
เพิ่มกฎโดยไม่ใส่ --permanent กฎจึงอยู่แค่ใน Runtime หากทดสอบใน Runtime จนพอใจแล้ว สามารถบันทึกทั้งหมดเป็นถาวรได้ด้วย sudo firewall-cmd --runtime-to-permanent
เพิ่มกฎแบบ Permanent แล้วยังไม่มีผล
ยังไม่ได้รัน sudo firewall-cmd --reload ใช้ sudo firewall-cmd --list-all --permanent เทียบกับ sudo firewall-cmd --list-all จะเห็นความต่างระหว่างค่าถาวรกับค่าที่ใช้อยู่
เปิด Port แล้วแต่บริการยังเข้าไม่ได้
ตรวจว่าโปรแกรมฟังที่ IP ภายนอกจริง ไม่ใช่เฉพาะ 127.0.0.1 ด้วย sudo ss -tlnp ตรวจว่ากฎอยู่ใน Zone ที่ Interface ใช้งานจริง (ดูจาก --get-active-zones) และหากเป็น Port ที่ไม่ใช่มาตรฐานของบริการนั้น SELinux อาจบล็อกอยู่ ดู Log ด้วย sudo ausearch -m avc -ts recent
ล็อกตัวเองออกจาก SSH
เข้าผ่าน Console แล้วรัน sudo firewall-cmd --add-service=ssh เพื่อเปิดชั่วคราวใน Runtime จากนั้นแก้กฎ Permanent ให้ถูกต้องก่อนรีโหลด
หากตั้งค่าแล้วบริการยังเข้าถึงไม่ได้ ติดต่อทีมซัพพอร์ต THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


