绝了!端口这样藏,黑客扫到哭也扫不出来(端口敲门实战教程)(转)
绝了!端口这样藏,黑客扫到哭也扫不出来(端口敲门实战教程)(转)
作为运维工程师,你是不是总担心服务器端口被暴力破解?直接关闭端口不方便,开放端口又怕被扫描攻击?今天分享一个「端口敲门(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是否开启,如图显示端口关闭:

然后在客户端执行以下命令,按顺序访问敲门端口(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 指定敲门端口

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

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

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

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

浙公网安备 33010602011771号