# 🔐 **Tài liệu: Quản lý Firewall hiện đại với `firewalld`**
## I. Giới thiệu
### 1. Truyền thống: `iptables`
* Công cụ mạnh mẽ nhưng cấu hình phức tạp.
* Khó duy trì khi thay đổi mạng động (IP động, VPN,...).
### 2. Hiện đại: `firewalld`
* **Wrapper** cho iptables, hỗ trợ giao diện dòng lệnh (`firewall-cmd`) và GUI (`firewall-config`).
* Quản lý theo **zone** giúp phân vùng tin cậy mạng linh hoạt.
* Thay đổi cấu hình **real-time**, không cần reload toàn bộ hệ thống.
---
## II. Cài đặt và cấu hình cơ bản
```bash
sudo systemctl start firewalld
firewall-cmd --state
```
### Các zone mặc định:
| Zone | Mức độ bảo mật |
| ------- | -------------------------------------- |
| drop | Cực kỳ an toàn – bỏ mọi gói |
| block | Từ chối có thông báo |
| public | Mặc định – chỉ cho phép dịch vụ cơ bản |
| home | Mạng tin cậy, cho nhiều dịch vụ LAN |
| trusted | Mở tất cả |
```bash
firewall-cmd --get-zones
firewall-cmd --get-active-zones
```
### Thay đổi zone:
```bash
firewall-cmd --zone=home --change-interface=eth0
```
---
## III. Dịch vụ & Port
### Thêm dịch vụ:
```bash
firewall-cmd --zone=public --add-service=http
```
### Mở port thủ công:
```bash
firewall-cmd --zone=public --add-port=5000/tcp
```
### Làm thay đổi thành **permanent**:
```bash
firewall-cmd --runtime-to-permanent
```
---
## IV. Quản lý nâng cao
### 1. **NAT – Network Address Translation**
* Dùng để chia sẻ kết nối mạng hoặc cho port forwarding.
#### Bật masquerading:
```bash
firewall-cmd --zone=public --add-masquerade
```
#### Port Forwarding:
```bash
firewall-cmd --zone=public \
--add-forward-port=port=22:proto=tcp:toport=2222
```
#### Forward IP:
```bash
firewall-cmd --zone=external \
--add-forward-port=port=22:proto=tcp:toaddr=192.168.1.50
```
---
### 2. **Rich Rules – Quy tắc nâng cao**
* Tùy biến theo địa chỉ IP, logging, ICMP block,…
```bash
firewall-cmd --permanent --zone=public \
--add-rich-rule='rule family=ipv4 source address=192.168.1.10 service name=ssh accept'
```
---
### 3. **Tạo dịch vụ riêng**
* Tạo file `.xml` mô tả dịch vụ tại `/etc/firewalld/services/myapp.xml`
```xml
<service>
<short>MyApp</short>
<port protocol="tcp" port="12345"/>
</service>
```
```bash
firewall-cmd --permanent --add-service=myapp
```
---
### 4. **Giao diện đồ họa**
```bash
firewall-config
```
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/configuring_firewalls_and_packet_filters/