Quản lý tường lửa Linux với firewalld

Firewalld là hệ thống quản lý tường lửa động trên các bản phân phối Linux hiện đại như RHEL, CentOS và Fedora. Nó hỗ trợ cấu hình trực tiếp mà không cần khởi động lại dịch vụ, đồng thời cung cấp nhiều phương thức quản trị.

Phương thức quản lý firewalld

  • Giao diện đồ họa: Sử dụng công cụ firewall-config.
  • Dòng lệnh: Dùng lệnh firewall-cmd.
  • Tệp cấu hình XML: Chỉnh sửa trực tiếp các tệp trong thư mục /etc/firewalld/.

Chuẩn bị môi trường kiểm thử

Đảm bảo tắt iptables (nếu có) và kích hoạt firewalld:

[root@localhost ~]# systemctl stop iptables
Failed to stop iptables.service: Unit iptables.service not loaded.
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# systemctl status firewalld

Cài đặt các dịch vụ kiểm thử:

[root@localhost ~]# yum install -y httpd vsftpd

Zones trong firewalld

Firewalld chia mức độ tin cậy thành các vùng (zones), từ mức không tin cậy đến hoàn toàn tin cậy:

  • drop, block, dmz, external, public, work, internal, home, trusted

Lưu lượng được định tuyến vào zone theo thứ tự ưu tiên:

  1. Nguồn (source IP)
  2. Giao diện mạng (interface)
  3. Zone mặc định

Mỗi địa chỉ nguồn chỉ được ánh xạ tới một zone duy nhất.

Ví dụ thực hành

Ví dụ 1: Ánh xạ mạng 172.25.0.0/24 vào zone work

Cấu hình máy chủ web:

[root@server0 ~]# echo "tianyun" > /var/www/html/index.html
[root@server0 ~]# systemctl enable --now httpd

Kiểm tra ban đầu từ client thất bại do HTTP chưa được mở trong zone public:

[root@desktop0 ~]# curl http://server0
curl: (7) Failed connect to server0:80; No route to host

Thêm dịch vụ HTTP vào zone work và gán dải IP:

[root@server0 ~]# firewall-cmd --permanent --zone=work --add-service=http
[root@server0 ~]# firewall-cmd --permanent --zone=work --add-source=172.25.0.0/24
[root@server0 ~]# firewall-cmd --reload

Giờ đây client có thể truy cập thành công.

Ví dụ 2: Chuyển cùng dải IP sang zone trusted

[root@server0 ~]# firewall-cmd --permanent --zone=work --remove-source=172.25.0.0/24
[root@server0 ~]# firewall-cmd --permanent --zone=trusted --add-source=172.25.0.0/24
[root@server0 ~]# firewall-cmd --reload

Trong zone trusted, mọi kết nối đều được cho phép → truy cập HTTP vẫn hoạt động.

Ví dụ 3: Gán dải IP vào zone block

[root@server0 ~]# firewall-cmd --permanent --zone=trusted --remove-source=172.25.0.0/24
[root@server0 ~]# firewall-cmd --permanent --zone=block --add-source=172.25.0.0/24
[root@server0 ~]# firewall-cmd --permanent --add-service=http
[root@server0 ~]# firewall-cmd --reload

Mặc dù HTTP được mở trong zone public, nhưng vì lưu lượng từ 172.25.0.0/24 đi qua zone block (chỉ cho phép phản hồi ICMP), nên truy cập HTTP bị từ chối.

Ví dụ 4: Xóa quy tắc source → quay về zone mặc định

[root@server0 ~]# firewall-cmd --permanent --zone=block --remove-source=172.25.0.0/24
[root@server0 ~]# firewall-cmd --reload

Lưu lượng trở lại zone public → truy cập HTTP hoạt động trở lại.

Rich Rules – Quy tắc nâng cao

Cho phép điều kiện chi tiết hơn so với dịch vụ hoặc cổng thông thường.

Cho phép chỉ một IP truy cập HTTP

[root@server0 ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="http" source address="172.25.0.10" accept'

Cho phép toàn bộ dải mạng truy cập mọi dịch vụ

[root@server0 ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.25.0.0/24" accept'

Ví dụ khác

# Từ chối toàn bộ dải 172.25.1.0/24
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.25.1.0/24 reject'

# Giới hạn FTP: tối đa 100 kết nối/phút
firewall-cmd --permanent --add-rich-rule='rule service name=ftp limit value=100/m accept'

# Forward cổng 6666 → 22 trên cùng máy
firewall-cmd --permanent --add-forward-port=port=6666:proto=tcp:toport=22

# Forward cổng 7777 → máy khác (DNAT)
firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --add-forward-port=port=7777:proto=tcp:toport=22:toaddr=172.25.0.10

NAT với firewalld

Kích hoạt NAT (masquerade) để cho phép mạng nội bộ truy cập Internet:

[root@server0 ~]# firewall-cmd --permanent --add-masquerade
[root@server0 ~]# firewall-cmd --reload

Hoặc dùng rich rule để áp dụng điều kiện cụ thể:

# Áp dụng masquerade cho dải 192.168.0.0/24
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade'

Thẻ: firewalld linux-firewall network-security rich-rules port-forwarding

Đăng vào ngày 24 tháng 6 lúc 21:31