端口敲门教程,防止端口被扫被爆破的简单方法

简介

端口敲门通过关闭SSH端口,服务器监听预设的端口序列,当客户端按正确顺序敲门后,防火墙规则动态开放SSH端口,仅允许敲门成功的IP访问,阻止未授权访问。

提示: 为了防止把自己关在门外,建议先测试再上生产环境,以下配置我是亲自测试过的能正常运行。

1:安装iptables

大部分常见的Linux发行版已经默认安装了,无需额外安装,并且你安装了Docker后也是肯定安装了iptables。可以运行iptables --version查看版本。如果没有安装,可以执行这个命令安装:

sudo apt update && sudo apt install iptables -y

2:安装端口敲门程序knockd

sudo apt update && sudo apt install knockd -y

3:配置knockd

knockd的默认配置文件路径在/etc/knockd.conf

[options]
    UseSyslog
    logfile = /var/log/knockd.log

# 开启SSH访问 - 只允许敲门的IP访问
[openSSH]
    sequence    = 5003,5001
    seq_timeout = 15
    start_command = /sbin/iptables -C INPUT -s %IP% -p tcp --dport 22 -j ACCEPT || /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT
    tcpflags    = syn
    cmd_timeout = 10

# 关闭所有SSH访问 - 阻止所有IP
[closeSSH]
    sequence    = 7001
    seq_timeout = 15
    start_command = /sbin/iptables -C INPUT -p tcp --dport 22 -j DROP || /sbin/iptables -I INPUT 1 -p tcp --dport 22 -j DROP && /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT 2>/dev/null
    tcpflags    = syn
    cmd_timeout = 10

可以将配置中的syn改成all,代表需要成功建立tcp三次握手才能触发敲门。也可以多增加几个敲门端口,也可以改成仅udp敲门,这样的话会加大触发敲门动作的难度

4:启动knockd

sudo systemctl enable knockd
sudo systemctl start knockd

5:关门

网页访问7001端口关闭SSH服务,阻止所有IP访问SSH
可以断开SSH连接,然后重新连接测试一下

6:敲门

按顺序网页访问50035001端口,即使网页返回无响应也能成功触发敲门,需要15秒内完成动作,敲门后会自动放行敲门的IP允许连接SSH。

Liunx可以使用wget等命令敲门

wget小提示:wget可以快速测试某个端口通不通,不通的话会直接返回拒绝连接

(可选)关闭端口敲门

停止并禁用knockd

sudo systemctl stop knockd
sudo systemctl disable knockd

清除防火墙所有的自定义规则

sudo iptables -F

PS:

knockd不会监听和占用这些端口,所以访问都是无响应。这些端口仍然是空闲的,可以被其他服务使用。knockd 只是被动地检测这些端口是否有流量。并且触发敲门后运行的指令也可以自定义,不局限于操作防火墙。

追加更新

  • 端口敲门不只是这个工具,还有很多工具也能实现端口敲门,这个工具我觉得配置简单方便罢了
  • 对于SSH防爆破使用仅密钥认证依然是最安全的方式,端口敲门是为了便利性的情况下增加了安全性,不会配置仅密钥认证的可以看下我博客帖子
  • 即使使用了端口敲门,密码也需要用强密码
  • 端口敲门不仅限于SSH服务,还能实现更多玩法,可以更改端口敲门后触发的指令,不局限于操作防火墙,本文只是使用SSH服务用作演示
139 个赞

感谢大佬教程!

3 个赞

多谢佬的教程

1 个赞

把錯誤代碼洗亂,我不想別人撿到我的服器能直接用

6 个赞

什么错误代码

2 个赞

感谢大佬分享。

3 个赞

这么有意思有应用。看来还是总来L

1 个赞

感谢分享

1 个赞

有点意思

1 个赞

感谢大佬分享。

3 个赞

感谢分享,我可以在我家里的NAS增加这个技术.这样防止外人连接到我家里

1 个赞

正常請求

1 个赞

感谢分享,学到了

1 个赞

有意思:thinking:

1 个赞

这个端口敲门不会监听和占用端口,所以访问都是无响应。你可以在对应的端口起个服务,具体返回什么信息就看你部署的服务了。

这些端口仍然是空闲的,可以被其他服务使用。knockd 只是被动地检测这些端口是否有流量。

2 个赞

這個好強
不過是不是苦了用工具連接的孩子
比如我

1 个赞

不妨碍你用工具连接呀,连接之前用网页访问触发端口敲门,然后自动放行了你的IP后就可以连接了,我就是用的FinalShell

这个有点意思呢,我现在防爆破是上了密钥

找到的:point_right:更详细的资料

有点意思

敲敲敲 敲开我的大门