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端口。
网友回复
python如何实现torrent的服务端进行文件分发p2p下载?
如何在浏览器中录制摄像头和麦克风数据为mp4视频保存下载本地?
go如何编写一个类似docker的linux的虚拟容器?
python如何写一个bittorrent的种子下载客户端?
ai能通过看一个网页的交互过程视频自主模仿复制网页编写代码吗?
ai先写功能代码通过chrome mcp来进行测试功能最后ai美化页面这个流程能行吗?
vue在手机端上下拖拽元素的时候如何禁止父元素及body的滚动导致无法拖拽完成?
使用tailwindcss如何去掉响应式自适应?
有没有直接在浏览器中运行的离线linux系统?
nginx如何保留post或get数据进行url重定向?