Port Knocking 这个词指的是网络安全策略,通过在防火墙上敲击特定的端口("敲门")序列来打开端口。这就像是你敲门,并且知道正确的敲门方式(通常由一系列特定长度或顺序的敲击组成),然后有人来打开门。
在计算机网络中,端口敲门(Port Knocking)是一种外部主机在试图连接到另一个主机上的受保护(防火墙保护,其上所有端口都关闭)的服务之前,先通过发送一系列的数据包(即敲门信号或"敲击")来访问此服务的方法。
一个典型的端口敲门场景如下:
远端主机将所有服务隐藏起来,防火墙上不对外开放任何端口。
当客户端需要访问某个服务时,首先按照预定好的协议向远端主机发送一组特别的包,即"敲门"。
远端主机检测到"敲门"符合事先的约定,就会对外暂时开放相关的服务。
Port Knocking 的优势在于它提供一种附加的安全层,使只有知道正确序列的用户才能访问服务,而所有其他用户,包括大多数恶意用户,只会看到防火墙阻挡了所有的网络连接。
然而,这并不是绝对安全无懈可击的,例如如果攻击者能监听到序列,他们就可能使用那个序列来进行恶意操作。因此常会配合其他安全措施一起使用,提供多重防护。
我们以centos为例:
首先,您需要在服务器上安装 Port Knocking 服务,例如 knockd。您可以使用以下命令安装:
sudo yum install knockd
安装完毕后,编辑 knockd 的配置文件:
sudo vi /etc/knockd.conf
在该文件中,您可以指定需要敲击的端口序列,以及打开和关闭防火墙的命令。例如:
[options] UseSyslog [openSSH] sequence = 7000,8000,9000 seq_timeout = 5 command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn [closeSSH] sequence = 9000,8000,7000 seq_timeout = 5 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn配置完成后,启动 knockd 服务:
sudo systemctl start knockd
sudo systemctl enable knockd
最后,确保 SSH 服务只能通过 Port Knocking 访问:
sudo iptables -A INPUT -p tcp --dport 22 -j REJECT
这样,只有成功执行了特定的"敲门"序列,才能打开 SSH 端口进行访问。
客户端测试
knock -v server-ip 7000 8000 9000您需要将“server-ip”替换为您的服务器的 IP 地址。
通过之后才能用ssh连接服务器的22端口。
网友回复