SWAN之gcrypt-ikev1/alg-serpent测试

本测试中远程用户(roadwarrior)carol和网关moon为IKE连接使用加密套件:serpent256-sha512-modp4096,对IPSEC子连接使用:serpent256-sha512加密验证算法。远程用户carol建立到网关moon的连接,秘钥交换基于modp4096算法。连接成功建立之后,在主机carol上ping网关moon之后的虚拟主机alice,以验证连通性。

serpent算法为一种分组加密算法,运算时,每个块的长度为128比特,秘钥长度为:128/192/256bit可选,本测试使用256bit长度秘钥。以下启动gcrypt-ikev1/alg-serpent测试用例,注意在启动之前需要执行start-testing脚本开启测试环境。

$ cd strongswan-5.8.1/testing
$
$ sudo ./do-tests gcrypt-ikev1/alg-serpent
 
Guest kernel : 5.2.11
strongSwan   : 5.8.1
Date         : 20191029-1136-29

[ ok ]  1 gcrypt-ikev1/alg-serpent: pre..test..post

Passed : 1
Failed : 0

The results are available in /srv/strongswan-testing/testresults/20191029-1136-29
or via the link http://192.168.0.150/testresults/20191029-1136-29

Finished : 20191029-1136-34

由以上显示可知测试用例gcrypt-ikev1/alg-serpent的测试结果记录文件保存在目录:/srv/strongswan-testing/testresults/20191029-1136-29/gcrypt-ikev1/alg-serpent/中,这些文件记录了测试过程中虚拟主机carol和网关moon的各种状态信息和运行日志。测试拓扑如下:

在这里插入图片描述

carol配置

连接配置文件:strongswan-5.8.1/testing/tests/gcrypt-ikev1/alg-serpent/hosts/carol/etc/swanctl/swanctl.conf,内容如下。虚拟主机carol的IP地址为192.168.0.100,而moon网关的IP地址为192.168.0.1。

另外,连接home使用proposals:serpent256-sha512-modp4096,子连接home使用esp_proposals:serpent256-sha512。IKE协议使用version 1。

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 

            esp_proposals = serpent256-sha512 
         }
      }
      version = 1 
      proposals = serpent256-sha512-modp4096 
   }
}

StrongSwan配置文件:strongswan-5.8.1/testing/tests/gcrypt-ikev1/alg-serpent/hosts/carol/etc/strongswan.conf,内容如下,指定需要加载的模块。

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

charon-systemd {
  load = nonce pem pkcs1 gcrypt hmac x509 revocation curl vici kernel-netlink socket-default
  send_vendor_id = yes
}

moon网关配置

配置文件:strongswan-5.8.1/testing/tests/gcrypt-ikev1/alg-serpent/hosts/moon/etc/swanctl/swanctl.conf,内容如下。注意网关moon的连接配置,连接rw(roadwarrior)的proposals使用:serpent256-sha512-modp4096。子连接net的esp_proposals使用serpent256-sha512。两个proposals与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 

            esp_proposals = serpent256-sha512 
         }
      }
      version = 1 
      proposals = serpent256-sha512-modp4096 
   }
}

StrongSwan配置文件:strongswan-5.8.1/testing/tests/gcrypt-ikev1/alg-serpent/hosts/moon/etc/strongswan.conf,内容如下,指定要加载的模块。

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

charon-systemd {
  load = nonce pem pkcs1 gcrypt hmac x509 revocation vici kernel-netlink socket-default
  send_vendor_id = yes
}

准备阶段

配置文件:strongswan-5.8.1/testing/tests/gcrypt-ikev1/alg-serpent/pretest.dat,内容如下。在预测试pre-test阶段,备份moon和carol主机的iptables配置。启动strongswan。使用脚本expect-connection检测名称为net的连接(carol主机上为home)是否建立,超过5秒钟检测不到,打印失败信息。在主机carol上swanctl初始化一个名称为home的子连接。

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

moon::systemctl start strongswan
carol::systemctl start strongswan
moon::expect-connection rw
carol::expect-connection home
carol::swanctl --initiate --child home 2> /dev/null

测试阶段

配置文件:strongswan-5.8.1/testing/tests/gcrypt-ikev1/alg-serpent/evaltest.dat,内容如下。在第一行中,SSH登录到carol主机执行ping命令,目的IP为alice主机的地址,检查alice返回的信息。

carol::ping -c 1 -s 120 -p deadbeef PH_IP_ALICE::128 bytes from PH_IP_ALICE: icmp_.eq=1::YES
carol::swanctl --list-sas --raw 2> /dev/null::home.*version=1 state=ESTABLISHED local-host=192.168.0.100 local-port=500 local-id=carol@strongswan.org remote-host=192.168.0.1 remote-port=500 remote-id=moon.strongswan.org initiator=yes.*encr-alg=SERPENT_CBC encr-keysize=256 integ-alg=HMAC_SHA2_512_256 prf-alg=PRF_HMAC_SHA2_512 dh-group=MODP_4096.*child-sas.*home.*state=INSTALLED mode=TUNNEL protocol=ESP.*encr-alg=SERPENT_CBC encr-keysize=256 integ-alg=HMAC_SHA2_512_256.*local-ts=\[192.168.0.100/32] remote-ts=\[10.1.0.0/16]::YES
moon::swanctl --list-sas --raw 2> /dev/null::rw.*version=1 state=ESTABLISHED local-host=192.168.0.1 local-port=500 local-id=moon.strongswan.org remote-host=192.168.0.100 remote-port=500 remote-id=carol@strongswan.org.*encr-alg=SERPENT_CBC encr-keysize=256 integ-alg=HMAC_SHA2_512_256 prf-alg=PRF_HMAC_SHA2_512 dh-group=MODP_4096.*child-sas.*net.*state=INSTALLED mode=TUNNEL protocol=ESP.*encr-alg=SERPENT_CBC encr-keysize=256 integ-alg=HMAC_SHA2_512_256.*local-ts=\[10.1.0.0/16] remote-ts=\[192.168.0.100/32]::YES
carol::ip xfrm state::enc cbc(serpent)::YES
moon:: ip xfrm state::enc cbc(serpent)::YES
moon::tcpdump::IP carol.strongswan.org > moon.strongswan.org: ESP.*length 216::YES
moon::tcpdump::IP moon.strongswan.org > carol.strongswan.org: ESP.*length 216::YES

第二行测试语句在carol主机上执行命令 swanctl --list-sas --raw,检查输出结果是否与指定内容匹配。以下为swanctl的执行结构,可见两者完全匹配。注意字段encr-alg,其指定安全关联使用的加密算法为:SERPENT_CBC-256。

  home: #1, ESTABLISHED, IKEv1, 471fcbccb8bdaeb7_i* 9d923a80f6ff9e32_r
    local  'carol@strongswan.org' @ 192.168.0.100[500]
    remote 'moon.strongswan.org' @ 192.168.0.1[500]
    SERPENT_CBC-256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/MODP_4096
    established 2s ago, rekeying in 13576s
    home: #1, reqid 1, INSTALLED, TUNNEL, ESP:SERPENT_CBC-256/HMAC_SHA2_512_256
      installed 2s ago, rekeying in 3347s, expires in 3958s
      in  c0e70669,    148 bytes,     1 packets,     2s ago
      out cbbd3371,    148 bytes,     1 packets,     2s ago
      local  192.168.0.100/32
      remote 10.1.0.0/16

第三行测试语句为登录到moon网关,执行swanctl --list-sas --raw命令并检查输出结果,其内容与第二行类似。moon网关上执行swanctl --list-conns的结果如下显示。

 rw: #1, ESTABLISHED, IKEv1, 471fcbccb8bdaeb7_i 9d923a80f6ff9e32_r*
   local  'moon.strongswan.org' @ 192.168.0.1[500]
   remote 'carol@strongswan.org' @ 192.168.0.100[500]
   SERPENT_CBC-256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/MODP_4096
   established 0s ago, rekeying in 13759s
   net: #1, reqid 1, INSTALLED, TUNNEL, ESP:SERPENT_CBC-256/HMAC_SHA2_512_256
     installed 0s ago, rekeying in 3474s, expires in 3960s
     in  cbbd3371,    148 bytes,     1 packets,     0s ago
     out c0e70669,    148 bytes,     1 packets,     0s ago
     local  10.1.0.0/16
     remote 192.168.0.100/32

第四和第五行测试语句分别登录到carol和moon上执行ip xfrm state命令,确认输出结果中的加密描述字符:enc cbc(serpent)。以下为carol主机上的执行结果:

 src 192.168.0.100 dst 192.168.0.1
         proto esp spi 0xcbbd3371(3418174321) reqid 1(0x00000001) mode tunnel
         replay-window 0 seq 0x00000000 flag af-unspec (0x00100000)
         auth-trunc hmac(sha512) 0x48e9aeeaa91ddd890f4370a16acd33e9386628f99bf6b19fc395830c5f3b127f35af6f240a2dede7212f4c4ea8fe1    62d22e35fa4c97cd1c834c9182ec79a8e3e (512 bits) 256
         enc cbc(serpent) 0x68c53b0ab69ca4248fbeb35ca7b49983a06fe996da29973af99b3e2e8e18c43a (256 bits)
         anti-replay context: seq 0x0, oseq 0x1, bitmap 0x00000000
         ...
 src 192.168.0.1 dst 192.168.0.100
         proto esp spi 0xc0e70669(3236365929) reqid 1(0x00000001) mode tunnel
         replay-window 32 seq 0x00000000 flag af-unspec (0x00100000)
         auth-trunc hmac(sha512) 0x7baa38cb33de86b6152c05338bd39f91cf6ae3151261d10fc534a6274f26471d26575b9a2d228dad638844ae03de1    5a9e9026f86c758a4a4ba0943b3b9a01df0 (512 bits) 256
         enc cbc(serpent) 0x3b48fba83435eaba1d54ec18bff9853d60a8c7e35e52a2bf44c98e2fee6e22a2 (256 bits)
         anti-replay context: seq 0x1, oseq 0x0, bitmap 0x00000001
         ...

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

  11:36:40.155920 IP carol.strongswan.org > moon.strongswan.org: ESP(spi=0xcbbd3371,seq=0x1), length 216
  11:36:40.156056 IP carol.strongswan.org > alice.strongswan.org: ICMP echo request, id 6581, seq 1, length 128
  11:36:40.156383 IP moon.strongswan.org > carol.strongswan.org: ESP(spi=0xc0e70669,seq=0x1), length 216

收尾阶段

配置文件:strongswan-5.8.1/testing/tests/gcrypt-ikev1/alg-serpent/posttest.dat,内容如下。终止carol和moon上的StrongSwan进程。

carol::systemctl stop strongswan
moon::systemctl stop strongswan

测试结果文件默认都保存在目录:/srv/strongswan-testing/testresults/20191029-1136-29/gcrypt-ikev1/alg-serpent下,其中文件console.log 记录了整个的测试过程。文件carol.daemon.log和moon.daemon.log文件记录了charon-systemd主进程的日志。完整的测试结果文件里边见本文开始部分。下图为IKEv2报文的交互报文。

在这里插入图片描述

END

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值