当前位置: 首页 > news >正文

Linux 的 Port Knocking 端口碰撞(端口敲门)

1. 什么是Port Knocking 端口碰撞(敲门)

敲门协议本质上是一种通过预定义的端口序列来控制防火墙规则的技术。服务器上的某些端口(比如SSH的22端口)默认是关闭的,只有当客户端按照正确的顺序访问指定端口后,防火墙才会临时开放目标端口。

这种技术最大的好处就是可以让你的服务器在网络扫描中完全隐身。黑客用nmap扫描的时候,会发现你的服务器上没有任何开放的端口,就像一个"幽灵服务器"一样。

端口碰撞是一种通过在一组预先指定的[关闭端口]上产生连接请求,从外部打开防火墙上的端口的方法。一旦收到正确的连接请求序列,防火墙规则就会被动态修改,以允许发送连接请求的主机通过特定端口进行连接。

在Linux中称为 Knockd服务,该服务通过动态的添加iptables规则来隐藏系统开启的端口,使用自定义的一系列序列号来“敲门”,使系统开启需要访问的服务端口,才能对外访问。不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。

端口碰撞的主要目的是防止攻击者通过进行端口扫描来扫描系统中潜在的可利用服务,因为除非攻击者发送正确的碰撞序列,否则受保护的端口将显示为关闭。

敲门协议的工作流程其实不复杂,但是实现起来需要一些技巧。当你配置好敲门协议后,服务器会监听网络流量,寻找特定的端口访问模式。比如说,你设置的敲门序列是:先访问1234端口,然后访问5678端口,最后访问9999端口。服务器上运行着一个守护进程,它会记录每个IP地址的端口访问历史。当某个IP按照正确的顺序访问了这三个端口后,守护进程就会修改防火墙规则,临时开放SSH端口(或者其他你想要开放的端口)给这个IP地址。这个过程有点像是在玩密室逃脱游戏,你需要按照正确的顺序触发机关,最后的门才会打开。不过这里有个细节需要注意,敲门的端口访问通常是有时间限制的。如果你敲门的间隔太长,服务器可能会重置计数器,你就需要重新开始敲门序列。

例子:

在扫描某台服务器的开放端口时,22端口ssh服务是被过滤的,并且无法进行ssh连接。在这台服务器上设置:同一个用户依次对1024,2024,3024端口进行访问,则开启22端口,并允许外部机器进行访问。

2. 如何进行端口碰撞

2.1 knock命令

安装knockd服务:sudo apt install knockd

启动knockd服务:systemctl start knockd

配置knockd服务:

$ vim /etc/knockd.conf
[options]# UseSyslogLogFile = var/knock/knock.log[openSSH]# 定义敲门暗号顺序sequence    = 1024,2024,3024# 设置超时时间,时间太小可能会出错seq_timeout = 30# 设置敲门成功后所执行的命令# 在ubuntu系统iptables规则默认是禁止所有的规则,如果直接添加规则默认是在drop all规则之后,因此需要先删除drop all的规则再添加所要设置的规则,最后重新添加drop all的规则。# command = /sbin/iptables -D INPUT -p tcp --dport 22 -j DROP && /sbin/iptables -A INPUT -s [允许远程的IP] -p tcp --dport 22 -j ACCEPT && /sbin/iptables -A INPUT -p tcp --dport 22 -j DROPcommand     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPTtcpflags    = syn[closeSSH]sequence    = 3024,2024,1024seq_timeout = 30command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPTtcpflags    = syn[openHTTPS]sequence    = 12345,54321,24680,13579seq_timeout = 5command     = /usr/local/sbin/knock_add -i -c INPUT -p tcp -d 443 -f %IP%tcpflags    = syn

配置文件的一些说明:

  • openssh是开启端口的设置,closessh是关闭端口的设置。
  • sequence 按照顺序依次访问端口,command执行的条件。比如这里是依次访问7000, 8000, 9000端口,默认使用TCP访问。
  • command 当knockd监测到sequence端口访问完成,然后执行此处command,这里为通过iptables开启关闭ssh外部访问。

使用:knock <IP> <PORT1> <PORT2> <PORT3> <PORT4> -v

上面的例子中,开启22端口则执行:knock 192.168.22.14 1024 2024 3024 -v

上面的例子中,关闭22端口则执行:knock 192.168.22.14 3024 2024 1024 -v

在[Rocky Linux]release 8.10上安装knockd很简单,需要先启用EPEL仓库:

sudo dnf install epel-release -y 
sudo dnf install knock-server -y

Rocky Linux默认使用firewalld作为防火墙管理工具,但是knockd更适合直接操作iptables。所以我一般会这样配置:

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo dnf install iptables-services -y
sudo systemctl enable iptables
sudo systemctl start iptables

但是配置文件就比较有讲究了。knockd的配置文件在/etc/knockd.conf,我当时的配置大概是这样的:

[root@webtest ~]# cat /etc/knockd.conf[options]UseSysloginterface = ens33
[openSSH]sequence    = 7000,8000,9000seq_timeout = 5command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPTtcpflags    = syn[closeSSH]sequence    = 9000,8000,7000seq_timeout = 5command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPTtcpflags    = syn

这个配置定义了两个敲门序列:一个用来开启SSH访问,一个用来关闭SSH访问。开启的序列是7000-8000-9000,关闭的序列是反过来的9000-8000-7000。

但是实际使用中发现了一个问题:如果你忘记了关闭序列,或者网络中断了,那个临时的防火墙规则就会一直存在。后来我加了一个定时任务,每隔一段时间自动清理这些临时规则。

还有一个坑是关于防火墙的。我们服务器上同时运行着ufw和iptables,结果knockd添加的规则被ufw给覆盖了。折腾了半天才发现这个问题,最后统一使用iptables来管理防火墙规则。

小脚本来自动敲门:

#!/bin/bash
HOST=$1
for port in 7000 8000 9000; donc -z $HOST $portsleep 1
done
ssh $HOST

这个脚本用nc命令快速检测端口,然后直接尝试SSH连接。

2.2 nmap命令

开启端口,使用nmap依次指定端口进行扫描:

nmap 192.168.22.14 -p 1024
nmap 192.168.22.14 -p 2024
nmap 192.168.22.14 -p 3024

关闭端口:

nmap 192.168.22.14 -p 3024
nmap 192.168.22.14 -p 2024
nmap 192.168.22.14 -p 1024

2.3 telnet命令

开启端口,使用telnet依次访问端口:

telnet 192.168.22.14 1024
telnet 192.168.22.14 2024
telnet 192.168.22.14 3024
AI构建项目bash123

关闭端口:

telnet 192.168.22.14 3024
telnet 192.168.22.14 2024
telnet 192.168.22.14 1024

2.4 nc命令

开启端口,使用nc依次访问端口:nc -z 192.168.22.14 1024 2024 3024

关闭端口:nc -z 192.168.22.14 3024 2024 1024

http://www.rkmt.cn/news/126998.html

相关文章:

  • 2025年啤酒生产设备生产厂家权威推荐榜单:精酿啤酒设备厂家/啤酒厂设备/大型啤酒厂设备源头厂家精选 - 品牌推荐官
  • Spring Boot 机制一: 自动配置原理源码级深度讲解 - 教程
  • 如何在PHP中实现接口的多继承?
  • 7D互动影院革新娱乐体验,探秘5D影院设备生产厂家
  • 【收藏向】大模型系列:从原理到代码,零基础吃透LLM训练与推理
  • 重磅消息!ESXi 8.0 系列推出ESXi 8.0 Update 3h 更新重要版本啦
  • 【保姆级教程】Attention机制全解析!用PyTorch手写Transformer,大模型开发入门到精通!
  • 2025公共金属家具制造企业TOP5权威测评:河北优美实力怎么样 - mypinpai
  • 【必收藏】2025大模型浪潮下,程序员的职业突围指南:从被动淘汰到主动领跑
  • 从《黑镜》科幻预言到现实:AI 2027-2042年冲击全解析(附大模型学习路线+资料,建议收藏)
  • 2025-2026北京专业离婚律师评测推荐榜单:核心亮点与服务优势全攻略 - 老周说教育
  • 基于单片机的开关电源设计
  • 2025年育发生发液产品综合盘点:生发育发液/止脱生发/防脱生发深度解析与品牌参考 - 品牌推荐官
  • 8 个 AI 写作工具,MBA 论文写作不再难!
  • latex 公式 cheatsheet
  • 2025年12月45度防冻液,超流体散热快防冻液,水箱保护液防冻液厂家推荐榜:实测防冻效果解析 - 品牌鉴赏师
  • 2025年12月美发会员,理发店会员,美发会员厂家推荐:美发行业权威盘点与品质红榜发布 - 品牌鉴赏师
  • 2025年12月粉熊E520BTO阪熊润滑油,橙熊E320BTO阪熊润滑油,蓝熊E220BTO阪熊润滑油厂家推荐:行业权威盘点与品质红榜发布 - 品牌鉴赏师
  • 国内食用盐实力企业推荐,汉沽盐场品质之选 - mypinpai
  • IAR Embedded Workbench 常用宏变量(Argument Variables)备忘录
  • 最新AI换脸软件,全面升级可直播,Mirage下载介绍(支持cpu)
  • 2025年装修设计企业客户首选品牌TOP5,别墅装修/豪宅设计/家居装修/家居设计品牌哪个好 - 品牌推荐师
  • Open-AutoGLM模式匹配加速实战(从毫秒到微秒的跨越)
  • 还在为显存溢出崩溃?Open-AutoGLM内存压缩5步极速瘦身法
  • 2025年12月理发店会员,美发会员,理发店会员厂家品牌推荐榜,彰显美发会员服务国产技术实力 - 品牌鉴赏师
  • 从选题到框架:8个 AI 工具,把开题报告的 “难” 变成 “顺”
  • 从入门到精通:掌握Open-AutoGLM推理优化的7个关键步骤
  • 2025年12月喜糖伴手礼批发,喜糖伴手礼购买,喜糖伴手礼进货厂家品牌推荐榜,彰显国产供应链实力 - 品牌鉴赏师
  • 压接 + 焊接(最好)铜丝
  • vue3+springboot基于微信小程序的校园课程资料学习作业提交系统(编号:66245746)