Bài viết này sẽ giúp bạn biết được cơ bản về cách cài đặt, cấu hình, và quản lý NAT với firewalld trên CentOS 9, cùng với các giải thích cho mỗi một dòng lệnh để giúp các bạn dễ hiểu nhất có thể.
Lưu ý: Hãy thay đổi IP của Linux Server theo hệ thống mạng của bạn, và hãy tắt SELinux trong Linux server do SELinux có thể chặn forwarding .
#firewalld #CentOS9 #LinuxSecurity #sysadmin #NAT #ZoneBasedFirewall
Contents
- 1 1. Firewalld là gì?
- 2 ️ 2. Cài đặt & khởi động Firewalld
- 3 3. Các khái niệm Zone, Service, Port
- 4 4. Mở/Đóng các dịch vụ & cổng trên server
- 5 ️ 5. Rich Rules – Quy tắc nâng cao cho firewalld
- 6 6. Cấu hình NAT (Masquerade)
- 6.1 ️ Giả định cấu hình mạng cho server:
- 6.2 6.1 Gán zone cho interface (card mạng):
- 6.3 6.2 Bật Masquerade (SNAT) trên zone external:
- 6.4 6.3 Kích hoạt IP forwarding
- 6.5 6.4 Reload cấu hình
- 6.6 6.5 Kiểm tra NAT
- 6.7 Đặt lại Firewalld về trạng thái mặc định (Reset Firewalld)
- 6.8 ✅ Kiểm tra lại sau khi reset firewalld về mặc định
- 6.9 ✅ Xóa masquerade, port, rich-rules thủ công (nếu cần)
- 7 Kết luận
- 8 ✅ 7. Tổng kết lệnh thường dùng
1. Firewalld là gì?
-
Frontend cho
nftables(hoặciptables) -
Quản lý tường lửa theo zones, services, rich rules
-
Cho phép thay đổi runtime mà không cần restart dịch vụ
️ 2. Cài đặt & khởi động Firewalld
Trong hệ điều hành Centos 9 hoặc Redhat 9, firewalld đã được setup sẵn theo mặc định. Trong trường hợp nếu server chưa được setup, bạn hãy sử dụng lệnh sau để cài đặt firewalld:
Giải thích: Cài gói firewalld sử dụng lệnh DNF (trình quản lý gói mặc định trong CentOS 9).
Giải thích: Kích hoạt (
enable) và khởi động (--now) dịch vụ ngay lập tức.
Giải thích: Kiểm tra trạng thái — nếu trả về kết quả là
running, tường lửa của bạn đã sẵn sàng để sử dụng.
3. Các khái niệm Zone, Service, Port
-
Zone: Nhóm quy tắc (rule) cho interface hay card mạng (public, internal, external…)
-
Service: Tên dịch vụ đã định nghĩa sẵn cổng/protocol (ssh, http, https…)
-
Port: Sử dụng khi không có service, format
port/protocol(80/tcp, 53/udp)
Xem zone đang active:
Giải thích: Liệt kê zone + card mạng đang được tường lửa quản lý.
Xem danh sách các services được firewallD hỗ trợ:
Giải thích: Giúp gợi ý tên dịch vụ mà bạn có thể dùng cho việc cấu hình mở đóng các dịch vụ.
4. Mở/Đóng các dịch vụ & cổng trên server
4.1 Mở dịch vụ (service name) để cho phép các máy clients từ bên ngoài truy cập vào dịch vụ của server:
Giải thích: Add thêm quy tắc mở SSH (port 22/tcp) vào cấu hình vĩnh viễn.
Giải thích: Mở HTTP (port 80/tcp).
4.2 Mở port khi bạn không nhớ service name
Giải thích: Mở port 8080 qua giao thức TCP.
4.3 Reload để áp dụng thay đổi
Giải thích: Nạp lại toàn bộ cấu hình permanent vào runtime.
4.4 Kiểm tra lại cấu hình tường lửa, chạy lần lượt các lệnh sau:
Giải thích: Xem danh sách các services và ports hiện đang mở trong tường lửa.
️ 5. Rich Rules – Quy tắc nâng cao cho firewalld
Xóa quyền truy cập SSH hiện tại (mở toàn bộ) nếu có:
sudo firewall-cmd --permanent --remove-service=ssh
Chỉ cho phép một máy client có địa chỉ IP 192.168.146.11 được phép truy cập vào dịch vụ SSH của server, còn lại tất cả các máy clients khác với địa chỉ IP khác bị chặn/cấm truy cập vào dịch vụ SSH của server:
Giải thích:
source addresslọc theo IP,service name="ssh"dịch vụ SSH,acceptcho phép từ bên ngoài truy cập vào server qua dịch vụ ssh.
Reload lại dịch vụ để áp dụng thay đổi cấu hình:
6. Cấu hình NAT (Masquerade)
️ Giả định cấu hình mạng cho server:
- Card mạng 1 (ra Internet):
ens160– IP:192.168.146.11 - Card mạng 2 (nội bộ):
ens224– IP:172.16.10.1
Sơ đồ hệ thống mạng:

6.1 Gán zone cho interface (card mạng):
Giải thích: Gán card mạng external ra Internet vào zone
external:
Giải thích: Gán card mạng LAN vào zone
internal.
6.2 Bật Masquerade (SNAT) trên zone external:
Giải thích: Bật NAT, “ngụy trang” IP LAN thành IP
192.168.146.11khi đi ra bên ngoài.
Cho phép Forward tất cả các gói tin từ Internal (mạng Lan) sang external để đi ra ngoài:
6.3 Kích hoạt IP forwarding
Tạm thời:
Bật chuyển tiếp gói tin IPv4 ngay lập tức.
Vĩnh viễn:
Giải thích: Lưu cấu hình, tự động áp dụng sau reboot.
6.4 Reload cấu hình
Giải thích: Áp dụng toàn bộ thay đổi đã được cấu hình của tường lửa.
6.5 Kiểm tra NAT
Giải thích: Xác nhận trả về kết quả là
masquerade: yescó nghĩa là masquerade đang hoạt động.
Giải thích: Nếu backend là iptables, xem rule MASQUERADE.
Kiểm tra NAT của FirewallD đã được cấu hình thành công hay chưa từ một máy client trong mạng nội bộ LAN:
ping 8.8.8.8 # Từ 1 máy trong mạng 172.16.10.0/24
Nếu ping được thành công ra bên ngoài internet → NAT hoạt động đúng.
✅ Firewalld không chỉ là tường lửa đơn giản, mà hoàn toàn có thể dùng như một tường lửa mạng LAN chuyên nghiệp, tương tự như:
Router chia sẻ truy cập internet cho hệ thống mạng LAN
Firewall kiểm soát phân vùng truy cập
Hệ thống kiểm soát NAT và truy cập dịch vụ
Đặt lại Firewalld về trạng thái mặc định (Reset Firewalld)
Nếu bạn đã test thử nhiều cấu hình, thêm nhiều rule, port, zone… và muốn xóa sạch tất cả cấu hình của firewalld, hãy sử dụng lần lượt các lệnh sau:
Giải thích:
rm -rf /etc/firewalld: Xóa toàn bộ cấu hình zones, services, policies, rich rules…
dnf reinstall firewalld: Cài lại gói và khôi phục thư mục/etc/firewalldmặc định
restart firewalld: Khởi động lại tường lửa với cấu hình mặc định
✅ Kiểm tra lại sau khi reset firewalld về mặc định
Kết quả mong muốn:
Zone mặc định là
publicChỉ có
sshđược mở, không còn cổng nào khác, không còn rich-rule hay masquerade.
✅ Xóa masquerade, port, rich-rules thủ công (nếu cần)
Kết luận
Khi cấu hình firewall bị rối, hãy reset sạch sẽ rồi cấu hình lại từ đầu.
Việc hiểu rõ cách Firewalld hoạt động theo zone, service, rich-rule, masquerade sẽ giúp bạn xử lý dễ dàng các tình huống thực tế cho server của bạn.
✅ 7. Tổng kết lệnh thường dùng
| Chức năng | Lệnh (tùy chọn) |
|---|---|
| Cài & khởi động | dnf install firewalld → systemctl enable --now |
| Kiểm tra trạng thái | firewall-cmd --state / get-active-zones |
| Mở service | --add-service=<name> |
| Mở port | `–add-port=<port>/tcp |
| Thêm rich rule | --add-rich-rule='rule …' |
| Bật NAT (Masquerade) | --add-masquerade |
| Gán zone cho interface | --zone=<zone> --add-interface=<if> |
| Bật IP Forward | sysctl -w net.ipv4.ip_forward=1 + sysctl.d file |
| Reload config | firewall-cmd --reload |
| Xem config zone | --list-all / --list-services / --list-ports / --list-rich-rules |
❓ Lưu ý & Best practices
-
Luôn dùng
--permanent+--reloadkhi muốn lưu rule. -
Ưu tiên service trước, chỉ dùng port khi cần.
-
Kiểm tra kỹ zone gán chính xác interface.
-
Cẩn thận với rich rules phức tạp, dễ nhầm lẫn thứ tự xử lý.
-
Khi debug, dùng
firewall-cmd --complete-reloadhoặc reset zone nếu cần.
Với bài hướng dẫn này, bạn đã có toàn bộ công thức để triển khai tường lửa cơ bản và NAT trong CentOS 9, cùng với các giải thích cho mỗi lệnh một cách dễ hiểu. Chúc bạn thành công!











