如何在加密之前在tcpdump中查看传出的ESP数据包

时间:2014-02-21 10:24:29

标签: linux encryption tcpdump ipsec

我在两个终端系统之间安装了Ipsec Tunnel。当我在传出接口上捕获数据包时,例如eth0,我只能看到加密的ESP数据包从我的系统中出来。我必须去看看接收端看看实际传输的是什么,即在接收端我可以在解密后看到数据包。类似地,接收者发送的确认。它在linux内核中是如何工作的?有没有办法在加密之前在tcpdump中查看发送方的数据包?

2 个答案:

答案 0 :(得分:10)

您的问题中有三个问题:

  1. 如何在加密之前在tcpdump中查看传出的ESP数据包?
  2. 它在linux内核中是如何工作的?
  3. 有没有办法在加密之前在tcpdump中查看发送方的数据包?
  4. 第三个问题的答案是

    这取决于您的内核以及您正在使用的实现。 如果你在2.4内核中使用KLIPS作为任何*天鹅解决方案的一部分,那么是。

    否则,如果您使用的是使用KAME / * BSD模型的2.6内核,那么

    不,除非您更改Ipssec或iptables配置,以便将数据包发送到未加密的另一个接口,然后将未加密的数据包转发到将加密的接口。

    第一个问题的答案是更改您的iptables配置和IPSec配置。

    1. 将数据从一个接口发送到同一主机上的另一个接口。
    2. 设置从第二个界面到目的地的数据转发
    3. 在安全策略中配置第二个接口的IP地址,以在第二个接口上创建隧道。
    4. 这种方式可以在加密接口上进行tcpdump,而无需更改任何内容,并且在数据加密之前。

      对于KLIPS和2.4内核,使用-i开关就像在tcpdump中特定的接口一样简单,就像ipsec0一样。

      查看未加密数据的其他选项涉及使用带有-E标志的tcpdump和相关参数(see man page),这些参数在加密后解密数据或使用tcpdump捕获加密数据然后在Wireshark中解密(有关Wireshark中IPSec的ESP解密的更多信息位于here)。

      或者,您可以使用源代码中的printk或printk_times将检测设置为xfrmesp_input

      关于第二个问题,有几张图片解释了它如何在高层工作,包括解释Solaris实现作为Oracle's System Administration Guide: IP ServicesLinux's Foundation Network Flow through the kernel diagram的一部分的那些。

      另请参阅以下reference。基本上,使用setkey进行手动配置或在用户空间使用IKE守护进程进行自动配置会将信息传递给XFRM,XFRM会在数据包到达netfilter prerouting之前对其进行转换。

      有关KLIPS和KAME历史的更多信息,请参阅here

答案 1 :(得分:0)

假设你在Linux上:

我的方法是将带有NFQUEUE目标的iptables规则放在处理管道中的正确位置。然后使用tshark-i nfqueue来捕获数据包。