如何利用Iptables的NFQUEUE将未使用端口的扫描流量导向诱饵

阿杰姑娘_2244

阿杰姑娘_2244

2026-05-30

147人浏览

原创

iptables的NFQUEUE可将未使用端口的扫描流量导向用户态诱饵程序,通过匹配非业务端口SYN包(如! --dport 22 ! --dport 80 ! --dport 443)并结合--state NEW和hashlimit限速识别异常连接,再由Python程序伪造SYN-ACK、记录指纹、调用ipset封禁,实现干扰扫描、收集特征与联动防御。

如何利用iptables的nfqueue将未使用端口的扫描流量导向诱饵

用 iptables 的 NFQUEUE 把未使用端口的扫描流量导向诱饵,本质是“先识别异常连接行为,再引流到用户态程序做响应控制”,而不是真把包转发给某个服务端口。这里的“诱饵”不是监听端口的进程,而是由你写的用户态程序模拟响应(如伪造 SYN-ACK、返回特定载荷、记录指纹),从而干扰扫描器判断、收集攻击特征或触发联动封禁。

识别并拦截可疑扫描连接

扫描器探测未使用端口时,最典型的行为是发送大量 TCP SYN 包到非常规端口(如 12345、31337、65535 等),且源 IP 往往短时间内高频尝试多个端口。需用 iptables 规则精准捕获这类流量:

  • 匹配非业务端口的 SYN 包:例如只放行 22/80/443,其余新连接一律入队:
    iptables -I INPUT -p tcp --syn ! --dport 22 ! --dport 80 ! --dport 443 -j NFQUEUE --queue-num 0
  • 避免误伤:加 -m state --state NEW 确保只抓首次握手,不干扰已建立连接的 ACK 或数据包
  • 若想更严格,可结合 hashlimit 限制单 IP 每秒新建连接数(如 >5 个就入队):
    iptables -I INPUT -p tcp --syn -m hashlimit --hashlimit-above 5/sec --hashlimit-burst 3 --hashlimit-mode srcip --hashlimit-name scan_detect -j NFQUEUE --queue-num 0

用户态程序实现“诱饵响应”逻辑

Python 示例(需 root 权限运行,依赖 python3-netfilterqueue 和 scapy):

  • 监听队列 0,解析每个包的源 IP、目标端口、TCP 标志
  • 对匹配的扫描包,不直接 DROP,而是构造伪造响应(如伪造 SYN-ACK 诱导扫描器继续交互):
    – 用 scapy 构造 IP/TCP 层,设置 flags="SA"、随机 seq 和 ack;
    – 调用 send() 发回,再调用 payload.set_verdict(nfqueue.NF_STOLEN) 阻止原包进入协议栈(避免内核发 RST)
  • 同时记录源 IP、时间、端口列表,供后续写入 ipset 封禁:
    os.system(f"ipset add scanner-ip-set {src_ip} 2>/dev/null || true")

配套加固与防暴露机制

单纯引流还不够,要防止诱饵被识破或暴露真实环境:

  • 确保系统不监听这些“陷阱端口”:检查 ss -tln 或 netstat -tln,确认无残留服务绑定在 12345、65535 等端口上
  • 关闭内核自动回复 RST:扫描包若未被 NFQUEUE 拦截,内核默认会对未监听端口发 RST,暴露端口状态。可在入队规则前加一条 DROP(仅针对已知扫描 IP)或启用 net.ipv4.tcp_rmem 调优,但更稳妥的是确保 NFQUEUE 规则优先级足够高(用 -I 插入链首)
  • 配合 ipset 实现闭环:用户态程序识别出扫描行为后,立即调用 ipset 添加该 IP,并在 iptables 中添加规则拦截其所有后续流量:
    iptables -I INPUT -m set --match-set scanner-ip-set src -j DROP

验证与调试要点

部署后务必验证流程是否连贯:

  • 用另一台机器执行 hping3 -S -p 12345 target_ip 或 nmap -sS -p 12345,31337 target_ip 触发规则
  • 运行 tcpdump -i any port 12345 or port 31337 -nn 查看是否有伪造 SYN-ACK 发出
  • 检查 ipset list scanner-ip-set 是否新增条目
  • 确认 cat /proc/sys/net/ipv4/ip_forward 为 0(本机非网关时),避免 FORWARD 链干扰 INPUT 流量路径
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2026.10.22

120

11

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

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

2026.10.22

60

10

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

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

2026.10.22

60

15

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

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

2026.10.22

40

10

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

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

2026.10.22

60

25

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

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

2026.10.22

20

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

40

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

320

12

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

2026.10.22

40

16

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习