在Debian和Ubuntu上使用端口敲门来保护SSH服务

在本教程中,我将向您展示如何使用端口终止来确保Debian和Ubuntu服务器上的SSH服务安全。 因此,您可能会问端口敲门到底是什么? 以及如何帮助您保护Debian或Ubuntu服务器?

港口敲门的基本思想

端口终止是一种仅允许合法用户访问服务器上的服务的方法,本教程中的服务是SSH服务。 端口敲门背后的想法是服务器上的SSH端口受防火墙保护。 SSH服务正在服务器上运行,但由于防火墙规则,SSH端口已被外界拒之门外。 因此,在这种情况下,没有人可以直接连接到SSH端口22。

该服务器还运行着一个敲门守护进程。 如果用户按顺序击中(或击中)某些特定端口,则被敲除具有更改防火墙规则的能力,因此可以临时向该用户开放SSH端口22。 因此,敲门顺序有点像SSH端口的密码。 只有具有正确敲除顺序的合法用户才能触发SSH端口打开。 合法用户完成工作后,将使用另一个敲门序列来关闭SSH端口。

现在让我们动手吧。 首先,我们将安装并配置已敲除的规则,然后设置防火墙规则。

在Debian和Ubuntu上安装Knockd

sudo apt-get install knockd

配置敲门声

在系统启动时启用自动启动

使用nano或您喜欢的文本编辑器编辑/ etc / default / knockd配置文件。

sudo nano /etc/default/knockd

找到这条线

START_KNOCKD=0

将0更改为1。

START_KNOCKD=1

保存并关闭文件。

编辑主配置文件。

sudo nano /etc/knockd.conf

您需要更改此文件中的三个项目。 在里面 [openSSH] 部分,默认的打开敲门顺序为7000,8000,9000。 您可以将其更改为自己喜欢的名称,例如10001、10002、10003。 您也可以为序列定义4个或更多端口。 这些端口不需要打开。

然后在iptables命令中,更改 -一种-一世 这样该iptables规则将成为规则链中的第一条规则。 iptables规则链中的顺序很重要。 当您发送正确的敲除序列时,敲除将执行此iptables命令以打开IP的SSH端口。

接下来,在 [closeSSH] 部分,根据您的喜好更改默认的关闭敲门顺序,例如10003、10002、10001。

保存并关闭文件,然后启动基因敲除守护程序

sudo /etc/init.d/knockd start   or     sudo service knockd start

请注意,默认情况下,knock会监听eth0接口。 您服务器的网络接口可能不是eth0。 在这种情况下,启动基因敲除守护程序时将看到以下错误。

[FAIL] Starting Port-knock daemon: knockd failed (could not open eth0: eth0: No such device exists (SIOCGIFHWADDR: No such device)).

您需要更改敲的监听端口。 打开 / etc / default / knockd 并找到这条线

#KNOCKD_OPTS="-i eth1"

删除#并将eth1更改为服务器的网络接口。 如果您的服务器使用的是openvz虚拟化,则接口名称为venet0:0

KNOCKD_OPTS="-i venet0:0"

使用iptables设置防火墙规则

首先,您想通过运行以下命令来确保建立的SSH连接继续进行,并且不会被防火墙规则杀死:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

现在使用iptables拒绝所有到端口22的所有传入连接:

sudo iptables -A INPUT -p tcp --dport 22 -j REJECT

上面的命令会将一条规则附加到INPUT链上,告诉Linux内核防火墙拒绝与端口22的所有TCP连接。要列出内核防火墙规则,请使用-L选项。

sudo iptables -L

iptables和端口敲门

现在,如果您使用nmap扫描服务器,您将看到端口22被过滤。

港口敲门

并且ssh连接将被拒绝。

港口敲门

使用iptables-save将防火墙规则保存到文件中。

sudo iptables-save > firewall.rule

要恢复防火墙规则,请使用iptables-restore。

sudo iptables-restore < firewall.rule

被敲除的守护程序可能由于无法控制的原因而死亡。 为了防止自己被锁定,我建议您的服务器在系统启动时不要自动还原此防火墙规则,而应始终手动还原它。 当被淘汰时,您可以在托管服务提供商的控制面板中重新引导计算机,然后再次访问服务器。

使用Knock Client发送敲门序列

被敲除的守护程序与称为敲除的敲除客户端捆绑在一起,因此在您的Debian或Ubuntu工作站上,可以通过运行以下命令进行安装:

sudo apt-get install knockd

爆震示例:

knock -v 192.168.1.104 10001 10002 10003

输出:

hitting tcp 192.168.1.104:10001
hitting tcp 192.168.1.104:10002
hitting tcp 192.168.1.104:10003

如果工作站和服务器之间的等待时间较长,则尝试敲门操作可能会失败,因此您可能需要敲打三次或多次,直到服务器确认所有敲门顺序为止。

一旦所有敲门尝试都成功,您就可以进入服务器。 如果使用nmap再次扫描服务器,则会发现SSH端口已为您的IP打开。

PORT     STATE    SERVICE
22/tcp   open     ssh
80/tcp   open     http
443/tcp  open     https

完成所有工作后,您可以使用端口断开功能关闭IP的SSH端口。

knock -v 192.168.1.104 10003 10002 10001

忠告

端口爆裂不应该是您对SSH服务的唯一保护。 强烈建议将其与其他保护形式结合使用,例如SSH无密码登录。

不要在系统启动时自动恢复上述防火墙规则。 如果被终止的守护程序死了,则可以在主机提供商提供的控制面板中重新启动服务器。 有时,您可以单击控制面板中的“控制台访问”按钮直接登录。 这与SSH登录不同。

Sidebar