如何使用端口碰撞为SSH登录确保安全?

简介: 如何使用端口碰撞为SSH登录确保安全?

Secure Shell是登录到远程Linux服务器的一种事实上的标准。多年来,它为许多管理员提供了良好的服务。但仅仅因为名称中有“Secure”(安全)这个词,并不意味着它总是很安全。事实上,您总是可以采取一些措施使SSH更安全。
22.jpeg
其中一个方法就是借助端口碰撞(port knocking)。现在,在我们开始之前,我想明确指出,任何使用SSH的人都应该始终做两件事:

      使SSH保持最新版本。

      使用SSH密钥验证。

应该将以上两项都视为使用Secure Shell的标准优秀实践。话虽如此,我还是想向您介绍一种已存在一段时间的工具。其想法是在您的服务器上创建两个碰撞序列,一个打开SSH端口,一个关闭该端口。在您发送打开碰撞序列之前,SSH访问是被关闭的。发送打开序列后,您可以通过SSH连接到该机器。完成工作后,发送关闭序列,SSH将重新被锁起来。

这并不完美,但结合SSH密钥验证,SSH在您的服务器上会安全得多。

下面介绍如何安装和使用knockd以便在SSH上进行端口碰撞。
您需要什么?

我将在Ubuntu Server 20.04 上进行演示,因此您需要该操作系统的运行中实例和拥有sudo权限的用户。您还需要在客户机上拥有sudo权限的用户。至于客户端,我将在Pop!_OS上进行演示。
如何安装knockd?

我们要做的第一件事是在服务器和客户端上安装knockd。登录到服务器,并执行命令:

sudo apt-get install knockd -y

前往客户端,执行同样的命令。

安装完后,您需要注意几个配置。
如何配置knockd?

我们需要做的第一件事是配置knockd 服务。使用以下命令打开knockd配置文件:

sudo nano /etc/knockd.conf

在该文件中,将打开序列从默认的7000,8000,9000改成您想要使用的任何端口序列。您最多可以为此配置七个端口。要配置的行在[openSSH]下:

sequence= 7000,8000,9000

将端口号改成您能记住的序列。

接下来,以相同的方式更改关闭序列(使用不同的端口号)。这一行在[closeSSH]下:

sequence= 9000,8000,7000

接下来,您需要在[openSSH]命令行中将-A改成-I,以便它将是iptables链中的第一条规则。

保存并关闭文件。

接下来,我们需要找到用于SSH流量的网络接口的名称。执行命令:

ip a

找到您使用的IP地址,然后找到如下所示的序列:

2:ens5:

以本文为例,接口的名称是ens5。

使用以下命令打开 Knockd 守护程序文件:

sudo nano /etc/default/knockd

在该文件中,通过将下面行中的0改成1,使守护程序能够在引导时运行:

START_KNOCKD=

接下来,将下面这行中的eth0 改成您网络接口的名称(并删除那个前导#字符):

#KNOCKD_OPTS="-i eth0"

所以这一行看起来像这样:

KNOCKD_OPTS="-i ens5"

保存并关闭文件。

使用以下命令运行并启用knockd:

sudo systemctl start knockd
sudo systemctl enable knockd

如何关闭端口22?

接下来,我们需要关闭端口22,这样流量无法绕过knockd 系统。执行命令:

sudo ufw numbered

如果您有允许SSH流量的规则,它们将被编号并需要被删除。比如说,您的SSH规则是1和2,用以下命令删除它们:

sudo ufwdelete2
sudo ufwdelete1

如何使用knockd?

进入到您的客户机。我们先要做的是发送打开碰撞序列,以便允许SSH流量通过。如果您的碰撞序列是7001,8001,9001,您将执行以下命令:

knock -v SERVER 7001 8001 9001

其中Server是远程服务器的IP地址。

您应该会看到如下输出:

hitting tcp 192.168.1.111:7001
hitting tcp 192.168.1.111:8001
hitting tcp 192.168.1.111:9001

碰撞序列后,您应该随后可以通过SSH连接到该服务器。完成远程工作后,您退出该服务器,然后发送关闭碰撞序列,就像这样:

knock –v SERVER 9001 8001 7001

关闭碰撞序列后,您应该再也无法通过SSH访问该远程服务器(除非您再次发送打开碰撞序列)。

这就是使用knockd以便在远程Linux服务器上更有效地为SSH访问确保安全的方法。记得将knockd安装在需要通过SSH访问那些服务器的任何客户机上。

相关文章
|
4月前
|
移动开发 监控 安全
通过SSH协议实现的屏幕局域网电脑监控:屏幕安全访问代码
随着科技的不断发展,网络安全问题愈发突出。为了确保屏幕数据的安全,我们需要一种高效可靠的监控方法。本文介绍了一种基于SSH协议的屏幕局域网电脑监控方案,同时提供了相关代码示例,确保屏幕数据的安全传输和访问。
244 0
|
5月前
|
Shell 网络安全 数据安全/隐私保护
debian安装ssh(傻瓜教程)+证书免密登录
debian安装ssh(傻瓜教程)+证书免密登录
363 0
|
5月前
|
Linux 网络安全
linux端口连通性测试telnet、wget、ssh、curl
linux端口连通性测试telnet、wget、ssh、curl
|
5月前
|
网络安全
SNETCracker.exe 2022/1/26 31:13:29----检查12.26.20.1:SSH登录发生异常!未能加载文件或程序集“ChilkatDotNet4.dll”或它的某一个依赖项
SNETCracker.exe 2022/1/26 31:13:29----检查12.26.20.1:SSH登录发生异常!未能加载文件或程序集“ChilkatDotNet4.dll”或它的某一个依赖项
146 0
|
1月前
|
存储 安全 网络安全
Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析
SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制。在使用 SSH 连接到远程 Git 存储库时,您可以使用 SSH 密钥对来确保安全性。以下是关于如何生成和使用 SSH 密钥对的详细步骤: 生成 SSH 密钥对
115 2
|
2月前
|
安全 网络协议 Linux
|
2月前
|
关系型数据库 网络安全 数据库
通过SSH登录OceanBase数据库需要修改用户密码,然后使用SSH客户端进行远程登录
通过SSH登录OceanBase数据库需要修改用户密码,然后使用SSH客户端进行远程登录
77 6
|
2月前
|
安全 关系型数据库 MySQL
SSH -L:安全、便捷、无边界的网络通行证
SSH -L:安全、便捷、无边界的网络通行证
41 0
|
2月前
|
网络安全 数据安全/隐私保护
如何使用ssh key免密码登录服务器?
如何使用ssh key免密码登录服务器?
|
3月前
|
安全 Linux Shell
Linux服务器配置SSH免密码登录后,登录仍提示输入密码(一次真实的问题排查解决记录)
Linux服务器配置SSH免密码登录后,登录仍提示输入密码(一次真实的问题排查解决记录)
94 0