游乐游手机版
首页/系统平台/文章详情

Linux系统防火墙动态黑名单同步与更新任务配置

时间:2026-07-13 07:31
配置firewalld动态黑名单需加--permanent并执行--reload,否则规则不持久;批量封禁应使用--direct直写iptables避免性能瓶颈;还需校验规则是否生效,注意CentOS7上iptables-services与firewalld的服务冲突。

firewalld的动态黑名单功能看似简单,但在实际配置中容易踩坑,比如临时规则无法持久化、批量封禁效率低下、规则写入后未生效等问题。这些问题在线上环境中都会带来困扰。以下是几个关键要点:使用rich rule配置黑名单时必须添加--permanent参数,并执行--reload,否则重载后规则会丢失;rejectdrop各有适用场景,调试时建议用reject,生产环境静默丢弃则用drop;批量封禁大量IP时,应避免循环调用firewall-cmd,改用--direct直接写入iptables规则,性能更稳定。

如何在Linux中配置具体的系统级防火墙动态黑名单同步及更新任务

firewalld使用rich rule配置动态IP黑名单时必须加--permanent

许多人在测试时习惯使用--add-rich-rule而不加--permanent,虽然当时规则生效,但一旦执行firewall-cmd --reload,所有规则都会消失,往往会误以为是脚本配置错误。实际上,临时规则无法承受重载操作,将其用于黑名单管理等于徒劳。

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.44" reject'
sudo firewall-cmd --reload
  • reject会向客户端返回明确的拒绝响应(如Connection refused),在调试阶段非常有用;生产环境中若希望静默丢弃,则应使用drop
  • 对同一IP重复添加规则不会报错,但也不会产生叠加效果——firewalld不允许重复规则,第二次添加时会提示ERROR: timeout或直接静默忽略
  • 删除规则时,必须严格匹配字符串,包括引号和空格,使用--remove-rich-rulesource addressreject的顺序不能颠倒

黑名单批量更新时避免逐条调用firewall-cmd

在shell循环中逐条调用firewall-cmd,每条规则都会触发一次D-Bus通信和规则链重编译——当处理100个IP时,卡顿或超时几乎不可避免。线上环境必须采用合并操作的方式。

合理的做法是:先收集所有需要封禁的IP,生成临时规则文件,再通过--direct参数批量注入内核链:

sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 203.0.113.44 -j REJECT
sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.5.101 -j REJECT
  • --direct参数可以绕过firewalld的抽象层直接写入iptables,性能高且无额外延迟,非常适合高频封禁场景
  • 规则插入位置的数字(例如0)用于控制优先级,数字越小优先级越高,确保黑名单规则先于白名单生效
  • 上述规则默认不持久化,重启firewalld或系统后会丢失,需要配合firewall-cmd --runtime-to-permanent或手动保存到/etc/firewalld/direct.xml文件

同步任务中必须校验规则是否真实生效

许多自动化脚本仅以"命令返回0"作为成功标志,但实际规则可能并未进入防火墙链。常见错误原因包括:zone绑定到错误的网卡、rich rule被其他规则覆盖、firewalld服务未启动。

验证时不能仅依赖firewall-cmd --list-all,还需检查底层链:

  • 首先确认当前活跃的zone:执行firewall-cmd --get-active-zones,确保目标IP位于你操作的zone(例如public)中
  • 检查rich rule是否已写入:firewall-cmd --zone=public --list-rich-rules
  • 查看底层iptables是否命中:sudo iptables -L INPUT -n -v | grep 203.0.113.44
  • 最简单的模拟测试是从被封IP的机器上运行curl -v https://your-server:80,预期会看到Connection refused或直接超时

CentOS 7上持久化黑名单需特别注意服务状态

CentOS 7.9已于2024年6月停止维护,但仍有许多旧系统在使用。该系统默认启用firewalld,但某些镜像预装了iptables-services并设置为开机自启,导致firewalld被屏蔽,使得向firewalld添加的规则无法生效。

检查与修复步骤如下:

  • 确认当前实际运行的服务:执行systemctl is-active firewalldsystemctl is-active iptables,仅允许一个为active (running)
  • 如果iptables正在运行,停止并禁用:sudo systemctl stop iptables && sudo systemctl disable iptables
  • 启用firewalld:sudo systemctl enable --now firewalld
  • 验证:firewall-cmd --state应输出running,且iptables -L的输出中不应出现手动添加的DROP规则

规则持久化本身并不复杂,但旧系统中服务冲突的现象比预想更为普遍。如果不先仔细检查就编写脚本,相当于往空配置里填充数据——徒劳无功。

来源:https://www.php.cn/faq/2812866.html
上一篇统信UOS安装VS Code的详细教程 下一篇电脑0x80070015设备尚未准备就绪错误修复教程
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CentOS 7手动释放内存缓存的详细方法
系统平台 · 2026-07-13

CentOS 7手动释放内存缓存的详细方法

手动清理Linux内存缓存需先执行三次sync防丢数据。echo1清页缓存,echo2清目录与inode缓存,echo3全清但慎用。清理前依据available而非free判断内存压力,清理后关注available及swap使用率。

Mac菜单栏查看当前WiFi频率的实用方法
系统平台 · 2026-07-13

Mac菜单栏查看当前WiFi频率的实用方法

Mac无需第三方工具,按住Option键点击菜单栏Wi-Fi图标即可查看频率或信道;使用无线诊断工具的扫描信息可确认频段;系统报告中的PHYMode字段显示硬件级协商结果,三种方法覆盖从桌面快捷查看到底层验证。

CentOS 7系统默认语言修改方法
系统平台 · 2026-07-13

CentOS 7系统默认语言修改方法

CentOS7修改默认语言需先安装zh_CN UTF-8语言包,再通过localectl或 etc locale conf设置LANG为zh_CN UTF-8。修改后验证locale输出,注意避免LC_*变量覆盖,图形界面与日志可能需额外处理。

Linux查看具体磁盘逻辑卷管理组坏块屏蔽记录
系统平台 · 2026-07-13

Linux查看具体磁盘逻辑卷管理组坏块屏蔽记录

LVM本身不记录或管理坏块,坏块屏蔽由文件系统(如e2fsck将坏块列表写入超级块)和硬盘固件(如S M A R T 重映射)处理。用户需绕过LVM层,必须直接检查物理设备(如 dev sdb2)的坏块列表及重映射计数等信息,才能确认其屏蔽记录情况。

银河麒麟系统Prometheus安装配置方法详解
系统平台 · 2026-07-13

银河麒麟系统Prometheus安装配置方法详解

在银河麒麟系统上部署Prometheus,需先确认CPU架构(ARM64或AMD64),下载对应安装包,创建标准目录并解压。接着配置自监控,创建非root用户,手动启动验证。最后注册为systemd服务,实现开机自启。注意配置文件路径及权限设置。