基于Libreswan的Ipsec VPN在Ubuntu上使用预共享和RSA密钥

在本教程中,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。

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

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

支付宝扫一扫打赏

微信扫一扫打赏