# **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
```

### **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