在网络安全领域,SSH(Secure Shell)是一种常用的加密协议,用于在不安全的网络上进行安全的远程登录和其他安全网络服务。然而,SSH服务默认监听的22端口常常成为攻击者的目标,他们会使用各种方法尝试破解SSH密码,从而获得系统的控制权。为了保护SSH服务,除了基本的强密码和双因素认证外,还有一种名为“端口敲门”的技术可以显著提高SSH的安全性。

什么是端口敲门?

端口敲门(Port Knocking)是一种安全措施,它通过在防火墙上动态打开端口来允许合法用户访问受保护的服务。具体来说,端口敲门技术要求用户在尝试连接到SSH服务之前,按照预定义的顺序访问一系列隐藏端口。这种技术通过在网络层添加额外的验证步骤,有效地隐藏了实际的服务端口,并减少了被暴力破解的风险。

端口敲门的工作原理

  1. 预定义端口序列:管理员设定一组特定的端口序列,例如,访问端口1111、2222和3333,顺序和时间间隔都非常重要。

  2. 防火墙配置:防火墙初始配置为拒绝所有进入的SSH连接请求。

  3. 敲门事件:用户在尝试SSH连接之前,必须按照正确的顺序和时间间隔访问预定义的端口序列。

  4. 防火墙规则更新:当防火墙检测到正确的端口敲门序列时,它会暂时开放SSH端口(如22端口),允许该用户的IP地址连接SSH服务。

  5. 连接和关闭:用户成功连接SSH后,防火墙可以设置为在一段时间后自动关闭SSH端口,以恢复安全状态。

端口敲门的优点

  1. 隐藏性

由于服务端口关闭,因此对外部观察者来说,系统上可能存在的服务是不可见的。

  1. 安全性

不会直接暴露真实的服务端口,只有在正确的端口敲击序列被触发后才会打开相应的端口,这增加了系统的安全性。

  1. 防止扫描攻击

由于服务端口一直处于关闭状态,因此对端口的扫描攻击几乎没有意义。

实现端口敲门

实现端口敲门的方法有很多种,下面介绍使用 knockd 工具实现端口敲门的基本步骤:

安装 knockd

在大多数Linux发行版上,你可以通过包管理器安装 knockd

sudo apt-get install knockd

配置 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 addrifconfig命令。

启动 knockd

配置完成后,启动 knockd 服务,并设置开机启动。

sudo systemctl start knockd
sudo systemctl enable knockd

启动成功如下图:

使用端口敲门

要使用端口敲门,可以使用 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服务被攻击的概率,从而保护你的网络资源和数据安全。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐