SWAN之gcrypt-ikev1/alg-twofish测试

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

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

$ cd strongswan-5.8.1/testing
$
$ sudo ./do-tests gcrypt-ikev1/alg-twofish
 
Guest kernel : 5.2.11
strongSwan   : 5.8.1
Date         : 20191029-1222-42

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

Passed : 1
Failed : 0

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

Finished : 20191029-1222-46

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

在这里插入图片描述

carol配置

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

另外,连接home使用proposals:twofish256-sha512-modp4096 ,子连接home使用esp_proposals:twofish256-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 = twofish256-sha512 
         }
      }
      version = 1 
      proposals = twofish256-sha512-modp4096 
   }
}

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

作为网关,其事先并不知晓连接对端的IP地址信息,此处只有local_addrs的配置。在子连接net中未配置updown的firewall脚本,所以在之后的测试过程中不需要保存和恢复iptables规则。

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 = twofish256-sha512 
         }
      }
      version = 1 
      proposals = twofish256-sha512-modp4096 
   }
}

StrongSwan配置文件:strongswan-5.8.1/testing/tests/gcrypt-ikev1/alg-twofish/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-twofish/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-twofish/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=TWOFISH_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=TWOFISH_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=TWOFISH_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=TWOFISH_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(twofish)::YES
moon:: ip xfrm state::enc cbc(twofish)::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,其指定安全关联使用的加密算法为:TWOFISH_CBC-256。

  home: #1, ESTABLISHED, IKEv1, c90b693afb15fbe4_i* e4ca9ac08d151faa_r
    local  'carol@strongswan.org' @ 192.168.0.100[500]
    remote 'moon.strongswan.org' @ 192.168.0.1[500]
    TWOFISH_CBC-256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/MODP_4096
    established 1s ago, rekeying in 14268s
    home: #1, reqid 1, INSTALLED, TUNNEL, ESP:TWOFISH_CBC-256/HMAC_SHA2_512_256
      installed 1s ago, rekeying in 3341s, expires in 3959s
      in  c4c33333,    148 bytes,     1 packets,     1s ago
      out c9b938be,    148 bytes,     1 packets,     1s 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, c90b693afb15fbe4_i e4ca9ac08d151faa_r*
    local  'moon.strongswan.org' @ 192.168.0.1[500]
    remote 'carol@strongswan.org' @ 192.168.0.100[500]
    TWOFISH_CBC-256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/MODP_4096
    established 0s ago, rekeying in 13432s
    net: #1, reqid 1, INSTALLED, TUNNEL, ESP:TWOFISH_CBC-256/HMAC_SHA2_512_256
      installed 0s ago, rekeying in 3282s, expires in 3960s
      in  c9b938be,    148 bytes,     1 packets,     0s ago
      out c4c33333,    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(twofish)。以下为carol主机上的执行结果:

 src 192.168.0.100 dst 192.168.0.1
         proto esp spi 0xc9b938be(3384359102) reqid 1(0x00000001) mode tunnel
         replay-window 0 seq 0x00000000 flag af-unspec (0x00100000)
         auth-trunc hmac(sha512) 0x651fcbd3c39d29b6ea4cc676e901b9a6b60cebdcedfa50211c4193963a3b2745cf635bdd1489df91238de2988997d    bb16c74c6ebde05f7d75da1a80e09bf3cda (512 bits) 256
         enc cbc(twofish) 0x0720bcc8fa03edd3633ef58f8afd10a765838f218c0f413acdf37f560654439b (256 bits)
         anti-replay context: seq 0x0, oseq 0x1, bitmap 0x00000000
         ...
 src 192.168.0.1 dst 192.168.0.100
         proto esp spi 0xc4c33333(3301126963) reqid 1(0x00000001) mode tunnel
         replay-window 32 seq 0x00000000 flag af-unspec (0x00100000)
         auth-trunc hmac(sha512) 0x748ce7e5d4e8ef88999ef29db06818d2105ba72c51ee9be2782f1e7becae94f53dfd17fb9569fbb1a013fa959d05b    8a0ef4a09261806ff42778c62c72f849c12 (512 bits) 256
         enc cbc(twofish) 0x8d8c84f4834075641802d405c385b4939179b53f38099a91765af663773b4b42 (256 bits)
         anti-replay context: seq 0x1, oseq 0x0, bitmap 0x00000001
      ...

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

  12:22:52.305714 IP carol.strongswan.org > moon.strongswan.org: ESP(spi=0xc9b938be,seq=0x1), length 216
  12:22:52.305810 IP carol.strongswan.org > alice.strongswan.org: ICMP echo request, id 6718, seq 1, length 128
  12:22:52.306275 IP moon.strongswan.org > carol.strongswan.org: ESP(spi=0xc4c33333,seq=0x1), length 216

收尾阶段

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

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

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

在这里插入图片描述

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值