如何在Ubuntu 18.04上使用Port-knocking序列进一步保护SSH

・5 分钟阅读

使用不同的系统?

介绍

非常安全且易于实现,port knocking是保护你的服务器免受恶意SSH连接尝试的最佳方法之一。

前提条件

  • 运行Ubuntu 18.04的服务器,
  • sudo访问,

如果你没有作为root用户登录,请通过运行sudo -i,并且输入密码来获得临时root shell ,另外,你可以将sudo添加到本文所示的命令中。

步骤1:安装Knockd

Knockd是与iptables一起使用的包,用于实现服务器上的Port Knocking,还需要'iptables-persistent'软件包。


apt update
apt install -y knockd iptables-persistent

步骤2:iptables规则

按顺序运行以下命令:


iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j DROP
iptables-save > /etc/iptables/rules.v4

这些命令分别执行以下操作:

  • 让iptables保持现有的连接保持活动状态,
  • 指示iptables断开与端口tcp 22的任何连接(如果SSH守护进程正在侦听除22之外的其他端口,就应相应地修改上述命令,
  • 保存这两个规则,使它们在重新启动后,保持不变,

步骤3:Knockd配置

使用你选择的文本编辑器,打开文件/etc/knockd.conf

你将看到以下内容:


[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

你应该更改端口(选择1024上的端口号,并未被其他服务使用)的顺序,并将它安全存储,这个组合应该被视为密码。如果忘记,你将失去对SSH的访问,我们会把这个新次序称为x,y,z

seq-timeout行是Knockd等待客户端完成Port Knocking次序的秒数,将它更改为更大是个好主意,特别是如果port-knocking手动完成。但是,较小的超时值更安全,建议将它改为15,因为我们将在本教程中手动进行knocking。

将打开的顺序更改为所选的端口:


[openSSH]
sequence = x,y,z

将命令值更改为以下值:


command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

现在相应地更改结束次序:


[closeSSH]
sequence = z,y,x

保存更改,并且退出,然后打开文件/etc/default/knockd

  • START_KNOCKD=1替换START_KNOCKD=0
  • 将下面一行添加到文件的末尾: KNOCKD_OPTS="-i ens3" (如果你的公共网络接口的名称不同,则替换ens3 ),
  • 保存并退出,

现在启动Knockd :


systemctl start knockd

如果现在与服务器断开连接,则必须打开端口xyz以重新连接。

步骤4: 测试

您现在将无法连接到您的SSH服务器。

你可以使用telnet客户端测试端口knock。

Windows用户可以从命令提示符启动telnet ,如果没有安装telnet,请访问控制面板的"程序"部分,然后找到"打开或关闭Windows功能"。在功能面板上,找到"Telnet Client ",并且启用它。

在终端/命令提示符中键入以下内容:


telnet youripaddress x
telnet youripaddress y
telnet youripaddress z

在十五秒内完成所有操作,因为这是配置中施加的限制。现在,尝试通过SSH连接到你的服务器,它是可访问的。

要关闭SSH服务器,请按相反顺序运行命令。


telnet youripaddress z
telnet youripaddress y
telnet youripaddress z

结束语

使用Port Knocking的好处是,如果它与私钥认证一起配置,除非有人知道你的Port Knocking次序,并且拥有你的私钥,否则几乎没有可以入侵的机会。

Hrh profile image