端口敲打是一种通过关闭防火墙端口来保护服务器的方法,即使您知道这些端口将被使用。当且仅当连接请求提供秘密敲门时,这些端口才按需打开。
在20世纪20年代,当禁酒令如火如荼的时候,如果你想进入一个酒吧,你必须知道秘密敲门声,然后正确地敲出它才能进去。
左舷撞击是一种现代的等价物。如果您希望人们可以访问您计算机上的服务,但不想打开您的防火墙到internet,您可以使用端口敲门。它允许您关闭防火墙上允许传入连接的端口,并在进行预先安排的连接尝试时自动打开这些端口。连接尝试的序列充当秘密敲门。另一个秘密的敲门声关闭了港口。
港口敲门是一个新鲜的东西,但重要的是要知道这是一个安全的例子,通过默默无闻,这一概念是根本上的缺陷。如何访问系统的秘密是安全的,因为只有特定组中的人知道它。但是一旦这个秘密被泄露,或者因为它被揭露,被观察,被猜测,或者被解决了,你的安全就无效了。最好用其他更强大的方法保护服务器,比如要求SSH服务器基于密钥登录。
网络安全最可靠的方法是多层次的,因此,也许端口敲门应该是其中一个层次。层数越多越好,对吧?然而,您可能会认为端口敲击并没有给一个经过适当加固的安全系统增加太多(如果有的话)。
网络安全是一个庞大而复杂的话题,但你不应该使用端口攻击作为你唯一的防御方式。
相关:如何从Linux Shell创建和安装SSH密钥
为了演示端口敲击,我们将使用它来控制端口22,即SSH端口。我们将使用一个叫做knockd的工具。如果您使用Ubuntu或其他基于Debian的发行版,请使用apt get将此软件包安装到您的系统上。在其他Linux发行版上,请改用Linux发行版的包管理工具。
键入以下内容:
sudo apt-get install knockd您的系统上可能已经安装了iptables防火墙,但是您可能需要安装iptables持久包。它处理保存的iptable规则的自动加载。
键入以下内容进行安装:
sudo apt-get install iptables-persistent出现IPV4配置屏幕时,按空格键接受“是”选项。
在IPv6配置屏幕中再次按空格键以接受“是”选项并继续。
下面的命令告诉iptables允许已建立和正在进行的连接继续。我们现在将发出另一个命令来关闭SSH端口。
如果我们发出此命令时有人通过SSH连接,我们不希望他们被切断:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT此命令向防火墙添加一条规则,即:
现在我们可以发出关闭端口的命令:
sudo iptables -A INPUT -p tcp --dport 22 -j REJECT此命令向防火墙添加一条规则,即:
我们必须启动netfilter持久守护程序。我们可以用这个命令:
sudo systemctl start netfilter-persistent我们希望netfilter persistent经历一个保存和重新加载周期,因此它加载并控制iptable规则。
键入以下命令:
sudo netfilter-persistent savesudo netfilter-persistent reload现在您已经安装了实用程序,SSH端口已经关闭(希望没有终止任何人的连接)。现在,是时候配置秘密敲门了。
您可以编辑两个文件来配置knockd。第一个是以下knockd配置文件:
sudo gedit /etc/knockd.confgedit编辑器打开并加载knockd配置文件。
我们将编辑这个文件以满足我们的需要。我们感兴趣的部分是“openSSH”和“closeSSH”。每个部分中有以下四个条目:
“openSSH”部分可以理解为“必须按此顺序在5秒内向端口7000、8000和9000发出TCP连接请求,才能将打开端口22的命令发送到防火墙。”
“closeSSH”部分可以理解为“必须按此顺序向端口9000、8000和7000发出TCP连接请求,并在5秒内将关闭端口22的命令发送到防火墙。”
openSSH和closeSSH部分中的“command”条目保持不变,只是有一个参数。它们是这样组成的:
我们将对文件进行的编辑在下面以红色突出显示:
我们将“序列超时”延长到15秒。这是慷慨的,但如果有人手动触发连接请求,他可能需要这么多时间。
在“openSSH”部分,我们将命令中的-A(append)选项更改为-I(insert)。此命令在防火墙规则列表的顶部**新的防火墙规则。如果保留-A选项,它将附加防火墙规则列表并将其放在底部。
根据列表中的每个防火墙规则自上而下测试传入流量。我们已经有关闭22号端口的规则了。因此,如果传入流量在看到允许该流量的规则之前根据该规则进行测试,则拒绝连接;如果它首先看到该新规则,则允许连接。
close命令从防火墙规则中删除openSSH添加的规则。SSH通信再次由预先存在的“端口22已关闭”规则处理。
进行这些编辑后,保存配置文件。
相关:如何使用gedit在Linux上以图形方式编辑文本文件
knockd控制文件更简单。但是,在深入并编辑它之前,我们需要知道网络连接的内部名称;要找到它,请键入以下命令:
ip addr这台机器用来研究这篇文章的连接叫做enp0s3。记下连接的名称。
以下命令编辑knockd控制文件:
sudo gedit /etc/default/knockd这是gedit中的knockd文件。
我们需要进行的少数编辑以红色突出显示:
我们将“START\u KNOCKD=”条目从0更改为1。
我们还删除了“KNOCKD#u OPTS=”条目开头的散列,并将“eth1”替换为网络连接的名称enp0s3。当然,如果您的网络连接是eth1,则不会更改它。
是时候看看这是否管用了。我们将使用以下命令启动knockd守护进程:
sudo systemctrl start knockd现在,我们跳到另一台机器上试着连接。我们也在那台计算机上安装了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诚然,这并不是一个特别富有成效的远程会话,但它演示了通过端口敲击打开和关闭端口,并适合于一个屏幕截图。
那么,从另一边看这是什么样子?端口敲门主机上的系统管理员使用以下命令查看到达系统日志的新条目:
tail -f /var/log/syslog现在iptables规则列表中关于端口22的唯一规则是我们在开始时键入的关闭该端口的规则。所以,端口22现在又关闭了。
那是波特·克林的客厅戏法。把它当作消遣,不要在现实世界中这样做。或者,如果你必须的话,不要依赖它作为你唯一的安全保障。
...。它之所以成为远程服务器管理的首选是有原因的。学习如何通过SSH远程管理Linux服务器,从连接到安装软件和文件传输。 ...
...你的系统,例如,可能是渗透他们的第一步。因此,评估如何保护您的系统是值得的。 ...
... 许多Linux服务器运行Ubuntu。那么,让我们看看如何在Ubuntu服务器上设置FTP服务器。 ...
...运行Minecraft服务器而不暴露你的IP地址吗?你可以!只需使用amazonwebservices设置一个免费代理,就可以保护您的服务器免受拒绝服务攻击。我们会教你怎么做。 本指南适用于任何游戏服务器,而不仅仅是Minecraft。它所做的只是特...
...:您网络上的任何人都可以窃听连接。这是另一个原因,为什么它是好的使用本地网络或通过VPN不是通过互联网! 在远程Ubuntu计算机上使用以下命令使加密成为可选: gsettings set org.gnome.Vino require-encryption false 如果您的Windows计...
...用隧道。 所以我们得到了“反向SSH隧道”这个名字 它是如何工作的? 反向SSH隧道依赖于远程计算机使用已建立的连接来侦听来自本地计算机的新连接请求。 远程计算机监听本地计算机上的网络端口。如果它检测到对该端口的SS...