在网络安全领域,SSH(Secure Shell)是一种常用的加密协议,用于在不安全的网络上进行安全的远程登录和其他安全网络服务。然而,SSH服务默认监听的22端口常常成为攻击者的目标,他们会使用各种方法尝试破解SSH密码,从而获得系统的控制权。为了保护SSH服务,除了基本的强密码和双因素认证外,还有一种名为“端口敲门”的技术可以显著提高SSH的安全性。
什么是端口敲门?
端口敲门(Port Knocking)是一种安全措施,它通过在防火墙上动态打开端口来允许合法用户访问受保护的服务。具体来说,端口敲门技术要求用户在尝试连接到SSH服务之前,按照预定义的顺序访问一系列隐藏端口。这种技术通过在网络层添加额外的验证步骤,有效地隐藏了实际的服务端口,并减少了被暴力破解的风险。
端口敲门的工作原理
- 预定义端口序列:管理员设定一组特定的端口序列,例如,访问端口1111、2222和3333,顺序和时间间隔都非常重要。
- 防火墙配置:防火墙初始配置为拒绝所有进入的SSH连接请求。
- 敲门事件:用户在尝试SSH连接之前,必须按照正确的顺序和时间间隔访问预定义的端口序列。
- 防火墙规则更新:当防火墙检测到正确的端口敲门序列时,它会暂时开放SSH端口(如22端口),允许该用户的IP地址连接SSH服务。
- 连接和关闭:用户成功连接SSH后,防火墙可以设置为在一段时间后自动关闭SSH端口,以恢复安全状态。
端口敲门的优点
- 隐藏性:由于服务端口关闭,因此对外部观察者来说,系统上可能存在的服务是不可见的。
- 安全性:不会直接暴露真实的服务端口,只有在正确的端口敲击序列被触发后才会打开相应的端口,这增加了系统的安全性。
- 防止扫描攻击:由于服务端口一直处于关闭状态,因此对端口的扫描攻击几乎没有意义。
实现端口敲门
实现端口敲门的方法有很多种,下面介绍使用 knockd 工具实现端口敲门的基本步骤:
1.安装 knockd
在大多数Linux发行版上,你可以通过包管理器安装 knockd:
sudo apt-get install knockd
2.配置 knockd
安装完成后,编辑 knockd 的配置文件,通常位于/etc/knockd.conf,添加你的敲门序列和相应的动作,例如:
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 1234,5678,9012
seq_timeout = 15
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9012,5678,1234
seq_timeout = 15
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
我们需要修改的另一个配置是 /etc/default/knockd,例如:
# control if we start knockd at init or not
# 1 = start
# anything else = don't start
# PLEASE EDIT /etc/knockd.conf BEFORE ENABLING
START_KNOCKD=1
# command line options
KNOCKD_OPTS="-i eth0"
找到行START_KNOCKD=0 。取消注释,并将值设置为 1。接下来,转到取消KNOCKD_OPTS="-i eth1"注释行,并将默认值替换为系统的活动网络接口,要检查您的网络接口,只需运行 ip addr或 ifconfig命令。
3.启动 knockd
配置完成后,启动 knockd 服务,并设置开机启动。
sudo systemctl start knockd
sudo systemctl enable knockd
启动成功如下图:
4.使用端口敲门
要使用端口敲门,可以使用 knock 命令行工具或其他类似工具:
knock your.server.com 1234 5678 9012
完成敲门后,你的IP地址将被允许访问SSH服务。
现在通过关闭端口进行测试,先通过192.168.31.103 9999 8888 7777关闭SSH端口。如下图所示:
现在要登录已经被完美阻击了,如下图:
要想登录就要先敲门,输入正确的敲门端口序列,如下:
knock 192.168.31.103 7777 8888 9999
成功敲门后,SSH端口就处于开放中,这时,我们就可以通过SSH登录到服务器,如下图所示:
其他服务器服务器想登录该服务器,要先进行敲门才能正常访问SSH端口。当客户端正确敲门后,服务端会再防火墙插入一条策略。如下图:
结论
端口敲门技术通过增加一个额外的验证步骤,有效地提高了SSH服务的安全性。它不仅隐藏了实际的服务端口,还减少了被暴力攻击的风险。虽然端口敲门并不能替代强密码和双因素认证等其他安全措施,但它作为一种额外的保护层,可以显著增强系统的安全性。通过合理配置和使用端口敲门,你可以大大降低SSH服务被攻击的概率,从而保护你的网络资源和数据安全。