如何在linux上使用端口敲打(以及为什么不应该)

端口敲打是一种通过关闭防火墙端口来保护服务器的方法,即使您知道这些端口将被使用。当且仅当连接请求提供秘密敲门时,这些端口才按需打开。...

端口敲打是一种通过关闭防火墙端口来保护服务器的方法,即使您知道这些端口将被使用。当且仅当连接请求提供秘密敲门时,这些端口才按需打开。

左舷敲击是“秘密敲击”

在20世纪20年代,当禁酒令如火如荼的时候,如果你想进入一个酒吧,你必须知道秘密敲门声,然后正确地敲出它才能进去。

左舷撞击是一种现代的等价物。如果您希望人们可以访问您计算机上的服务,但不想打开您的防火墙到internet,您可以使用端口敲门。它允许您关闭防火墙上允许传入连接的端口,并在进行预先安排的连接尝试时自动打开这些端口。连接尝试的序列充当秘密敲门。另一个秘密的敲门声关闭了港口。

港口敲门是一个新鲜的东西,但重要的是要知道这是一个安全的例子,通过默默无闻,这一概念是根本上的缺陷。如何访问系统的秘密是安全的,因为只有特定组中的人知道它。但是一旦这个秘密被泄露,或者因为它被揭露,被观察,被猜测,或者被解决了,你的安全就无效了。最好用其他更强大的方法保护服务器,比如要求SSH服务器基于密钥登录。

网络安全最可靠的方法是多层次的,因此,也许端口敲门应该是其中一个层次。层数越多越好,对吧?然而,您可能会认为端口敲击并没有给一个经过适当加固的安全系统增加太多(如果有的话)。

网络安全是一个庞大而复杂的话题,但你不应该使用端口攻击作为你唯一的防御方式。

相关:如何从Linux Shell创建和安装SSH密钥

安装knockd

为了演示端口敲击,我们将使用它来控制端口22,即SSH端口。我们将使用一个叫做knockd的工具。如果您使用Ubuntu或其他基于Debian的发行版,请使用apt get将此软件包安装到您的系统上。在其他Linux发行版上,请改用Linux发行版的包管理工具。

键入以下内容:

sudo apt-get install knockd

如何在linux上使用端口敲打(以及为什么不应该)

您的系统上可能已经安装了iptables防火墙,但是您可能需要安装iptables持久包。它处理保存的iptable规则的自动加载。

键入以下内容进行安装:

sudo apt-get install iptables-persistent

如何在linux上使用端口敲打(以及为什么不应该)

出现IPV4配置屏幕时,按空格键接受“是”选项。

如何在linux上使用端口敲打(以及为什么不应该)

在IPv6配置屏幕中再次按空格键以接受“是”选项并继续。

如何在linux上使用端口敲打(以及为什么不应该)

下面的命令告诉iptables允许已建立和正在进行的连接继续。我们现在将发出另一个命令来关闭SSH端口。

如果我们发出此命令时有人通过SSH连接,我们不希望他们被切断:

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

如何在linux上使用端口敲打(以及为什么不应该)

此命令向防火墙添加一条规则,即:

  • -A:将规则附加到防火墙规则表。也就是说,添加到底部。
  • 输入:这是关于传入连接的规则。
  • -m conntrack:防火墙规则作用于与规则中的条件匹配的网络流量(数据包)。m参数使iptables使用额外的包匹配模块在这种情况下,名为conntrack的模块与内核的网络连接跟踪功能一起工作。
  • –cstate ESTABLISHED,RELATED:指定规则将应用的连接类型,即已建立的和相关的连接。已建立的连接是正在进行的连接。相关连接是由于已建立连接的操作而建立的连接。可能连接的某个人想要下载一个文件;这可能发生在主机启动的新连接上。
  • -j ACCEPT:如果流量符合规则,则跳转到防火墙中的ACCEPT目标。换句话说,流量被接受并允许通过防火墙。

现在我们可以发出关闭端口的命令:

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

如何在linux上使用端口敲打(以及为什么不应该)

此命令向防火墙添加一条规则,即:

  • -A:将规则附加到防火墙规则表中,即添加到底部。
  • 输入:此规则与传入连接有关。
  • -p tcp:此规则适用于使用传输控制协议的通信量。
  • –dport 22:此规则特别适用于以端口22(SSH端口)为目标的TCP通信。
  • -拒绝:如果流量符合规则,跳转到防火墙中的拒绝目标。因此,如果流量被拒绝,就不允许通过防火墙。

我们必须启动netfilter持久守护程序。我们可以用这个命令:

sudo systemctl start netfilter-persistent

如何在linux上使用端口敲打(以及为什么不应该)

我们希望netfilter persistent经历一个保存和重新加载周期,因此它加载并控制iptable规则。

键入以下命令:

sudo netfilter-persistent save

如何在linux上使用端口敲打(以及为什么不应该)

sudo netfilter-persistent reload

如何在linux上使用端口敲打(以及为什么不应该)

现在您已经安装了实用程序,SSH端口已经关闭(希望没有终止任何人的连接)。现在,是时候配置秘密敲门了。

配置knockd

您可以编辑两个文件来配置knockd。第一个是以下knockd配置文件:

sudo gedit /etc/knockd.conf

如何在linux上使用端口敲打(以及为什么不应该)

gedit编辑器打开并加载knockd配置文件。

如何在linux上使用端口敲打(以及为什么不应该)

我们将编辑这个文件以满足我们的需要。我们感兴趣的部分是“openSSH”和“closeSSH”。每个部分中有以下四个条目:

  • 顺序:打开或关闭端口22时必须访问的端口的顺序。默认端口为7000、8000和9000以打开端口,9000、8000和7000以关闭端口。您可以更改这些端口或向列表中添加更多端口。出于我们的目的,我们将坚持默认值。
  • seq\ u timeout:某人必须访问端口以触发其打开或关闭的时间段。
  • 命令:触发打开或关闭操作时发送到iptables防火墙的命令。这些命令要么将规则添加到防火墙(打开端口),要么将其取出(关闭端口)。
  • tcpflags:每个端口在秘密序列中必须接收的数据包的类型。SYN(synchronize)数据包是TCP连接请求中的第一个数据包,称为三方握手。

“openSSH”部分可以理解为“必须按此顺序在5秒内向端口7000、8000和9000发出TCP连接请求,才能将打开端口22的命令发送到防火墙。”

“closeSSH”部分可以理解为“必须按此顺序向端口9000、8000和7000发出TCP连接请求,并在5秒内将关闭端口22的命令发送到防火墙。”

防火墙规则

openSSH和closeSSH部分中的“command”条目保持不变,只是有一个参数。它们是这样组成的:

  • -答:将规则附加到防火墙规则列表的底部(对于openSSH命令)。
  • -D:从防火墙规则列表中删除命令(对于closeSSH命令)。
  • 输入:此规则与传入的网络流量有关。
  • -s%IP%:请求连接的设备的IP地址。
  • -p:网络协议;在这个例子中,它是TCP。
  • –dport:目标端口;在我们的示例中,它是端口22。
  • -j ACCEPT:跳转到防火墙内的ACCEPT目标。换言之,让数据包通过其余规则而不对其执行操作。

knockd配置文件编辑

我们将对文件进行的编辑在下面以红色突出显示:

如何在linux上使用端口敲打(以及为什么不应该)

我们将“序列超时”延长到15秒。这是慷慨的,但如果有人手动触发连接请求,他可能需要这么多时间。

在“openSSH”部分,我们将命令中的-A(append)选项更改为-I(insert)。此命令在防火墙规则列表的顶部**新的防火墙规则。如果保留-A选项,它将附加防火墙规则列表并将其放在底部。

根据列表中的每个防火墙规则自上而下测试传入流量。我们已经有关闭22号端口的规则了。因此,如果传入流量在看到允许该流量的规则之前根据该规则进行测试,则拒绝连接;如果它首先看到该新规则,则允许连接。

close命令从防火墙规则中删除openSSH添加的规则。SSH通信再次由预先存在的“端口22已关闭”规则处理。

进行这些编辑后,保存配置文件。

相关:如何使用gedit在Linux上以图形方式编辑文本文件

knockd控制文件编辑

knockd控制文件更简单。但是,在深入并编辑它之前,我们需要知道网络连接的内部名称;要找到它,请键入以下命令:

ip addr

如何在linux上使用端口敲打(以及为什么不应该)

这台机器用来研究这篇文章的连接叫做enp0s3。记下连接的名称。

以下命令编辑knockd控制文件:

sudo gedit /etc/default/knockd

如何在linux上使用端口敲打(以及为什么不应该)

这是gedit中的knockd文件。

如何在linux上使用端口敲打(以及为什么不应该)

我们需要进行的少数编辑以红色突出显示:

如何在linux上使用端口敲打(以及为什么不应该)

我们将“START\u KNOCKD=”条目从0更改为1。

我们还删除了“KNOCKD#u OPTS=”条目开头的散列,并将“eth1”替换为网络连接的名称enp0s3。当然,如果您的网络连接是eth1,则不会更改它。

证据就在布丁里

是时候看看这是否管用了。我们将使用以下命令启动knockd守护进程:

sudo systemctrl start knockd

如何在linux上使用端口敲打(以及为什么不应该)

现在,我们跳到另一台机器上试着连接。我们也在那台计算机上安装了knockd工具,不是因为我们想设置端口敲门,而是因为knockd包提供了另一个名为knock的工具。我们将用这台机器按我们的秘密顺序开火并为我们敲门。

使用以下命令将连接请求的秘密序列发送到IP地址为192.168.4.24的端口敲击主机上的端口:

knock 192.168.4.24 7000 8000 9000 -d 500

这将告诉knock以IP地址192.168.4.24的计算机为目标,依次向端口7000、8000和9000发出连接请求,它们之间的a-d(延迟)为500毫秒。

然后,一个名为“dave”的用户向192.168.4.24发出SSH请求:

ssh [email protected]

他的连接被接受,他输入密码,他的远程会话开始。他的命令提示符从戴夫@诺斯特罗莫至戴夫@howtogeek。要注销远程计算机,他键入:

exit

他的命令提示符返回到他的本地计算机。他再次使用了knock,这次,它以端口为目标,以相反的顺序关闭远程计算机上的SSH端口。

knock 192.168.4.24 9000 8000 7000 -d 500

如何在linux上使用端口敲打(以及为什么不应该)

诚然,这并不是一个特别富有成效的远程会话,但它演示了通过端口敲击打开和关闭端口,并适合于一个屏幕截图。

那么,从另一边看这是什么样子?端口敲门主机上的系统管理员使用以下命令查看到达系统日志的新条目:

tail -f /var/log/syslog

如何在linux上使用端口敲打(以及为什么不应该)

  • 您将看到三个openSSH条目。当远程敲打实用程序以每个端口为目标时,会引发这些问题。
  • 当触发序列的所有三个阶段都满足时,会记录一个写着“OPEN SESAME”的条目
  • 发送将规则**iptables规则列表的命令。它允许通过端口22上的SSH从给出正确秘密敲门(192.168.4.23)的PC的特定IP地址进行访问。
  • 用户“dave”只连接几秒钟,然后断开连接。
  • 您将看到三个closeSSH条目。当远程敲打实用程序将每个端口作为目标时,就会引发这些问题,它会通知端口敲打主机关闭端口22。
  • 在所有三个阶段都被触发之后,我们再次收到“opensesame”消息。命令被发送到防火墙以删除规则。(关闭港口时为什么不“关闭芝麻”?谁知道呢?)

现在iptables规则列表中关于端口22的唯一规则是我们在开始时键入的关闭该端口的规则。所以,端口22现在又关闭了。

敲它的头

那是波特·克林的客厅戏法。把它当作消遣,不要在现实世界中这样做。或者,如果你必须的话,不要依赖它作为你唯一的安全保障。

  • 发表于 2021-04-03 02:18
  • 阅读 ( 156 )
  • 分类:互联网

你可能感兴趣的文章

如何保护linux上的usb端口

... 让我们来看看您可以如何尝试并减轻这些设备带来的风险。 ...

  • 发布于 2021-03-13 04:54
  • 阅读 ( 202 )

在linux上保护隐私的10大技巧

... 您可以看到如何容易地开始形成一个强大的密码,可以很容易记住和复杂的同时。 ...

  • 发布于 2021-03-13 08:16
  • 阅读 ( 430 )

如何用ssh远程管理linux服务器

...。它之所以成为远程服务器管理的首选是有原因的。学习如何通过SSH远程管理Linux服务器,从连接到安装软件和文件传输。 ...

  • 发布于 2021-03-15 17:05
  • 阅读 ( 497 )

如何用旧计算机构建linux网络服务器

... 下面介绍如何设置Linux web服务器。 ...

  • 发布于 2021-03-17 19:20
  • 阅读 ( 275 )

如何在任何计算机上添加蓝牙

... 为什么要扔掉旧设备? ...

  • 发布于 2021-03-29 00:10
  • 阅读 ( 200 )

2020年是linux恶意软件大流行的一年吗?

...你的系统,例如,可能是渗透他们的第一步。因此,评估如何保护您的系统是值得的。 ...

  • 发布于 2021-03-29 07:01
  • 阅读 ( 308 )

如何在ubuntu上安装ftp服务器

... 许多Linux服务器运行Ubuntu。那么,让我们看看如何在Ubuntu服务器上设置FTP服务器。 ...

  • 发布于 2021-03-30 13:11
  • 阅读 ( 312 )

使用aws保护您的家庭minecraft服务器免受ddos攻击

...运行Minecraft服务器而不暴露你的IP地址吗?你可以!只需使用amazonwebservices设置一个免费代理,就可以保护您的服务器免受拒绝服务攻击。我们会教你怎么做。 本指南适用于任何游戏服务器,而不仅仅是Minecraft。它所做的只是特...

  • 发布于 2021-04-03 03:34
  • 阅读 ( 287 )

如何在ubuntu上设置远程桌面

...:您网络上的任何人都可以窃听连接。这是另一个原因,为什么它是好的使用本地网络或通过VPN不是通过互联网! 在远程Ubuntu计算机上使用以下命令使加密成为可选: gsettings set org.gnome.Vino require-encryption false 如果您的Windows计...

  • 发布于 2021-04-03 07:59
  • 阅读 ( 217 )

什么是反向ssh隧道?(以及如何使用)

...用隧道。 所以我们得到了“反向SSH隧道”这个名字 它是如何工作的? 反向SSH隧道依赖于远程计算机使用已建立的连接来侦听来自本地计算机的新连接请求。 远程计算机监听本地计算机上的网络端口。如果它检测到对该端口的SS...

  • 发布于 2021-04-03 08:32
  • 阅读 ( 212 )
bppbfdx
bppbfdx

0 篇文章

相关推荐