讲师中心 微信公众号
AI工具推荐 视频效率加速

怎么使用Linux的iptables/firewalld配合Workerman做动态黑名单?

云强同学_5131

云强同学_5131

发布时间:2026-05-21 23:49:39

|

637人浏览过

|

来源于php中文网

原创

不能直接在Workerman中exec('iptables -A...'),因需root权限、规则性能差、reload丢包且多进程易冲突;推荐用ipset+iptables组合,Workerman仅操作ipset实现毫秒级封禁。

怎么使用linux的iptables/firewalld配合workerman做动态黑名单?

iptables 和 firewalld 本身不支持“动态”黑名单——它们是静态规则引擎,每次加/删 IP 都要调用命令、触发内核重载。而 Workerman 是 PHP 进程模型的长连接框架,它自己能实时感知恶意请求(如高频登录、异常包),但不能直接操作内核防火墙规则。真正在生产中跑通「Workerman 触发封禁 → 防火墙立即生效」,必须靠中间层衔接。


为什么不能直接在 Workerman 里 exec('iptables -A ...')

看似可行,实则埋雷:
• exec() 调用需要 root 权限,PHP 进程通常以普通用户(如 www-data 或 workerman)运行,sudo 不配密码会暴露权限,配密码又难管理;
• 每次封一个 IP 就追加一条 iptables 规则,1000 个恶意 IP = 1000 条 INPUT 链规则,匹配性能线性下降,iptables -L 查看都卡顿;
• firewall-cmd --direct 同样有优先级、持久化、reload 冲突问题,且 reload 会短暂丢包;
• Workerman 多进程下并发调用同一条 shell 命令,可能规则写乱或漏加。


推荐方案:用 ipset + iptables 组合,Workerman 只操作 ipset

ipset 是专为海量 IP 匹配设计的内核模块,支持哈希查找 O(1),增删 IP 不影响规则链长度,且 iptables 可以一条规则匹配整个集合。
Workerman 只需执行轻量命令(如 ipset add bl_ip 192.168.1.100),完全规避上述问题。
实操要点:

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 先创建集合:sudo ipset create bl_ip hash:ip maxelem 65536(名字可自定,bl_ip 是集合名)
  • 让 iptables 关联它:sudo iptables -I INPUT -m set --match-set bl_ip src -j DROP(这条必须在所有 ACCEPT 规则之前)
  • Workerman 封禁时只需:shell_exec("ipset add bl_ip {$ip} 2>/dev/null"),无需 sudo(前提是给 www-data 用户授权)
  • 授权方式(推荐):sudo visudo 加一行:www-data ALL=(root) NOPASSWD: /usr/sbin/ipset
  • 解封同理:ipset del bl_ip {$ip},不需 reload,秒生效

firewalld 下怎么对接 Workerman?别硬套 direct 规则

firewalld 的设计哲学是「区域+服务」,不是为逐 IP 管理优化的。强行用 firewall-cmd --direct 插入上百条 REJECT 规则,等于放弃 firewalld 的优势,还比不过裸 iptables + ipset。
正确做法是:停用 firewalld,改用 iptables + ipset 组合,并确保 iptables-services 已启用:
• sudo systemctl stop firewalld && sudo systemctl disable firewalld
• sudo yum install iptables-services(CentOS/RHEL)或 sudo apt install iptables-persistent(Debian/Ubuntu)
• 启动 iptables 服务并保存当前规则:sudo systemctl enable iptables && sudo service iptables save
这样 Workerman 操作 ipset,底层仍是 firewalld 兼容的 netfilter,但控制权回到你手上。


Workerman 封禁逻辑里最容易漏的三件事

• 没做 IP 标准化:客户端可能是代理,$_SERVER['REMOTE_ADDR'] 是 CDN 或 Nginx 的地址,得从 X-Forwarded-For 提取,还要防伪造(需 Nginx 用 real_ip_header 配置可信源);
• 没设过期时间:恶意 IP 封 10 分钟就够了,ipset 支持 timeout:ipset create bl_ip hash:ip timeout 600,之后 ipset add bl_ip 1.2.3.4 timeout 600;
• 没做并发去重:同一 IP 在多 Worker 进程里被同时检测到,可能重复 ipset add 报错("Element is already added"),加个 @ 抑制或捕获 warning 即可,不影响结果。

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
Workerman安装配置教程
Workerman安装配置教程

Workerman安装配置教程专题提供Workerman安装配置、WebSocket开发、TCP通信、异步编程、高并发服务搭建与PHP实时通信开发教程。

206

2026.05.20

Workerman实时通信与长连接开发教程
Workerman实时通信与长连接开发教程

WWorkerman实时通信与长连接开发教程聚合实时通信、聊天室、长连接、消息推送、AI流式输出等Workerman高并发开发内容。

222

2026.05.20

Workerman异步通信与TCP服务器开发
Workerman异步通信与TCP服务器开发

Workerman异步通信与TCP服务器开发专题整理Workerman异步通信、TCP服务、HTTP服务、WebSocket开发与高并发PHP服务器教程。

227

2026.05.20

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

100

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

60

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

60

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

20

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

60

2026.10.22

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

20

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn