Từ OpenWrt 22.03, firewall4 (fw4) dùng nftables làm backend mặc định nhưng vẫn đọc cú pháp UCI quen thuộc trong /etc/config/firewall. Vì firewall chỉ bao phủ một tập hợp hợp lý của Netfilter, những rule nftables đặc biệt phải đi qua cơ chế include; không nên ép mọi thứ vào một config rule.1
Cảnh báo: Backup
/etc/config/firewalltrước khi sửa. Sau khi đổi, kiểm tra kỹ rồi mới reload; nếu khóa mất truy cập, dùng Failsafe để khôi phục. Không mở port Internet chỉ vì rule “trông đúng”.1
Quản lý bằng LuCI và UCI
Trong LuCI, vào Network → Firewall. LuCI ánh xạ gần với các section trong file nhưng có thể xóa các dòng comment #. Với CLI, uci sửa giá trị trong /etc/config/firewall; uci commit chỉ lưu thay đổi, còn cần reload firewall để sinh bảng mới. Nguồn cảnh báo rằng uci không hiểu nội dung script /etc/firewall.user.1
Tạo một rule từ UCI:
| |
Kiểm tra UCI đã tạo gì:
| |
Nếu muốn xem lỗi parse và chẩn đoán khi reload, dùng /etc/init.d/firewall reload hoặc fw4 reload, đọc toàn bộ output trước khi đóng phiên SSH.1
Các section cốt lõi
defaults
Defaults quyết định chính sách mặc định và các bảo vệ chung:
| |
zone
Zone gom một hoặc nhiều interface. Zone WAN thường bật masquerade và mtu_fix:
| |
input là traffic đi vào chính router qua zone, output là traffic xuất phát từ router, còn forward là traffic đi xuyên qua. masq áp dụng NAT cho traffic IPv4 đi ra zone; thường dùng trên WAN.1
forwarding
Forwarding có hướng, không tự động hai chiều:
| |
Muốn cho hai zone đi qua lại, phải tạo hai forwarding với src và dest đảo chiều; đồng thời ít nhất một phía phải có connection tracking phù hợp, thường là zone có masq.1
rule
Rule lọc traffic theo zone, IP, MAC, port, protocol, family và target:
| |
Một ví dụ rule cho phép SSH từ mạng LAN cụ thể tới server:
| |
Nếu chỉ có src, rule áp dụng traffic đi vào router; chỉ có dest là traffic đi ra; có cả hai là traffic forwarding. src_ip/dest_ip nhận IP hoặc CIDR, port range dùng dạng start-stop, còn proto và family phải khớp traffic thật.1
redirect: DNAT và SNAT
DNAT chuyển traffic đến host nội bộ:
| |
SNAT đổi nguồn của traffic đi ra:
| |
Với DNAT, src_dport phải chỉ rõ port nguồn nếu không muốn mở nhầm mọi port phù hợp các điều kiện còn lại. Kiểm tra từ Internet và giới hạn source khi có thể.1
IP sets
IP set dùng để match một danh sách địa chỉ thay vì viết nhiều rule. Khi đọc tài liệu, phân biệt option của fw3 và fw4, loại IP set, storage/match option và cách rule/redirect tham chiếu ipset. Không dùng tên set chưa được tạo; nếu package tạo set tự động thì kiểm tra thứ tự khởi động và log firewall.1
Include nftables trên fw4 (22.03+)
UCI firewall không bao phủ tất cả Netfilter. Với fw4, có hai cách: include snippet nftables vào vị trí trong table/chain, hoặc include shell script tương thích. Ví dụ snippet đặt trong chain:
| |
Ví dụ include ở cuối table:
| |
Nếu dùng script /etc/firewall.user, khai báo type 'script' và đánh dấu script tương thích fw4:
| |
fw4 cũng có drop-in include tự động dưới /usr/share/nftables.d/ khi auto_includes bật. Các package có thể dùng hook này; không đặt script tùy tiện vào hook mà không kiểm tra thứ tự và phạm vi chain.1
Include kiểu fw3 và quy trình reload
Trên OpenWrt 21.02 trở về trước, type 'script' và /etc/firewall.user là nhánh fw3 cũ; không mang nguyên ví dụ fw3 sang fw4 nếu chưa kiểm tra cú pháp nftables. Một include fw3 tối giản trong nguồn là:
| |
Sau mọi thay đổi:
- Kiểm tra diff của
/etc/config/firewallvà file include. uci commit firewallnếu sửa bằng UCI.- Chạy reload và đọc diagnostics.
- Kiểm tra truy cập LuCI/SSH, traffic LAN→WAN, zone isolation và port publish.
- Nếu mất kết nối, vào Failsafe và khôi phục backup.
Firewall là hợp đồng giữa zone, forwarding, rule, redirect và include. Build thành công không chứng minh chính sách an toàn; test thực tế trên từng hướng traffic.1


Góp Ý / Bình Luận / Đánh giá