基于StrongSwan的IPsec VPN在Ubuntu 16.04上使用证书和预共享密钥

介绍

在本文中,我们的重点是IPsec协议的开源实现。 通过使用由以下两个组件组成的IPsec协议来确保网络层的安全性。

  • 认证头(AH)
  • 封装安全有效载荷(ESP)

通过使用AH来确保数据包完整性和身份验证,ESP组件提供机密性和安全性功能。 IPsec, StrongSwan (强安全WAN)的开源实现是一个着名的工具,支持互联网密钥交换(IKE v1 / 2)/的两个版本。 密钥共享或互联网密钥交换是IPSec VPN(虚拟专用网)的一部分。 IKE机制用于共享双方之间的密钥以加密ESP协议中的数据。 在IKE步骤中使用OpenSSL和加密库的加密和完整性算法(如AES,SHA等)。 然而,安全算法的Linux内核实现在IPSec(ESP&AH)的主要部分被使用。 Strongswan。

Strongswan特色

  • 支持基于预共享密钥的认证。
  • 支持X.509格式的证书进行身份验证。
  • 一个支持IKE v1 / v2的守护进程。
  • 第三方插件和库可以轻松集成。
  • 使用openSC项目支持硬件令牌。

网关到网关和Road warrior VPN由强壮支持。 网络流量在站点到站点vpn中的组织的网关设备处​​被加密或解密。 然而,从网关设备建立到终端用户/客户机的第二安全通道。

在本文中,strongSwan工具将安装在Ubuntu 16.04(LTS)上,我将展示OpenSC用于硬件令牌的集成 ,最后创建一个使用预共享密钥和x.509证书的网关到网关隧道。 硬件令牌或硬件安全模块(HSM)(如USB和智能卡)可与strongswan一起使用,以存储加密密钥(公共和私有)和证书。 strongswan中的硬件令牌支持使用OpenSC(一组工具和库)(一个开源项目)来提供。 使用PKCS#11 API的PKCS#15文件结构和智能卡访问也由OpenSC工具提供。 openSC支持以下智能卡。

  • WestCOS
  • SetCOS
  • CardOs
  • STARCOS
  • ASEPCOS

Strongswan安装(二进制和源代码)

在几乎所有广泛使用的Linux发行版中都提供了strongswan的二进制包(deb / rpm)。 本文将全面介绍使用二进制和源代码(具有所需功能)安装strongswan。

可以通过在Ubuntu 16.04 LTS上使用以下命令来安装strongswan的二进制包。

aptitude install strongswan

Ubuntu存储库中可用的strongswan插件如下所示。

在Ubuntu平台上安装后,配置文件和文件夹(ipsec.conf,ipsec.secrets,ipsec.d,strongswan.conf,strongswan.d)存储在/ etc目录中。

Strongswan编译使用源码

  • Opensc(为强力支持HSM)。
  • PC / SC(在Ubuntu平台上需要智能卡阅读器支持)。
  • GMP库(强力数学运算所需)。
  • OpenSSL工具(AES,SHA1等加密算法的众所周知的实现)。
  • PKCS(公钥加密标准)1,7,8,11,12。

在本文中,PCSC-Lite工具将沿着Ubuntu平台上的opensc安装,以增加对智能卡读卡器的支持。 PCSC-Lite推荐给CCID读卡器。

在开始编译strongswan之前,运行以下命令来安装必备软件。

Opensc安装

aptitude install opensc

2. GMP库安装

aptitude install libgmp10

安装GMP的开发库。

aptitude install libgmp-dev

使用以下命令安装OpenSSL libcrypto。

apt-get install libssl-dev

汇编步骤

转到/ usr / src /文件夹,并使用wget命令下载最新版本的strongswan。

cd /usr/src
wget https://download.strongswan.org/strongswan-5.5.0.tar.gz

提取压缩文件,并在提取的文件夹内运行configure脚本。

tar –xzf strongswan-5.5.0.tar.gz
cd strongswan-5.5.0

运行configure脚本来检查strongswan的依赖关系。 HSM支持已经在最新版本的强壮网中启用,如下所示。

运行configure脚本,使用前缀/ usr / local并启用openssl支持。

./configure --prefix=/usr/local  --enable-openssl

以下快照显示,配置脚本没有生成错误,因为系统上已经安装了所有必需的依赖项。

运行以下两个命令在/ usr / local目录下编译并安装strongswan。

make

make install

在Ubuntu平台上编译和安装strongswan是完整的,在/ usr / local / etc路径下复制了几个配置文件( strongswan.conf,ipsec.conf和ipsec.secrets )和文件夹( strongswan.d,ipsec.d ) 。 VPN策略的配置放在ipsec.conf文件中,机密秘密存储在ipsec.secrets文件中。 Strongswan插件配置存储在strongswan.d目录中。

运输和隧道VPN都是强力支持的。 在隧道模式下,提供了通道的站点到站点安全性,并与其他供应商(如cisco,huawei和juniper设备)配合使用。

站点到站点VPN

下图显示了一个基于强网的VPN网关设备在网络中的布局。 本组织的192.168.223.0/24和192.168.222.0/24专用网络之间将建立一个安全的通信渠道。

在A和B私有网络之间使用IPsec之前,请确保VPN网关之间的路由 的组织工作,使A侧的VPN网关可以ping远程端VPN机器( B ),确保网络连接正常。

如下所示,strongswan工具的默认配置位于/ usr / local / etc /目录中。

基于预共享密钥的隧道

在第一种情况下,将在网关设备之间创建基于共享密钥的VPN。 Strongswan使用众所周知的密钥共享算法Diffie-Hellman进行相互认证。 有关IPsec协议工作原理的详细信息,请参见以下链接。

http://www.unixwiz.net/techtips/iguide-ipsec.html

VPN的配置:

A侧

strongswan VPN策略的主要配置在ipsec.conf文件中。 在此配置文件中可以找到如下所示的信息。

  • IKE版本
  • 隧道类型
  • 源和目的网关
  • 私有VPN网络

A侧的 ipsec.conf如下。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

ipsec.secrets文件中存储IPsec秘密(共享密钥,私钥的密码,解锁hsm的引脚)。 如下图所示,两个VPN方之间的分片秘密是“test12345”

192.168.1.101 192.168.1.102 : PSK 'test12345'

(B侧)

远程端的ipsec.conf和ipsec.secrets文件中的配置将与本地站点相反,如下所示。

ipsec.conf文件的内容如下。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

ipsec.secrets文件包含远程端的共享密钥。

192.168.1.102 192.168.1.101 : PSK 'test12345'

在您设置两端的配置文件之后,使用以下命令启动strongswan守护进程( charon )。

ipsec restart

以下命令显示设备上创建的VPN的状态。

ipsec statusall

隧道两侧(本地和远程)的状态如下所示。

此Linux命令显示IPsec隧道的策略和状态。

ip xfrm state
ip xfrm policy

如上面的命令输出所示,敏感信息esp / hmac(keys)也由ip xfrm命令显示。

X.509基于证书的隧道

在基于X.509证书(公钥认证)的隧道中,需要为认证机构(CA),客户端A和B生成证书。

以下截图显示使用strongswan的PKI实用程序生成自签名CA证书。

访问/usr/local/etc/ipsec.d路径并运行以下命令。

cd /usr/local/etc/ipsec.d
ipsec pki --gen --type rsa --size 4096 --outform pem > private/strongswanKey.pem
ipsec pki --self --ca --lifetime 3650 --in private/strongswanKey.pem --type rsa --dn "C=CH, O=strongSwan, CN=Root CA" --outform pem > cacerts/strongswanCert.pem    

生成客户端A的证书如下所示。

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client1Key.pem
chmod 600 private/client1Key.pem
ipsec pki --pub --in private/client1Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device1" --san device1 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client1Cert.pem

为客户端生成的公钥/私钥对和证书。

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client2Key.pem
chmod 600 private/client2Key.pem
ipsec pki --pub --in private/client2Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device2" --san device2 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client2Cert.pem

成功生成CA和客户端证书后,下一步是更改ipsec.conf和ipsec.secrets配置。 有关ipsec.conf和secrets文件更改的详细信息,请参阅strongswan文档。

A侧的ipsec.conf和ipsec.secrets的内容如下。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client1Cert.pem
        leftid="C=CH, O=strongSwan, CN=device1"
        rightid="C=CH, O=strongSwan, CN=device2"

#192.168.1.101 192.168.1.102 : PSK 'test12345'
: RSA client1Key.pem

B侧的配置也在下面给出。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client2Cert.pem
        leftid="C=CH, O=strongSwan, CN=device2"
        rightid="C=CH, O=strongSwan, CN=device1"


#192.168.1.102 192.168.1.101 : PSK 'test12345'
: RSA client2Key.pem

运行ipsec restart命令应用上述更改,并检查使用证书创建的隧道的状态。

ipsec statusall    # at side A

ipsec statusall    # at side B

最后,使用strongswan工具成功创建了基于证书的VPN。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏