1、验证环境

strongswan version
Linux strongSwan U5.9.1/K4.18.0-240.1.1.el8_3.x86_64

wireshark version 3.4.7

Linux Centos 8

2、准备工作

strongswan需要配置日志,默认安装的strongswan日志输出在/var/log/messages中,这个里面还包含linux其他日志,不好区分,先修改配置,将strongswan日志单独输出到文件中。strongswan的默认配置为:/etc/strongswan/strongswan.conf

参考如下设置:
charon {

load_modular = yes
plugins {
    include strongswan.d/charon/*.conf
}
    filelog {
    charon {
        path = /var/log/charon.log
        # add a timestamp prefix
        time_format = %b %e %T
        # prepend connection name, simplifies grepping
        ike_name = yes
        # overwrite existing files
        append = no
        # increase default loglevel for all daemon subsystems
        default = 4
        # flush each line to disk
        flush_line = yes
    }
    stderr {
        # more detailed loglevel for a specific subsystem, overriding the
        # default loglevel.
        ike = 2
        knl = 3
    }
    }

}

default定义的是日志的级别,默认日志级别为:-1,0,1,2,3,4,-1是完全没有日志,
0只告诉你建立连接,连接关闭;
1只输出错误提示,
2会输出错误,警告和调试信息;
3会把连接传输的数据也打印;
4则会把密钥内容这些敏感数据也打印。

由于本文要用wireshark解密协商报文,需要用到秘钥等信息,所以日志级别要设置为4

3、IKEv1 主模式

这里忽略strongswan的使用,如果不懂的可以参考strongswan的官方文档进行学习配置。
使用tcpdump进行抓包(例如:tcpdump host <ip> -w ./isakmp_mainmode.cap),待协商成功后,将抓到的报文通过wireshark打开,默认情况下,看到的报文如下:
image.png
即从第5步交互开始,都是加密后的密文了,无法看到交互的具体载荷内容。

按照如下路径打开wireshark的ISAKMP的配置:
Wireshark—>Preference—>Protocols—>ISAKMP
image.png
选择IKEv1:
image.png
可以看到,需要填两个字段,一个是Initiator's COOKIE,这个就是报文中的Initiator SPI值,直接填发起方的即可,对于Encryption Key,这个就需要从strongswan的日志中查找了。
打开strongswan的日志文件,搜索如下内容
image.png
将encryption key Ka的值填入Enctyption Key即可。
然后再回去看刚才的报文,可以发现从第5步往后的报文已经解密了。

4、IKEv1野蛮模式

方法同IKEv1主模式,只是野蛮模式是从第3步交互开始就是密文了。

5、IKEv2

同样方式的抓包,打开wireshark的ISAKMP配置,选择IKEv2:
image.png
这次需要填写的字段比较多,同样的Initiator's SPI和Responder's SPI可以从报文中获取,其他字段从日志中获取:
image.png
加密算法,认证算法这个就不多说了,配置协商的时候肯定已经清楚了。
配置完成后,再看IKEv2的报文,已经解密了。


laughbug
275 声望2 粉丝

Quitters never win and winners never quit.