介绍
在本文中,我们的重点是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。