端口敲门技术实践
概念
是一种通过连接尝试,从外部打开原先关闭端口的方法。一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机。有一台主机要对服务器进行远程ssh访问,但目标服务器并没有开启22端口,这时主机尝试对服务器的某些特定的端口按一定顺序访问,如访问1001,1002,1004,1003。当服务器接收到特定的端口访问请求后,如果验证通过,则修改防火墙规则,开放出22端口,此时这台主机就能对服务器进行链接了。
实验
1.安装knockd
1
|
apt-get install knockd -y
|
2.配置knockd
1
|
vim /etc/knockd.conf
|
- sequence 设置为自己想要的端口序列。
- seq_timeout 设置为30,以免超时时间过小出错。
- command为要添加的防火墙命令,在openSSH下插入一条开启22端口的防火墙规则 -I 为插入到最前面,最先生效,以防止过滤所有端口的情况将此条规则吃掉。closeSSH下为删除(-D)之前插入到开启22的规则.
3.配置/etc/default/knockd,修改START_KNOCKD=1及对应的网络连接名。
4.启动knockd
5.iptables
1 2 3 |
root@kali:~# iptables -A INPUT -s 127.0.0.0/8 -j ACCEPT root@kali:~# iptables -A INPUT -j DROP root@kali:~# iptables -L -n |
6.远程机ssh连不上。
7.尝试请求
7.1请求端口
1
|
for x in 7100 8100 9100; do nmap -Pn --host-timeout 201 --max-retries 0 -p $x 192.168.0.105;done
|
7.2看防火墙,发现规则多了一条。
7.3ssh可连上。
8.查看日志。
1
|
tail -f /var/log/syslog
|
通过看日志,可以看到,这个敲门过程就是依次访问端口成功后,执行增加删除配置文件中写的防火墙的命令。
9.关闭连接同理。
注意:设置的请求端口,不能被占用。如果还不行,就换几个端口。(这里太坑了。。。。没占用端口,就是请求不成功,找了半天问题没找到,换了端口,解决,服。)
优缺点
- 优:
- 隐藏了端口,降低了端口被直接攻击的风险。就算攻击者知道了目标服务器使用了这项技术隐藏了端口,也要进行大量爆破,爆破条件极其困难。在没有正确的端口访问情况下,被隐藏端口的服务是没有开启的,而运行端口敲门服务的进程不直接提供端口访问。
- 缺:
- 不能确定端口敲门服务程序是否能稳健运行,当服务出现故障时,那么即使尝试链接了正确序列的端口,也无法开放被隐藏服务端口了。这就需要存在一个守护进程,在端口敲门服务进程出现问题时进行重启。
- 非常依赖网络环境。
总结
任何技术一分为二看待,虽然长时间没被广泛应用,但保护端口不被恶意用户探测这方面的作用还是很有效的。