CentOS7基于firewalld部署port-knocking(端口敲门)

最近想着如何将我的端口隐藏起来,但是又不影响我自己使用,后面想到了一个端口敲门技术符合我的需求。

端口敲击(Port Knocking)是一种网络安全技术,旨在隐藏计算机或网络上的服务。它通过在特定顺序下连接到一系列预定义的端口来触发防火墙规则或其他安全机制,以允许访问受保护的服务或资源。

基本上,端口敲击是一种“暗号”机制,只有当客户端以预定义的顺序连接到特定的一组端口时,服务器才会解除对真实服务的访问限制。这个顺序通常是预先配置的,并且对于每个服务或系统可能是不同的。

端口敲击的工作流程通常如下:

• 关闭所有服务端口: 在开始时,服务器上的所有服务端口都关闭,使得除非进行端口敲击,否则无法直接访问服务。
• 触发端口序列: 用户或程序以预定义的顺序连接到一组特定的端口。这些端口可能是随机选择的,只要客户端和服务器之间约定好即可。
• 防火墙规则的调整: 当服务器检测到正确的端口敲击序列时,它会动态地修改防火墙规则,允许来自特定IP地址的进一步连接到实际的服务端口。
• 访问服务: 一旦通过了端口敲击验证,服务器将允许客户端访问其真实的服务,例如SSH、HTTP等。

端口敲击的优点包括:

• 隐蔽性: 由于服务端口关闭,因此对外部观察者来说,系统上可能存在的服务是不可见的。
安全性:不会直接暴露真实的服务端口,只有在正确的端口敲击序列被触发后才会打开相应的端口,这增加了系统的安全性。
• 防止扫描攻击: 由于服务端口一直处于关闭状态,因此对端口的扫描攻击几乎没有意义。
然而,端口敲击也存在一些挑战和缺点,包括配置复杂性、可能的性能影响以及潜在的安全风险(例如,如果敲击序列被截获或猜测)。因此,在实施端口敲击之前,必须仔细权衡其优缺点,并采取适当的安全措施来保护其免受滥用。

一、系统环境及所需软件

1、CentOS7
2、firewalld
3、knockd knockd官网
4、knock windows客户端 knock windows客户端官网

二、步骤

1、确认下系统是否有firewalld
1
systemctl status firewalld

如果没有的话,先安装下firewalld

1
2
3
yum -y install firewalld*
systemctl enable firewalld
systemctl start firewalld

2、安装knockd客户端和服务端
1
yum -y install knock knock-server
3、配置knockd
1
2
mv /etc/knockd.conf /etc/knockd.conf.bak
vim /etc/knockd.conf

把下面的代码粘贴到knockd.conf中

1
2
3
4
5
6
7
8
9
10
11
12
[options]
UseSyslog
Interface = eth0
logfile = /var/log/knockd.log

[openclosePort]
sequence = 13579,24680,9510
seq_timeout = 120
tcpflags = syn
start_command = /bin/firewall-cmd --zone=public --permanent --add-rich-rule 'rule family="ipv4" source address="%IP%" port protocol="tcp" port="8899" accept' ; /bin/firewall-cmd --reload
cmd_timeout = 180
stop_command = /bin/firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="%IP%" port protocol="tcp" port="8899" accept'

• 参数说明

• [options] 全局配置
UseSyslog:此选项指示knockd使用系统日志来记录事件。
Interface = eth0:指定knockd监听的网络接口为eth0。
logfile = /var/log/knockd.log:指定knockd日志文件的路径为/var/log/knockd.log。

•[openclosePort] //对自己要敲门的服务取一个名字

1
2
sequence = 13579,24680,9510
这定义了敲击的端口序列。在这个例子中,客户端需要依次连接到端口13579、2480和9510才能触发knockd的响应。
1
2
seq_timeout = 120
这个参数指定了敲击序列的超时时间,即客户端完成整个敲击序列的最大时间。在这个例子中,超过120秒没有完成整个敲击序列,knockd将重置状态并重新等待新的敲击序列。
1
2
tcpflags = syn
这个参数指定了TCP连接的标志。在这个例子中,指定为syn,表示只有带有SYN标志的TCP连接会被触发。
1
2
3
start_command = /bin/firewall-cmd --zone=public --permanent --add-rich-rule 'rule family="ipv4" source address="%IP%" port protocol="tcp" port="8899" accept' ; /bin/firewall-cmd --reload
这是在敲击序列成功完成后要执行的命令。在这个例子中,命令是添加一个防火墙规则,允许来自客户端IP地址的TCP连接到端口8899。%IP%是一个占位符,将被客户端的实际IP地址替换。
命令中的分号 ; 表示在执行第一个命令后执行第二个命令。
1
2
3
cmd_timeout = 180

这个参数指定了执行命令的最大时间。在这个例子中,如果执行命令超过180秒,knockd将终止命令并重置状态。
1
2
3
stop_command = /bin/firewall-cmd --zone=public --remove-rich-rule='rule > family="ipv4" source address="%IP%" port protocol="tcp" port="8899" accept'

这是在一段时间后关闭端口的命令。在这个例子中,命令是删除先前添加的防火墙规则,以便阻止来自客户端IP地址的TCP连接到端口8899。
4、删除firewalld中对ssh的配置并将序列号放通
1
2
3
4
5
firewall-cmd --zone=public --remove-service=ssh --permanent
firewall-cmd --zone=public --add-port=123/tcp --permanent
firewall-cmd --zone=public --add-port=456/tcp --permanent
firewall-cmd --zone=public --add-port=789/tcp --permanent
firewall-cmd --reload
5、测试敲门是否成功
  • 下载knock windows客户端,然后配置下客户端
    windows客户端测试图1
    windows客户端测试图2
    windows客户端测试图3
    windows客户端测试图4
    windows客户端测试图5
    windows客户端测试图6
    windows客户端测试图7
    windows客户端测试图8
    windows客户端测试图9
6、总结

原理大致就是服务器配置一个敲门的口令,如果你要连接某个服务,需要先按照设置好的口令顺序依次敲门,只有敲门的方式对了,服务器才会给你开门,你才可以访问你想要访问的服务。
如果你连接到服务后,虽然超时它会把规则删掉,但是我测了下似乎不影响你继续使用,就拿ssh举例,即使规则删除了,但是我连接ssh的窗口没有关掉,我还是可以继续操作的,但是如果我把窗口也关了,那就需要重新敲门才能连接。
这种方式在一定程度上是安全的,但是也有被工具扫出来使用这个服务从而进一步采取其他手段进行渗透的可能,例如强大的Nmap,总之就是只有相对的安全,没有绝对的安全!

微信扫一扫关注我吧

戴戴的Linux 戴戴的Linux

文章目录
  1. 1. 一、系统环境及所需软件
  2. 2. 二、步骤
    1. 2.0.1. 1、确认下系统是否有firewalld
    2. 2.0.2. 2、安装knockd客户端和服务端
    3. 2.0.3. 3、配置knockd
      1. 2.0.3.1. • 参数说明
    4. 2.0.4. 4、删除firewalld中对ssh的配置并将序列号放通
    5. 2.0.5. 5、测试敲门是否成功
    6. 2.0.6. 6、总结
  3. 2.1. 微信扫一扫关注我吧


本站总访问量 本文总阅读量