通过iptables 修改数据包TTL,来隐藏traceroute 时的路由跳数

原理

程序利用增加存活时间(TTL)值来实现其功能的。每当数据包经过一个路由器,其存活时间就会减1。当其存活时间是0时,主机便取消数据包,并发送一个ICMP TTL数据包给原数据包的发出者。

程序发出的首3个数据包TTL值是1,之后3个是2,如此类推,它便得到一连串数据包路径。注意IP不保证每个数据包走的路径都一样。

实现

主叫方首先发出 TTL=1 的 UDP 数据包,第一个路由器将 TTL 减1得0后就不再继续转发此数据包,而是返回一个 ICMP 超时报文,主叫方从超时报文中即可提取出数据包所经过的第一个网关地址。然后又发出一个 TTL=2 的 UDP 数据包,可获得第二个网关地址,依次递增 TTL 便获取了沿途所有网关地址。

需要注意的是,并不是所有网关都会如实返回 ICMP 超时报文。出于安全性考虑,大多数防火墻以及启用了防火墻功能的路由器缺省配置为不返回各种 ICMP 报文,其余路由器或交换机也可被管理员主动修改配置变为不返回 ICMP 报文。因此 Traceroute 程序不一定能拿全所有的沿途网关地址。所以,当某个 TTL 值的数据包得不到响应时,并不能停止这一追踪过程,程序仍然会把 TTL 递增而发出下一个数据包。一直达到默认或用参数指定的追踪限制(maximum_hops)才请勿追踪。

依据上述原理,利用了 UDP 数据包的 Traceroute 程序在数据包到达真正的目的主机时,就可能因为该主机没有提供 UDP 服务而简单将数据包抛弃,并不返回任何信息。为了解决这个问题,程序设计者使用了一个技巧,因 UDP 协议规定端口号必须小于 30000 ,他故意违反协议设置了一个大于 30000 的端口号,所以目标主机收到数据包后唯一能做的事就是返回一个“端口不可达”的 ICMP 报文,于是主叫方就将端口不可达报文当作跟踪退出的标志。

隐藏此后的4跳路由

Iptables -t
mangle -A PREROUTING -m ttl --ttl-gt 1 -j TTL --ttl-inc 4

在PREROUTING链上抓数据包只要是TTL大于1的  将TTL加4.

验证配置

iptables -t mangle
-nvL

Chain PREROUTING
(policy ACCEPT 684G packets, 41T bytes)

pkts bytes target     prot opt in     out    
source              
destination

684G  
41T TTL        all  --  *      *      
0.0.0.0/0           
0.0.0.0/0           TTL match TTL
> 1 TTL increment by 4

Ttl  (match TTL
value)

This module matches the time to live
field in the IP header.

--ttl-eq ttl

Matches the given TTL value.

--ttl-gt ttl

Matches if TTL is greater than
the given TTL value.

--ttl-lt ttl

Matches if TTL is less than the
given TTL value.

TTL  (change TTL value)

This 
is  used  to modify the IPv4 TTL header field.  The TTL field determines how many hops
(routers) a packet can traverse

until it’s time to live is exceeded.

Setting or incrementing the TTL field
can potentially be very dangerous, so it should be avoided at any cost.

Don’t ever set or increment the value on
packets that leave your local network! 
mangle table.

--ttl-set value

Set the TTL value to ‘value’.

--ttl-dec value

Decrement the TTL value ‘value’
times.

--ttl-inc value

Increment the TTL value ‘value’
times.

禁止PC机上tracert

iptables -A FORWARD  -p icmp -m length --length 92 -j DROP

length

This 
module  matches  the 
length of the layer-3 payload (e.g. layer-4

packet) of a packet against a specific
value or range of values.

[!] --length length[:length]

时间: 2024-10-09 13:00:34

通过iptables 修改数据包TTL,来隐藏traceroute 时的路由跳数的相关文章

发送自修改数据包进行arp欺骗

一丶使用平台 对Microsoft Visual Studio 2010编译平台进行前期操作 项目-->**属性(alt+F7)     配置属性-->清单工具-->输入和输出-->嵌入清单-->否     配置属性-->C/C++-->常规-->附加包含目录-->     配置属性-->链接器-->常规-->附加库目录-->     配置属性-->链接器-->输入-->附加依赖项-->补       充

iptables导致数据包过多时连接失败

前几天做服务器压力测试,本地10个线程不停的去向服务器建立连接,然后请求数据,然后连接再关闭,程序每运行几万次之后就会发现客户端程序没办法connect服务器,connect超时. 一开始怀疑是自己服务器的处理有问题,导致socket数过多没办法创建新的连接,现将系统中用户可以打开的最大文件数调成10w,继续进行压力测试,发现问题依然存在. 经过一些时间的检查之后,确定应该不是自己服务本身的问题,这时候想将iptables关闭试试,iptables里面是没有配置连接数限制的. 在关闭iptabl

Linux数据包路由原理、Iptables/netfilter入门学习

相关学习资料 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html http://zh.wikipedia.org/wiki/Netfilter http://www.netfilter.org/projects/iptables/ http://linux.vbird.org/linux_server/0250simple_firewall.php http://linux.vbird.o

linux 内核网络数据包接收流程

转:https://segmentfault.com/a/1190000008836467 本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 如果英文没有问题,强烈建议阅读后面参考里的两篇文章,里面介绍的更详细. 本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个UDP包的接收过程作为示例. 本示例里列出的函数调用关系来自于kernel 3.13.0,如果你的内核不是这个版本,函数名称和相关路径可能不一样,但背后的原理应该是一样的(或者有细微差别) 网卡到内存 网卡需

交互式数据包处理程序 Scapy 入门指南

概述 Scapy 是一个强大的交互式数据包处理程序(使用python编写).它能够伪造或者解码大量的网络协议数据包,能够发送.捕捉.匹配请求和回复包等等.它可以很容易地处理一些典型操作,比如端口扫描,tracerouting,探测,单元测试,攻击或网络发现(可替代hping,NMAP,arpspoof,ARP-SK,arping,tcpdump,tethereal,P0F等).最重要的他还有很多更优秀的特性--发送无效数据帧.注入修改的802.11数据帧.在WEP上解码加密通道(VOIP).AR

Linux网络 - 数据包的接收过程【转】

转自:https://segmentfault.com/a/1190000008836467 本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 如果英文没有问题,强烈建议阅读后面参考里的两篇文章,里面介绍的更详细. 本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个UDP包的接收过程作为示例. 本示例里列出的函数调用关系来自于kernel 3.13.0,如果你的内核不是这个版本,函数名称和相关路径可能不一样,但背后的原理应该是一样的(或者有细微差别) 网卡到内存 网卡

[转]Linux网络 - 数据包的接收过程

转, 原文: https://segmentfault.com/a/1190000008836467 ----------------------------------------------------------------------------------------------------------------- 本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 如果英文没有问题,强烈建议阅读后面参考里的两篇文章,里面介绍的更详细. 本文只讨论以太网的物理网

IP报文解析及基于IP 数据包的洪水攻击

版本(4bit) 报头长度(4bit) 优先级和服务类型(8bit) 总长度(16bit) 标识(16bit) 标志(3bit) 分段偏移(13bit) 存活期(8bit) 协议(8bit) 报头校验和(16bit) 源IP地址(32bit) 目的IP地址(32bit) 选项(0或32bit,若有的话) 数据(可变) 版本 IP版本号.报头长度 32位字的报头长度(HLEN).优先级和服务类型 服务类型描述数据报将如何被处理.前3位表示优先级位.总长度 包括报头和数据的数据包长度.标识 唯一的I

openVswitch(OVS)源代码分析之工作流程(数据包处理)

上篇分析到数据包的收发,这篇开始着手分析数据包的处理问题.在openVswitch中数据包的处理是其核心技术,该技术分为三部分来实现:第一.根据skb数据包提取相关信息封装成key值:第二.根据提取到key值和skb数据包进行流表的匹配:第三.根据匹配到的流表做相应的action操作(若没匹配到则调用函数往用户空间传递数据包):其具体的代码实现在 datapath/datapath.c 中的,函数为: void ovs_dp_process_received_packet(struct vpor