在本教程中,LibreSwan将安装在Ubuntu平台上。 LibreSwan是IPsec协议的开源实现,它基于FreeSwan项目,可以在RedHat的Linux发行版上使用该软件包。 然而,项目的源代码中给出了详细的说明,以便在其他Linux平台上进行编译。 安装过程之后,将配置基于网关的IPsec VPN网关,以保护数据从发送方到接收方的对等体。
有关IPsec协议的详细信息,请参见我们上一篇文章 。 但是,关于LibreSwan的IPsec协议的两个部分的简要信息如下所述。
基于IPsec的VPN由Internet密钥交换协议和封装安全有效载荷 (ESP)协议组成。
- > IKE
正如名称所示,IKE协议的目的是认证(使用VPN的预共享密钥,公开密钥加密,自由连接)对等体来动态生成密钥并与VPN对等体共享密钥。 IPsec第二阶段的加密密钥也取决于IKE。 Libreswan使用项目的pluto程序实现IKE协议。
- > ESP
ESP协议是在Linux内核(NETEY / XFRM)IPsec中实现的对等体约定策略的实际规范。
Libreswan功能
- 支持基于预共享密钥的认证。
- 支持基于公钥的认证。
- 支持IKE v1 / v2版本的密钥交换。
- 支持NSS加密库。
- 还支持Xauth和DNSSec。
Ubuntu 16.04所需的软件包
需要在Ubuntu上安装以下软件包才能成功编译LibreSwan。 源代码中还提供了简要信息,当您安装LibreSwan时如何启用或禁用插件/功能和命令。
apt-get -y update
apt-get install libunbound-dev libevent-dev libsystemd-dev libnss3-dev libnspr4-dev pkg-config \ libpam0g-dev libcap-ng-dev libcap-ng-utils libselinux1-dev libcurl4-nss-dev flex bison gcc make libnss3-tools
所需软件包的安装如下所示。
使用wget命令下载IPsec工具的最新源代码,并使用以下tar命令进行解压缩。
wget https://download.libreswan.org/libreswan-3.20.tar.gz
tar -xzf libreswan-3.20.tar.gz
cd libreswan-3.20
没有必要运行configure命令,只需运行make命令即可 这将显示如下所示的两种构建LibreSwan的方法。
最后,运行make all命令在平台上构建LibreSwan。
make all
现在运行make install命令安装IPsec程序。
启动IPsec服务
如上图所示,需要使用以下命令在Ubuntu平台上启用IPSec服务。
systemctl enable ipsec.service
在启动IPsec服务之前需要初始化NSS加密库。 它由LibreSwan用于IPsec VPN中的加密算法使用。
IPsec initnss
最后,使用以下命令启动IPSec服务。
ipsec setup start
运行ipsec status命令查看Ubuntu平台上LibreSwan的设置。
ipsec status
LibreSwan配置
在本教程中,将使用预共享密钥和RSA密钥(公共/私有密钥对)在对等体之间建立IPsec VPN。 两个对等体的配置(左/右)如下。
基于预共享密钥的VPN
ipsec.conf (configuration file of left VM) ipsec.secrets (configuration file of left VM)
版本2 192.168.15.145 192.168.15.245:PSK“vpn_psk123”
配置设置
protostack = netkey
conn vpn_psk
ike = aes256-sha256; modp4096
phase2alg = aes256-sha256; modp4096
左= 192.168.15.145
leftsubnet = 172.16.10.0 / 24
right = 192.168.15.245
rightsubnet = 192.169.50.0 / 24
authby =秘密
type = tunnel
自动=开始
ipsec.conf (configuration file of right VM) ipsec.secrets (configuration file of right VM)
版本2 192.168.15.245 192.168.15.145:PSK“vpn_psk123”
配置设置
protostack = netkey
conn vpn_psk
ike = aes256-sha256; modp4096
phase2alg = aes256-sha256; modp4096
左= 192.168.15.245
leftsubnet = 192.169.50.0 / 24
right = 192.168.15.145
rightsubnet = 172.16.10.0 / 24
authby =秘密
type = tunnel
自动=开始
在ipsec.conf和ipsec.secrets文件中设置上述配置后,双方运行以下命令启动IPSec协商过程。
ipsec restart
预共享密钥VPN的状态
ipsec状态和setkey -D命令的输出如下所示。
ipsec status
setkey -D
基于RSA(公共/私有)密钥的VPN
需要为两台机器生成RSA密钥,并将它们包含在配置文件中。 本教程中显示了RSA密钥的简化版本。 还要确保包含的公钥应该是单行的。
生成RSA密钥
如下图所示,以下命令用于生成两个对等体的密钥。
ipsec newhostkey --output /etc/ipsec.secrets
生成的公钥将添加到ipsec.secrets文件中,如下所示。
类似地,使用与以下快照中所示的右侧机器相同的命令生成RSA密钥。
如上所示,密钥生成命令自动在两台对等机器上包含/etc/ipsec.secrets中的RSA公钥。 RSA的私钥存储在NSS的数据库/etc/ipsec.d/*.db文件下。
生成RSA密钥后,下一步将更改ipsec.conf文件中两台机器的配置。
ipsec.conf (configuration file of left VM)
版本2
配置设置
protostack = netkey
conn vpn_rsa
ike = aes256-sha256; modp4096
phase2alg = aes256-sha256; modp4096
左= 192.168.15.145
leftsubnet = 172.16.10.0 / 24
right = 192.168.15.245
rightsubnet = 192.169.50.0 / 24
authby = rsasig
leftrsasigkey = 0sAQPgMUjAb8QOQaJ1FTkIQf3f [........] ALQNXUf $
rightrsasigkey = 0sAQOs7aPh6LppUGgC454 + W [........] fSd2zQE
type = tunnel
自动=开始
ipsec.conf (configuration file of right VM)
版本2
配置设置
protostack = netkey
conn vpn_rsa
ike = aes256-sha256; modp4096
phase2alg = aes256-sha256; modp4096
左= 192.168.15.245
leftsubnet = 192.169.50.0 / 24
right = 192.168.15.145
rightsubnet = 172.16.10.0 / 24
authby = rsasig
rightrsasigkey = 0sAQPgMUjAb8QOQaJ1FTkIQf3f [........] ALQNXUf $
leftrsasigkey = 0sAQOs7aPh6LppUGgC454 + W [........] fSd2zQE
type = tunnel
自动=开始
更改LibreSwan配置文件后,下一步是使用以下命令在两台机器上重新启动IPsec服务。
ipsec restart
左侧设备上的IPsec VPN状态如下图所示。 说明RSASIG用于认证IPsec隧道对等体的策略。
本教程的目的是探索提供IPsec协议实现的“LibreSwan”。 它在RedHat发行版中可用,但是可以轻松地为另一个平台(如Ubuntu / Debian)进行编译。 在本文中,第一个LibreSwan工具是从源代码构建的,然后使用在网关设备之间的预共享和RSA密钥配置两个VPN。