firewalld 通过 ipset 实现高效 IP 批量管控,需用 firewall-cmd 创建 hash:net 类型集合(如 cn_ip),从文件或命令行导入网段,再以富规则在 public 区域中优先 accept 后 reject,并 reload 生效。

firewalld 集成 ipset 是实现高效 IP 地址批量管控的主流方式,核心在于用集合替代单条规则,避免规则膨胀、提升匹配性能。关键不是“加多少条规则”,而是“建一个集合,再用一条规则引用它”。
创建并维护 ipset 集合
firewalld 管理的 ipset 存放在 /etc/firewalld/ipsets/ 目录下,必须通过 firewall-cmd 创建,不能混用系统级 ipset 命令。
- 新建一个用于中国 IP 的 hash:net 类型集合:
firewall-cmd --permanent --new-ipset=cn_ip --type=hash:net - 从文件批量导入网段(如 cn.zone):
firewall-cmd --permanent --ipset=cn_ip --add-entries-from-file=/root/cn.zone - 添加单个 IP 或 CIDR:
firewall-cmd --permanent --ipset=cn_ip --add-entry=202.96.0.0/16 - 确认内容是否写入:
firewall-cmd --permanent --info-ipset=cn_ip或直接查看/etc/firewalld/ipsets/cn_ip.xml
在 firewalld 规则中引用 ipset
firewalld 不支持直接对 ipset 设置 ACCEPT/DROP,需结合区域(zone)或富规则(rich rule)使用。推荐在 public 区域中设置“仅允许集合内 IP 访问”。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先清空该区域默认的通用放行规则(如 ssh/http),避免冲突
- 添加一条富规则,拒绝所有非集合内的入向连接:
firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="cn_ip" accept' - 再加一条兜底拒绝规则:
firewall-cmd --permanent --zone=public --add-rich-rule='rule reject' - 注意顺序:accept 规则必须在 reject 之前生效,firewalld 按添加顺序匹配
确保配置持久化并生效
所有带 --permanent 的操作都只是写入配置文件,不会立即影响运行时规则。
- 完成配置后必须重载:
firewall-cmd --reload - 验证运行时是否加载了 ipset:
firewall-cmd --get-ipsets和firewall-cmd --ipset=cn_ip --get-entries - 检查当前 zone 规则链是否包含对应富规则:
firewall-cmd --zone=public --list-rich-rules - 重启 firewalld 不会丢失 --permanent 配置,但 reload 更安全、更轻量
日常维护与安全提醒
ipset 内容需要定期更新,尤其当 IP 地址库变动时;同时要防止管理员自身被误封。
- 建议将管理 IP(如办公出口、跳板机)单独加入白名单集合,并优先于 cn_ip 规则启用
- 更新 ipset 后仍需执行
firewall-cmd --reload才能生效 - 不要手动编辑
/etc/firewalld/ipsets/*.xml文件,应始终使用 firewall-cmd 操作 - 若使用脚本自动拉取 cn.zone,请确保 wget 超时和校验机制,避免空文件导致全站不可访问

















