Strongswan:gcrypt-ikev2/rw-cert测试浅析

实验介绍        

        该场景是远程用户(roadwarrior)carol和网关moon使用基于GNU libgcrypt库的加密插件gcrypt,执行加密相关操作。而远程用户dave使用strongswan默认的加密插件:为IKE连接使用加密套件:aes des sha1 sha2 md5 gmp等。远程用户carol和dave建立到网关moon的连接,认证采用X.509证书方式,连接成功建立之后,在主机carol和dave上ping网关moon之后的虚拟主机alice,以验证连通性。

        以下启动gcrypt-ikev2/rw-cert测试用例.

        注意:在启动之前需要执行start-testing脚本开启测试环境。

$ cd strongswan-5.9.6/testing
$
$ sudo ./do-tests gcrypt-ikev2/rw-cert
 
Guest kernel : 5.2.11
strongSwan   : 5.9.6
Date         : 20220621-1053-20

[ ok ]  1 gcrypt-ikev2/rw-cert: pre..test..post

Passed : 1
Failed : 0

The results are available in /srv/strongswan-testing/testresults/20220621-1053-20
or via the link http://192.168.0.150/testresults/20220621-1053-20

Finished : 202206221-1053-36

      由以上显示可知:测试用例gcrypt-ikev2/rw-cert的测试结果记录文件保存在以下目录:/srv/strongswan-testing/testresults/20220621-1053-20/gcrypt-ikev2/rw-cert/中,这些文件记录了测试过程中虚拟机carol和dave,以及网关moon的各种状态信息和运行日志。

        测试拓扑如下:

配置

moon网关配置

配置文件swanctl.conf

strongswan-5.9.6/testing/tests/gcrypt-ikev2/rw-cert/hosts/moon/etc/swanctl/swanctl.conf

     注意网关moon的连接配置

  • 连接rw(roadwarrior)的proposals使用:aes128-sha256-modp3072,3des-sha1-modp1536,分别对于主机dave和carol的连接proposals配置 。
  • 子连接net的esp_proposals使用:caes128-sha256-modp3072,3des-sha1-modp1536,分别对于主机dave和carol的子连接proposals配置。

        作为网关,其事先并不知晓连接对端的IP地址信息,此处只有local_addrs的配置。

connections {

   rw {
      local_addrs  = 192.168.0.1

      local {
         auth = pubkey
         certs = moonCert.pem
         id = moon.strongswan.org
      }
      remote {
         auth = pubkey
      }
      children {
         net {
            local_ts  = 10.1.0.0/16 

            updown = /usr/local/libexec/ipsec/_updown iptables
            esp_proposals = aes128-sha256-modp3072,3des-sha1-modp1536
         }
      }
      version = 2
      proposals = aes128-sha256-modp3072,3des-sha1-modp1536 
   }
}

配置文件strongswan.conf

strongswan-5.9.6/testing/tests/gcrypt-ikev2/rw-cert/hosts/moon/etc/strongswan.conf

        该配置文件指定要加载的模块,与carol配置相同,这里使用gcrypt插件。(也可以保持默认)

swanctl {
  load = pem pkcs1 x509 revocation constraints pubkey openssl random
}

charon-systemd {
  load = curl test-vectors pem pkcs1 gcrypt nonce x509 revocation hmac xcbc ctr ccm gcm vici kernel-netlink socket-default updown
  integrity_test = yes
  crypto_test {
    on_add = yes
  }
}

carol配置

 配置文件swanctl.conf

strongswan-5.9.6/testing/tests/gcrypt-ikev2/rw-cert/hosts/carol/etc/swanctl/swanctl.conf

    虚拟主机carol的IP地址为192.168.0.100,而moon网关的IP地址为192.168.0.1。

   另,

  •  连接home使用proposals:3des-sha1-modp1536
  •  子连接home使用esp_proposals:3des-sha1-modp1536
  •  IKE协议使用version 2
connections {

   home {
      local_addrs  = 192.168.0.100
      remote_addrs = 192.168.0.1 

      local {
         auth = pubkey
         certs = carolCert.pem
         id = carol@strongswan.org
      }
      remote {
         auth = pubkey
         id = moon.strongswan.org 
      }
      children {
         home {
            remote_ts = 10.1.0.0/16 

            updown = /usr/local/libexec/ipsec/_updown iptables
            esp_proposals = 3des-sha1-modp1536
         }
      }
      version = 2
      proposals = 3des-sha1-modp1536 
   }
}

配置文件strongswan.conf

strongswan-5.9.6/testing/tests/gcrypt-ikev2/rw-cert/hosts/carol/etc/strongswan.conf

 该配置文件指定需要加载的模块,注意这里加载测试的gcrypt插件。

swanctl {
  load = pem pkcs1 x509 revocation constraints pubkey openssl random
}

charon-systemd {
  load = curl test-vectors pem pkcs1 gcrypt nonce x509 revocation hmac xcbc ctr ccm gcm vici kernel-netlink socket-default updown
  integrity_test = yes
  crypto_test {
    on_add = yes
  }
}

dave配置

配置文件swanctl.conf

strongswan-5.9.6/testing/tests/gcrypt-ikev2/rw-cert/hosts/dave/etc/swanctl/swanctl.conf

 虚拟主机carol的IP地址为192.168.0.200,而moon网关的IP地址为192.168.0.1。

另,

  • 连接home使用proposals:aes128-sha256-modp3072
  • 子连接home使用esp_proposals:aes128-sha256-modp3072
  • IKE协议使用version 2
connections {

   home {
      local_addrs  = 192.168.0.200
      remote_addrs = 192.168.0.1 

      local {
         auth = pubkey
         certs = daveCert.pem
         id = dave@strongswan.org
      }
      remote {
         auth = pubkey
         id = moon.strongswan.org 
      }
      children {
         home {
            remote_ts = 10.1.0.0/16 

            updown = /usr/local/libexec/ipsec/_updown iptables
            esp_proposals = aes128-sha256-modp3072
         }
      }
      version = 2
      proposals = aes128-sha256-modp3072
   }
}

配置文件strongswan.conf

strongswan-5.9.6/testing/tests/gcrypt-ikev2/rw-cert/hosts/dave/etc/strongswan.conf

该配置文件指定需要加载的模块,与carol的配置不同,这里不使用gcrypt插件,而是加载strongswan默认的aes des sha1 sha2等插件。

swanctl {
  load = pem pkcs1 x509 revocation constraints pubkey openssl random
}

charon-systemd {
  load = test-vectors aes des sha1 sha2 md5 pem pkcs1 gmp random nonce x509 curl revocation hmac xcbc ctr ccm vici stroke kernel-netlink socket-default updown
  integrity_test = yes
  crypto_test {
    required = yes
    on_add = yes
  }
}

准备

        配置文件:strongswan-5.9.6/testing/tests/gcrypt-ikev2/rw-cert/pretest.dat,内容参考如下。

        在预测试pre-test阶段:

  1.       备份moon和carol,dave主机的iptables配置。
  2.       启动strongswan。
  3.        使用脚本expect-connection检测名称为net的连接(carol和dave主机上为home)是否建         立,超过5秒钟检测不到,打印失败信息。
  4.       在主机carol和dave上swanctl初始化一个名称为home的子连接。

        通过之前的介绍已经在carol,dave和moon虚拟主机的配置文件(etc/swanctl/swanctl.conf)中看到了home和net的配置信息。

moon::iptables-restore < /etc/iptables.rules
carol::iptables-restore < /etc/iptables.rules
dave::iptables-restore < /etc/iptables.rules
moon::systemctl start strongswan
carol::systemctl start strongswan
dave::systemctl start strongswan
moon::expect-connection net 
carol::expect-connection home 
carol::swanctl --initiate --child home 2> /dev/null
dave::expect-connection home
dave::swanctl --initiate --child home 2> /dev/null

测试

        配置文件:strongswan-5.9.6/testing/tests/gcrypt-ikev2/rw-cert/evaltest.dat,内容如下。

        在第一,二行中,SSH登录到carol/dave主机执行ping命令,目的IP为alice主机的地址,检查alice返回的信息。

carol::ping -c 1 PH_IP_ALICE::64 bytes from PH_IP_ALICE: icmp_.eq=1::YES
dave:: ping -c 1 PH_IP_ALICE::64 bytes from PH_IP_ALICE: icmp_.eq=1::YES
carol::swanctl --list-sas --raw 2> /dev/null::home.*version=2 state=ESTABLISHED local-host=192.168.0.100 local-port=4500 local-id=carol@strongswan.org remote-host=192.168.0.1 remote-port=4500 remote-id=moon.strongswan.org initiator=yes.*encr-alg=3DES_CBC integ-alg=HMAC_SHA1_96 prf-alg=PRF_HMAC_SHA1 dh-group=MODP_1536.*child-sas.*home.*state=INSTALLED mode=TUNNEL protocol=ESP.*encr-alg=3DES_CBC integ-alg=HMAC_SHA1_96.*local-ts=\[192.168.0.100/32] remote-ts=\[10.1.0.0/16]::YES
dave:: swanctl --list-sas --raw 2> /dev/null::home.*version=2 state=ESTABLISHED local-host=192.168.0.200 local-port=4500 local-id=dave@strongswan.org remote-host=192.168.0.1 remote-port=4500 remote-id=moon.strongswan.org initiator=yes.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=MODP_3072.*child-sas.*home.*state=INSTALLED mode=TUNNEL protocol=ESP.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128.*local-ts=\[192.168.0.200/32] remote-ts=\[10.1.0.0/16]::YES
moon:: swanctl --list-sas --ike-id 1 --raw 2> /dev/null::rw.*version=2 state=ESTABLISHED local-host=192.168.0.1 local-port=4500 local-id=moon.strongswan.org remote-host=192.168.0.100 remote-port=4500 remote-id=carol@strongswan.org.*encr-alg=3DES_CBC integ-alg=HMAC_SHA1_96 prf-alg=PRF_HMAC_SHA1 dh-group=MODP_1536.*child-sas.*net.*state=INSTALLED mode=TUNNEL protocol=ESP.*encr-alg=3DES_CBC integ-alg=HMAC_SHA1_96.*local-ts=\[10.1.0.0/16] remote-ts=\[192.168.0.100/32]::YES
moon:: swanctl --list-sas --ike-id 2 --raw 2> /dev/null::rw.*version=2 state=ESTABLISHED local-host=192.168.0.1 local-port=4500 local-id=moon.strongswan.org remote-host=192.168.0.200 remote-port=4500 remote-id=dave@strongswan.org.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=MODP_3072.*child-sas.*net.*state=INSTALLED mode=TUNNEL protocol=ESP.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128.*local-ts=\[10.1.0.0/16] remote-ts=\[192.168.0.200/32]::YES
moon::tcpdump::IP carol.strongswan.org > moon.strongswan.org: ESP::YES
moon::tcpdump::IP moon.strongswan.org > carol.strongswan.org: ESP::YES
moon::tcpdump::IP dave.strongswan.org > moon.strongswan.org: ESP::YES
moon::tcpdump::IP moon.strongswan.org > dave.strongswan.org: ESP::YES

        第三行测试语句在carol主机上执行命令 swanctl --list-sas --raw,检查输出结果是否与指定内容匹配。以下为swanctl的执行结构,可见两者完全匹配。

  home: #1, ESTABLISHED, IKEv2, 66bd06168e658b7a_i* 221eec35659acbb3_r
    local  'carol@strongswan.org' @ 192.168.0.100[4500]
    remote 'moon.strongswan.org' @ 192.168.0.1[4500]
    3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1536
    established 7s ago, rekeying in 12967s
    home: #1, reqid 1, INSTALLED, TUNNEL, ESP:3DES_CBC/HMAC_SHA1_96
      installed 7s ago, rekeying in 3448s, expires in 3953s
      in  c504c668,     84 bytes,     1 packets,     1s ago
      out cd086628,     84 bytes,     1 packets,     1s ago
      local  192.168.0.100/32
      remote 10.1.0.0/16

        第四行测试语句在dave主机上执行命令 swanctl --list-sas --raw,检查输出结果是否与指定内容匹配。以下为swanctl的执行结构,可见两者完全匹配。

  home: #1, ESTABLISHED, IKEv2, 89a722d0fd880266_i* 0102abcab287ac44_r
    local  'dave@strongswan.org' @ 192.168.0.200[4500]
    remote 'moon.strongswan.org' @ 192.168.0.1[4500]
    AES_CBC-128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_3072
    established 2s ago, rekeying in 13626s
    home: #1, reqid 1, INSTALLED, TUNNEL, ESP:AES_CBC-128/HMAC_SHA2_256_128
      installed 2s ago, rekeying in 3257s, expires in 3958s
      in  ccc0b755,     84 bytes,     1 packets,     2s ago
      out c4eff1c9,     84 bytes,     1 packets,     2s ago
      local  192.168.0.200/32
      remote 10.1.0.0/16

        第五行测试语句在moon网关上执行命令 swanctl --list-sas --ike-id 1 --raw,这里指定了ike-id参数为1,由于在测试过程中,carol主机首先发起了连接请求,此处匹配的为carol的连接。检查输出结果是否与指定内容匹配。以下为swanctl的执行结构,可见两者完全匹配。

  rw: #1, ESTABLISHED, IKEv2, 66bd06168e658b7a_i 221eec35659acbb3_r*
    local  'moon.strongswan.org' @ 192.168.0.1[4500]
    remote 'carol@strongswan.org' @ 192.168.0.100[4500]
    3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1536
    established 7s ago, rekeying in 14077s
    net: #1, reqid 1, INSTALLED, TUNNEL, ESP:3DES_CBC/HMAC_SHA1_96
      installed 7s ago, rekeying in 3409s, expires in 3953s
      in  cd086628,     84 bytes,     1 packets,     1s ago
      out c504c668,     84 bytes,     1 packets,     1s ago
      local  10.1.0.0/16
      remote 192.168.0.100/32

        第六行测试语句在moon网关上执行命令 swanctl --list-sas --ike-id 2 --raw,这里指定了ike-id参数为2,由于在测试过程中,dave主机在carol之后发起连接请求,此处匹配的为dave的连接。检查输出结果是否与指定内容匹配。以下为swanctl的执行结构,可见两者完全匹配。

  rw: #2, ESTABLISHED, IKEv2, 89a722d0fd880266_i 0102abcab287ac44_r*
    local  'moon.strongswan.org' @ 192.168.0.1[4500]
    remote 'dave@strongswan.org' @ 192.168.0.200[4500]
    AES_CBC-128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_3072
    established 1s ago, rekeying in 13301s
    net: #2, reqid 2, INSTALLED, TUNNEL, ESP:AES_CBC-128/HMAC_SHA2_256_128
      installed 1s ago, rekeying in 3318s, expires in 3959s
      in  c4eff1c9,     84 bytes,     1 packets,     1s ago
      out ccc0b755,     84 bytes,     1 packets,     1s ago
      local  10.1.0.0/16
      remote 192.168.0.200/32

        最后4行测试语句都是在moon网关上执行的,这里的tcpdump命令并不执行,而是检查在以上的测试过程中后台tcpdump名称输出到文件/tmp/tcpdump.log中的日志信息,确认carol与alice,以及dave和alice之间的ESP加密的ping报文是否正常。

  12:53:50.633829 IP moon.strongswan.org > carol.strongswan.org: ESP(spi=0xc504c668,seq=0x1), length 116
  12:53:50.687277 IP dave.strongswan.org > moon.strongswan.org: ESP(spi=0xc4eff1c9,seq=0x1), length 136
  12:53:50.687362 IP dave.strongswan.org > alice.strongswan.org: ICMP echo request, id 6242, seq 1, length 64
  12:53:50.687634 IP moon.strongswan.org > dave.strongswan.org: ESP(spi=0xccc0b755,seq=0x1), length 136

收尾

        配置文件:strongswan-5.9.6/testing/tests/gcrypt-ikev2/rw-cert/posttest.dat,内容如下。停止carol和dave主机上的ike连接home。终止carol,dave和moon上的StrongSwan进程。恢复moon和carol,dave主机上的iptables规则配置。

carol::swanctl --terminate --ike home
dave::swanctl --terminate --ike home
carol::systemctl stop strongswan
dave::systemctl stop strongswan
moon::systemctl stop strongswan
moon::iptables-restore < /etc/iptables.flush
carol::iptables-restore < /etc/iptables.flush
dave::iptables-restore < /etc/iptables.flush

        测试结果文件默认都保存在目录:/srv/strongswan-testing/testresults/20220621-1053-20/gcrypt-ikev2/rw-cert下。

其中,

  • 文件console.log 记录了整个的测试过程。
  • 文件carol.daemon.log,dave.daemon.log和moon.daemon.log文件记录了charon-systemd主进程的日志。

 完整的测试结果文件里边见本文开始部分。

 下图为IKEv2报文的交互报文:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
IKEv2/IPsec是一种用于建立和管理***:Internet密钥交换版本2(IKEv2)和IPsec(Internet协议安全性)。以下是对IKEv2/IPsec的介绍: 1. IKEv2(Internet密钥交换版本2):IKEv2是一种安全协议,用于在两个通信设备之间建立和管理安全连接。它提供了身份验证、密钥交换和安全参数协商等功能。IKEv2使用了先进的加密算法和密钥管理机制,可以确保通信的机密性和完整性。 2. IPsec(Internet协议安全性):IPsec是一种网络协议,用于保护IP数据包的安全传输。它提供了数据加密、数据完整性验证和身份验证等功能。IPsec可以在网络层对数据进行保护,使得通过互联网传输的数据能够受到保护。 IKEv2/IPsec的工作流程如下: 1. 建立安全关联(SA):通信设备之间通过IKEv2协商建立安全关联,包括身份验证、加密算法、密钥长度等参数的协商。 2. 密钥交换:通过IKEv2协议进行密钥交换,确保通信设备之间共享相同的密钥。 3. 数据传输:使用IPsec协议对数据进行加密和认证,并通过IP网络进行传输。 4. 终止连接:当通信结束时,IKEv2/IPsec会终止连接并释放相关资源。 优点: - 安全性高:IKEv2/IPsec使用了先进的加密算法和密钥管理机制,可以确保通信的机密性和完整性。 - 可靠性强:IKEv2/IPsec具有快速重连和移动设备支持等特性,可以在网络切换或设备移动时保持连接的稳定性。 - 兼容性好:IKEv2/IPsec是一种广泛支持的协议套件,可以在多种操作系统和设备上使用。 缺点: - 配置复杂:IKEv2/IPsec的配置相对复杂,需要正确设置身份验证、加密算法等参数。 - 性能开销:由于加密和认证等操作的开销,使用IKEv2/IPsec可能会对网络性能产生一定影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值