# **QUẢN LÝ TƯỜNG LỬA TRÊN LINUX VỚI FIREWALLD** ## **1. Giới thiệu chung** `firewalld` là một **hệ thống quản lý tường lửa hiện đại và động (dynamic firewall manager)** được sử dụng trên nhiều bản phân phối Linux, đặc biệt là **Red Hat, CentOS, Fedora**. Mặc dù vẫn sử dụng `iptables` ở tầng thấp, nhưng `firewalld` cung cấp một giao diện người dùng dễ sử dụng hơn thông qua dòng lệnh và GUI. ### **Đặc điểm nổi bật** * Cho phép **thay đổi cấu hình tường lửa mà không làm gián đoạn kết nối**. * Hỗ trợ **zones (vùng tin cậy)** để phân chia và kiểm soát lưu lượng theo mức độ tin cậy. * Phân tách rõ ràng giữa **runtime** (tức thời) và **permanent** (vĩnh viễn). * Hỗ trợ **IPv4, IPv6**, NAT và IP Masquerading. * Có thể cấu hình thông qua **firewall-cmd**, GUI (`firewall-config`), hoặc qua **tập tin XML cấu hình**. ### **Slide thuyết trình** * [Link canva](https://www.canva.com/design/DAGtIbSAY6E/HyxEIJ2n4YOUMZMTF3berQ/edit?utm_content=DAGtIbSAY6E&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton) --- ## **2. Hệ điều hành hỗ trợ firewalld** `firewalld` được thiết kế để chạy trên các hệ điều hành Linux hiện đại, đặc biệt là các hệ sử dụng `systemd`: ### **Hệ điều hành được hỗ trợ chính thức** | Hệ điều hành | Mức độ hỗ trợ | Ghi chú | | ------------------------------------------- | -------------- | ------------------------------------------------------- | | **Red Hat Enterprise Linux (RHEL)** 7, 8, 9 | Mặc định | Firewalld được cài sẵn và dùng thay cho iptables | | **CentOS** 7, 8 (Stream) | Mặc định | Giống RHEL | | **Fedora** | Mặc định | Hỗ trợ tốt nhất, luôn dùng phiên bản firewalld mới nhất | | **AlmaLinux / Rocky Linux** | Mặc định | Hệ điều hành thay thế CentOS, tương thích hoàn toàn | | **Oracle Linux** | Có hỗ trợ | Cần cài thêm thủ công trên bản UEK | | **openSUSE / SUSE Linux Enterprise** | Có thể sử dụng | Cần chuyển từ `SuSEfirewall2` hoặc `nftables` | ### **Hệ điều hành có thể sử dụng (không mặc định)** | Hệ điều hành | Ghi chú | | -------------------- | ------------------------------------------------------------------ | | **Ubuntu** (≥ 18.04) | Có thể cài bằng `apt install firewalld`, nhưng mặc định dùng `ufw` | | **Debian** (≥ 10) | Tương tự Ubuntu, cần cấu hình thêm để sử dụng ổn định | ### **Hệ điều hành không hỗ trợ hoặc không khuyến nghị** | Hệ điều hành | Lý do | | ------------------------- | -------------------------------------------------------------- | | **Windows** | Không tương thích | | **macOS** | Không hỗ trợ | | **Solaris, AIX, FreeBSD** | Không có hệ thống backend tương thích (`iptables`, `nftables`) | --- ## **3. Cài đặt và bật firewalld** ### **Cài đặt firewalld** ```bash sudo dnf install firewalld -y ``` ### **Khởi động và kích hoạt dịch vụ** ```bash sudo systemctl start firewalld sudo systemctl enable firewalld ``` ### **Kiểm tra trạng thái** ```bash firewall-cmd --state # Output: running ``` Lệnh xác nhận rằng `firewalld` đang chạy. --- ## **4. Zones (Vùng) và quản lý vùng** Zone là tập hợp các quy tắc tường lửa áp dụng cho một hoặc nhiều giao diện mạng (interface). Mỗi vùng thể hiện **mức độ tin cậy** khác nhau đối với lưu lượng mạng. ### **Các zone mặc định** | Zone | Mô tả | | ---------- | -------------------------------------------------------------------------- | | `drop` | Bỏ mọi gói tin vào không liên quan đến kết nối ra, không gửi ICMP trả lời. | | `block` | Từ chối gói tin vào và gửi ICMP reject. | | `public` | Mặc định, chỉ cho SSH, DHCPv6. | | `home` | Cho phép SSH, mDNS, Samba,... | | `internal` | Như home. | | `work` | Cho phép SSH, IPP-client,... | | `dmz` | Chỉ cho phép SSH. | | `external` | Masquerade gói tin đi. | | `trusted` | Cho phép mọi lưu lượng. | ### **Hiển thị zone mặc định** ```bash firewall-cmd --get-default-zone # Output: public ``` ### **Hiển thị các zone đang hoạt động** ```bash firewall-cmd --get-active-zones ``` ### **Xem chi tiết zone** ```bash firewall-cmd --zone=home --list-all ``` ### **Chuyển interface sang zone khác** ```bash sudo firewall-cmd --zone=home --change-interface=eth0 ``` ### **Đặt zone mặc định** ```bash sudo firewall-cmd --set-default-zone=home ``` ### **Thay đổi vĩnh viễn** ```bash sudo firewall-cmd --zone=home --change-interface=eth0 --permanent ``` --- ## **5. Dịch vụ và cổng trong firewalld** Firewalld cho phép mở các **dịch vụ (services)** hoặc **cổng (ports)** cụ thể cho từng zone. ### **Liệt kê các dịch vụ hỗ trợ** ```bash firewall-cmd --get-services ``` ### **Thêm dịch vụ cho zone (tức thời)** ```bash sudo firewall-cmd --zone=public --add-service=http ``` ### **Thêm dịch vụ vĩnh viễn** ```bash sudo firewall-cmd --zone=public --permanent --add-service=http sudo firewall-cmd --reload ``` ### **Thêm cổng tùy chỉnh** ```bash sudo firewall-cmd --zone=public --add-port=5000/tcp sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp ``` ### **Thêm dải cổng** ```bash sudo firewall-cmd --zone=public --add-port=4990-4999/udp sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp ``` --- ## **6. NAT và IP Masquerading** Masquerading dùng để ẩn IP nội bộ khi gửi ra ngoài, thường dùng trong cấu hình NAT router. ### **Bật masquerade cho zone** ```bash firewall-cmd --zone=public --add-masquerade firewall-cmd --zone=public --permanent --add-masquerade ``` ### **Port forwarding** Chuyển hướng cổng từ máy chủ: ```bash firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=3753 ``` ### **Address forwarding** Chuyển đến IP nội bộ khác: ```bash firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.0.2.55 ``` ### **Kết hợp port & address** ```bash firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.0.2.55 ``` --- ## **7. GUI và cấu hình nâng cao** ### **Mở giao diện đồ họa (GUI)** ```bash firewall-config ``` ![VirtualBox_centos_16_07_2025_14_17_48](https://hackmd.io/_uploads/BkREGCVLee.png) ### **Tùy chỉnh dịch vụ** Dịch vụ được định nghĩa bằng file XML trong: * `/usr/lib/firewalld/services/*.xml` (mặc định) * `/etc/firewalld/services/` (tùy chỉnh người dùng) Có thể sao chép file `ssh.xml`, đổi tên và sửa cổng, mô tả để tạo dịch vụ mới. --- ## **8. Runtime vs Permanent** | Loại cấu hình | Ý nghĩa | | ------------- | -------------------------------------------------------------- | | `Runtime` | Áp dụng tức thời, **không lưu sau reboot** | | `Permanent` | Cần dùng `--permanent`, **chỉ có hiệu lực sau khi `--reload`** | --- ## **9. Ứng dụng thực tế của firewalld** * **Server Web (HTTP/HTTPS):** quản lý cổng 80/443. * **Hệ thống NAT nội bộ:** dùng masquerading và forward port. * **Data Center:** chia zone theo VLAN/Interface để kiểm soát an ninh từng phân vùng mạng. * **Home Lab / IoT Network:** zone `trusted` cho các thiết bị nội bộ và `public` cho mạng internet. --- ## **10. Kết luận** `firewalld` mang lại **sự linh hoạt, dễ dùng, khả năng cấu hình động**, vượt trội hơn nhiều so với `iptables`. Với hệ thống zone và dịch vụ, người dùng có thể **kiểm soát lưu lượng mạng một cách chặt chẽ và trực quan**, phù hợp với mọi cấp độ triển khai từ cá nhân đến doanh nghiệp. --- ## Tài liệu tham khảo 1. Patrick Ladd - Firewalld HowTo, Red Hat Enterprise Linux 7 2. Linux Seminar Themes 2025, Đề tài 18: Quản lý firewalld 3. https://firewalld.org/ 4. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_firewalls_and_packet_filters/index