前言:允许 Traceroute 探测是绿盟漏洞扫描器报出来的一个漏洞,如下图:
我的系统是ubuntu 22.04,但由于是用户提供的虚拟机,会有些定制的部分,具体定制了哪部分就不知道了,直接描述问题。
==========
解决问题的心路历程:
1、traceroute 地址有返回信息,很简单的问题
查询了网上的很多内容,说是通过iptables 生成规则并且执行就可以,但是我的系统iptables不是以服务形态出现的,没有办法使用 services restart iptables 、 systemctl reload iptables 等命令进行重启,导致网上的命令使用后都无法生效;
2、管理员在系统安装了ufw,并做了配置
使用fuw status 可以看到只开了22/80 两个端口,其他的都是关闭状态,但是查遍全网都没有如果合同ufw禁止使用udp端口的问题,后来看到了一个帖子是这么说的:
ufw展示iptable的配置方式,具体实现还是通过iptables进行执行,看来还是得通过iptables入手解决问题。
3、查找iptables的配置文件,怎么也找不到,使用 iptables-save 命令可以看到保存了一大堆的策略,可是不知道这些策略出自哪里
通过 whereis iptables 发现了一个目录 /usr/share/ufw的目录,下面还有个iptables的目录,里面有一些配置文件,我感觉是找对了地方,但修改了半天还是无效。
我把 /usr/share/ufw/iptables 的目录改名,重启后发现系统没有问题,策略依旧,所以证明这个目录里的内容是可有可无的。
4、我把iptables里的策略导出,然后清空,把策略手动调整完,再写入,还是不行!!!
具体我写入了什么信息,我就不详述了,看到最后就会明白,因为过程都没有成功过,我也没分析,到底是语法错误,还是写的内容少了,还是策略有冲突,总之没有成功
5、由于 iptables 不是服务,每次只能通过重启刷新策略,结果惊讶的发现,每次重启后系统就会重置一些规则,说明有些规则是在我所编辑的文件之前就加载的,我只有找到这个地方才行,有是不断地寻找,最终我找到了这个目录 /etc/nfw 一个如此朴实无华而又指向明确的目录,里面的文件都是系统启动是就加载的文件,于是我把 before.rules里的所有和icmp有关的信息 都 DROP掉,重启后发现策略正确加载了,但是 ping traceroute 还是能正常执行,我无语了
6、虽然策略依然没有生效,但是我觉得路径是正确的,我已经找到了所有和 ufw 以及iptalbes 有关的配置和保存位置,那么剩下的应该就是策略书写不对了,我在网站上搜索了大量的文章,直到看到下面这篇
Linux中 ICMP相关漏洞处理 --Traceroute探测和ICMP timestamp请求响应漏洞 iptables命令 - yy9knsg - 博客园
里面提到,要解决 traceroute 的问题需要把0/3/11都禁掉才可以,但文章的后续只给了13/14的禁用,于是我将0/3/11/13/14都禁用了,依旧无效,因为我不能reload iptables,我将这些配置写进了/etc/ufw/before.rules的文件,一共10条命令:
-I INPUT -p icmp --icmp-type 0 -j DROP
-I OUTPUT -p icmp --icmp-type 0 -j DROP
-I INPUT -p icmp --icmp-type 3 -j DROP
-I OUTPUT -p icmp --icmp-type 3 -j DROP
-I INPUT -p icmp --icmp-type 11 -j DROP
-I OUTPUT -p icmp --icmp-type 11 -j DROP
-I INPUT -p icmp --icmp-type 13 -j DROP
-I OUTPUT -p icmp --icmp-type 13 -j DROP
-I INPUT -p icmp --icmp-type 14 -j DROP
-I OUTPUT -p icmp --icmp-type 14 -j DROP
重启后,所有 ping traceroute 的响应都没有了,问题终于解决了!!
==========
问题的简单回顾:
1、网路上大部分策略都是- A 的,比如:
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
-A ufw-before-input -p icmp --icmp-type echo-reply -j DROP
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
# ok icmp code for FORWARDi
-A ufw-before-forward -p icmp --icmp-type echo-request -j DROP
-A ufw-before-forward -p icmp --icmp-type echo-reply -j DROP
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-forward -p icmp --icmp-type echo-request -j DROP
事实证明 -A的策略,即使全封了也没有解决问题,要用 -I 的策略才可以
2、不知道为什么 -A的策略要用icmp的名称,-I的策略只用到 0/3/11/13/14这样的序列号就可以,我之前在-A的策略中用序列号,好像会报错,所以也没有深究,这块也给我造成了一些困扰;
3、问题终于解决了,耗时约20个小时,希望能够大家一些借鉴。
关于iptables 的链表的理论,这里留一个链接,以后再仔细研究。
Iptables详解 iptables概念 链/表_富士康质检员张全蛋的博客-CSDN博客