上网行为管理软件已经很多了,然而很多种都无法实现跨NAT设备的监控,这是因为无法定位到真实的源IP地址,在NAT设备前面的设备看来,所有的流量都是NAT设备发起的,NAT设备的存在为其后面的主机提供了一层屏障。那么有没有什么办法可以精确定位真实源IP地址呢?办法是有的,只是需要NAT设备的配合。
conntrack-tools工具是Netfilter社区提供的一款功能强大的ip_conntrack信息操作工具,可以方便实时的管理ip_conntrack信息,比如删除某条记录,提取事件等等。Linux的机制在内核实现,所谓的conntrack-tools只是一个用户态的信息操作工具,如果想监控ip_conntrack事件,则只需要执行conntrack -E即可
关于更多的conntrack-tools信息,请参考: http://conntrack-tools.netfilter.org/manual.html
[NEW] tcp 6 120 SYN_SENT src=128.129.0.3 dst=9.24.15.123 sport=4592 dport=8080 [UNREPLIED] src=9.24.15.123 dst=9.24.15.222 sport=8080 dport=4592
该条信息的意义不言自明,从字面意义上肯定是做了NAT,将源地址128.129.0.3转换为了9.24.14.222,如果说能将这类信息传递给监控网关,那么就可以做到针对真实源地址的监控,在监控网关上需要做的就是数据的整理。我们知道在监控网关上肯定有下列信息:
9.24.15.222:4592这个地址访问了9.24.15.123:8080
该数据和上述的conntrack -E输出的数据做一个汇总就能得到:
128.129.0.3:4592这个地址访问了9.24.15.123:8080
1.使用conntrack-tools监控事件
在Linux上,NAT一般是由ip_conntrack机制实现的,Linux本身肯定可以精确定位到真实的转换前的地址,需要做的仅仅是将这些信息传递给上网行为管理系统即可,这些信息可以在/proc/net/ip_conntrack中看到,然而我们关注的不是这些信息本身,而是针对这些信息的一系列的事件,比如某IP在某时间发起了一个到某目标地址的连接,某时间段后拆除了该连接等等。conntrack-tools工具是Netfilter社区提供的一款功能强大的ip_conntrack信息操作工具,可以方便实时的管理ip_conntrack信息,比如删除某条记录,提取事件等等。Linux的机制在内核实现,所谓的conntrack-tools只是一个用户态的信息操作工具,如果想监控ip_conntrack事件,则只需要执行conntrack -E即可
关于更多的conntrack-tools信息,请参考: http://conntrack-tools.netfilter.org/manual.html
2.总体原理
以下是一条conntrack -E的输出:[NEW] tcp 6 120 SYN_SENT src=128.129.0.3 dst=9.24.15.123 sport=4592 dport=8080 [UNREPLIED] src=9.24.15.123 dst=9.24.15.222 sport=8080 dport=4592
该条信息的意义不言自明,从字面意义上肯定是做了NAT,将源地址128.129.0.3转换为了9.24.14.222,如果说能将这类信息传递给监控网关,那么就可以做到针对真实源地址的监控,在监控网关上需要做的就是数据的整理。我们知道在监控网关上肯定有下列信息:
9.24.15.222:4592这个地址访问了9.24.15.123:8080
该数据和上述的conntrack -E输出的数据做一个汇总就能得到:
128.129.0.3:4592这个地址访问了9.24.15.123:8080