绝了!端口这样藏,黑客扫到哭也扫不出来(端口敲门实战教程)(转)

绝了!端口这样藏,黑客扫到哭也扫不出来(端口敲门实战教程)(转)

原文地址

作为运维工程师,你是不是总担心服务器端口被暴力破解?直接关闭端口不方便,开放端口又怕被扫描攻击?今天分享一个「端口敲门(Knockd)」黑科技 —— 把服务端口藏起来,只有按指定顺序 “敲门” 才能访问,让黑客的扫描工具彻底失效!

一、什么是端口敲门?

端口敲门(Port Knocking)是一种 “隐蔽认证” 机制:服务器默认关闭目标端口(比如 SSH 的 22端口,https的443端口等),任何扫描都显示端口关闭;只有客户端按固定顺序、固定协议访问指定的 “敲门端口”(比如 1234→1235→1236),服务器才会临时开放目标端口;超时后自动关闭端口,全程无日志泄露、无认证痕迹,比密码 + 密钥更安全!

二、实战部署:5 分钟搞定端口敲门

1. 安装 knockd 服务

knockd 是实现端口敲门的核心工具,直接用 yum 安装,

yum install knock-server -y

2. 配置敲门规则

编辑主配置文件 /etc/knockd.conf,定义敲门序列和端口策略

vi /etc/knockd.conf
[options]
UseSyslog          # 启用系统日志
interface= ens33   # 监听的网卡(根据自己服务器修改)
LogFile =/var/log/knockd.log  # 自定义日志文件
[opencloseSSH]
sequence      = 1234:tcp,1235:tcp,1236:tcp  # 敲门序列:1234→1235→1236(TCP 协议)
seq_timeout   = 15                           # 敲门超时时间:15 秒内完成才有效
tcpflags      = syn                          # 只识别 SYN 包(避免无效请求)
#敲门成功后执行:临时允许该 IP 访问 1022 端口(SSH 端口)
start_command = /sbin/iptables -I INPUT -s % IP% -p tcp --dport 1022 -j ACCEPT
cmd_timeout   = 60                           # 端口开放时长:60 秒
#超时后执行:移除该 IP 的访问权限
stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 1022 -j ACCEPT

核心参数说明:
sequence:自定义敲门端口,建议用乱序无规律端口,避免被猜中;
% IP%:自动识别敲门客户端的 IP,精准授权,不影响其他 IP;
cmd_timeout:端口开放时间按需调整(比如 30 秒足够登录 SSH)

3. 启动并开机自启 knockd

systemctl start knockd
systemctl enable knockd
systemctl status knockd

4. 设置默认拒绝策略

默认关闭 1022 端口,只有敲门成功才放行:

iptables -I INPUT 1 -p tcp --dport 1022  -j DROP
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

三、客户端 “敲门”

1. 标准敲门步骤(用 nmap 工具)

敲门前先检查1022是否开启,如图显示端口关闭:

1

然后在客户端执行以下命令,按顺序访问敲门端口(15 秒内完成):

nmap -Pn 192.168.109.129 -p1234  # 第一次敲门:1234 端口
nmap -Pn 192.168.109.129 -p1235  # 第二次敲门:1235 端口
nmap -Pn 192.168.109.129 -p1236  # 第三次敲门:1236 端口

参数说明:

-Pn 跳过主机存活检测,直接发送端口探测包;
-p 指定敲门端口

2

再次探测1022端口是否开启,如图显示端口已开启:

3

同时knock.log显示防火墙增加了1022允许访问的规则:

4

查看防火墙规则也显示增加了新规则,如下图

5

2. 敲门成功后就可以登录 SSH了

60 秒内(配置的 cmd_timeout),用 SSH 连接 1022 端口即可登录:

ssh root@192.168.109.129 -p1022

注意:超时后再次连接会被拒绝,需重新敲门!

测试成功了你也可以定义更其他端口敲门规则如下,增加443,80:

[options]
        UseSyslog
        interface= ens33
        LogFile =/var/log/knockd.log
[opencloseSSH]
        sequence      = 1234:tcp,1235:tcp,1236:tcp
        seq_timeout   = 15
        tcpflags      = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 1022 -j ACCEPT
        cmd_timeout   = 300
        stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 1022 -j ACCEPT

[opencloseHTTP]
        sequence      = 23:tcp,24:tcp,25:tcp
        seq_timeout   = 15
        tcpflags      = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 80 -j ACCEPT
        cmd_timeout   = 300
        stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 80 -j ACCEPT

[opencloseHTTPS]
        sequence      = 35:tcp,34:tcp,33:tcp
        seq_timeout   = 15
        tcpflags      = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 443 -j ACCEPT
        cmd_timeout   = 300
        stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 443 -j ACCEPT

四、安全升级:让敲门更难被破解

  • 自定义复杂敲门序列:别用 1234→1235→1236 这种简单序列,比如改成 5678:udp,8765:tcp,9876:udp(混合 TCP/UDP 协议,增加破解难度);
  • 日志监控:定期查看 /var/log/knockd.log,发现异常敲门序列及时更换;
  • 配合密钥登录:端口敲门 + SSH 密钥 + 禁用密码登录,三重防护,几乎无法破解。

五、常见问题排查

敲门后无法登录:

  • 检查 knockd 服务是否运行:systemctl status knockd;
  • 核对敲门序列和协议(TCP/UDP)是否与配置一致;
  • 查看 iptables 规则:iptables -L INPUT -n | grep 1022,确认是否有临时放行规则。

服务启动失败:

  • 检查 interface 参数是否正确(比如网卡是 ens192 而非 ens33);

六、最后:为什么推荐端口敲门?

  • 零暴露:默认端口关闭,扫描工具显示 “端口过滤 / 关闭”,黑客无法定位目标;
  • 轻量:knockd 占用资源极低,不影响服务器性能;
  • 灵活:支持多序列、多端口、多协议,可适配不同场景(比如数据库、远程桌面)。

相比传统的 “改 SSH 端口 + 防火墙”,端口敲门相当于给服务器加了一道 “隐形门”—— 只有知道 “敲门密码” 的人,才能打开这扇门。赶紧给你的服务器安排上,从此告别端口被扫的烦恼!

posted @ 2026-03-06 11:27  汉学  阅读(1)  评论(0)    收藏  举报