端口敲门技术实践

概念

是一种通过连接尝试,从外部打开原先关闭端口的方法。一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机。有一台主机要对服务器进行远程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.关闭连接同理。

注意:设置的请求端口,不能被占用。如果还不行,就换几个端口。(这里太坑了。。。。没占用端口,就是请求不成功,找了半天问题没找到,换了端口,解决,服。)

优缺点

  • 优:
    • 隐藏了端口,降低了端口被直接攻击的风险。就算攻击者知道了目标服务器使用了这项技术隐藏了端口,也要进行大量爆破,爆破条件极其困难。在没有正确的端口访问情况下,被隐藏端口的服务是没有开启的,而运行端口敲门服务的进程不直接提供端口访问。
  • 缺:
    • 不能确定端口敲门服务程序是否能稳健运行,当服务出现故障时,那么即使尝试链接了正确序列的端口,也无法开放被隐藏服务端口了。这就需要存在一个守护进程,在端口敲门服务进程出现问题时进行重启。
    • 非常依赖网络环境。

总结

任何技术一分为二看待,虽然长时间没被广泛应用,但保护端口不被恶意用户探测这方面的作用还是很有效的。