Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.6. 使用 Libreswan 保护虚拟网络(VPN)

在 Red Hat Enterprise Linux 7 中,可以使用 Libreswan 应用程序支持的 IPsec 协议来配置虚拟专用网络( VPN)。LibreswanOpenswan 应用的延续,Openswan 文档中的许多示例可与 Libreswan 互换。NetworkManager IPsec 插件称为 NetworkManager-libreswan。GNOME Shell 用户应安装 NetworkManager-libreswan-gnome 软件包,该软件包的依赖项为 NetworkManager-libreswan。请注意,NetworkManager-libreswan-gnome 软件包只在可选频道中可用。请参阅启用补充和可选存储库
VPN 的 IPsec 协议本身使用 Internet 密钥交换 (IKE)协议进行配置。术语 IPsec 和 IKE 可互换使用。IPsec VPN 也称为 IKE VPN、IKEv2 VPN、XAUTH VPN、Cisco VPN 或 IKE/IPsec VPN。使用级别 2 隧道协议 (L2TP)的 IPsec VPN 变体通常称为 L2TP/IPsec VPN,这需要可选通道 xl2tpd 应用程序。
Libreswan 是在红帽企业 Linux 7 中提供的开源用户空间IKE 实施。IKE 版本 1 和 2 作为用户级后台程序实施。IKE 协议本身也加密。IPsec 协议由 Linux 内核实施,Libreswan 配置内核以添加和删除 VPN 隧道配置。
TheIKE 协议使用 UDP 端口 500 和 4500。IPsec 协议由两个不同的协议组成:封装的安全负载(ESP ),其协议号为 50,经过身份验证的标头(AH)是协议号 51。不建议使用 AH 协议。建议 AH 用户迁移到使用 null 加密的ESP
IPsec 协议具有两种不同的操作模式:Tunnel 模式 (默认)和传输模式。可以使用没有 IKE 的 IPsec 配置内核。这称为手动密钥。可以使用 ip xfrm 命令配置手动密钥,但为了安全起见,强烈建议您这样做。Libreswan 使用 netlink 与 Linux 内核接口.在 Linux 内核中进行数据包加密和解密。
libreswan 使用网络安全服务( NSS)加密库。libreswan 和 NSS 均经过认证,可与联邦信息处理标准 (FIPS)出版物 140-2 一起使用。
重要
Libreswan 和 Linux 内核实施的 IKE/IPsec VPN 是 Red Hat Enterprise Linux 7 中唯一推荐使用的 VPN 技术。在不了解这样做风险的情况下不要使用任何其他 VPN 技术。

4.6.1. 安装 Libreswan

要安装 Libreswan,以 root 用户身份输入以下命令:
~]# yum install libreswan
检查是否安装了 Libreswan
~]$ yum info libreswan
在新安装 Libreswan 后,应在安装过程中初始化 NSS 数据库。在启动新数据库前,请按如下所示删除旧数据库:
~]# systemctl stop ipsec
~]# rm /etc/ipsec.d/*db
然后,要初始化一个新的 NSS 数据库,以 root 用户身份输入以下命令:
~]# ipsec initnss
Initializing NSS database
只有在 FIPS 模式下操作时,才需要使用密码保护 NSS 数据库。要为 FIPS 模式初始化数据库,而不是上一个命令,请使用:
~]# certutil -N -d sql:/etc/ipsec.d
Enter a password which will be used to encrypt your keys.
The password should be at least 8 characters long,
and should contain at least one non-alphabetic character.

Enter new password:
Re-enter password:
要启动 Libreswan 提供的 ipsec 守护进程,以 root 用户身份运行以下命令:
~]# systemctl start ipsec
确认守护进程现在正在运行:
~]$ systemctl status ipsec
* ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec
   Loaded: loaded (/usr/lib/systemd/system/ipsec.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2018-03-18 18:44:43 EDT; 3s ago
     Docs: man:ipsec(8)
           man:pluto(8)
           man:ipsec.conf(5)
  Process: 20358 ExecStopPost=/usr/sbin/ipsec --stopnflog (code=exited, status=0/SUCCESS)
  Process: 20355 ExecStopPost=/sbin/ip xfrm state flush (code=exited, status=0/SUCCESS)
  Process: 20352 ExecStopPost=/sbin/ip xfrm policy flush (code=exited, status=0/SUCCESS)
  Process: 20347 ExecStop=/usr/libexec/ipsec/whack --shutdown (code=exited, status=0/SUCCESS)
  Process: 20634 ExecStartPre=/usr/sbin/ipsec --checknflog (code=exited, status=0/SUCCESS)
  Process: 20631 ExecStartPre=/usr/sbin/ipsec --checknss (code=exited, status=0/SUCCESS)
  Process: 20369 ExecStartPre=/usr/libexec/ipsec/_stackmanager start (code=exited, status=0/SUCCESS)
  Process: 20366 ExecStartPre=/usr/libexec/ipsec/addconn --config /etc/ipsec.conf --checkconfig (code=exited, status=0/SUCCESS)
 Main PID: 20646 (pluto)
   Status: "Startup completed."
   CGroup: /system.slice/ipsec.service
           └─20646 /usr/libexec/ipsec/pluto --leak-detective --config /etc/ipsec.conf --nofork
要确保 Libreswan 在系统启动时启动,以 root 用户身份运行以下命令:
~]# systemctl enable ipsec
配置所有中间和基于主机的防火墙以允许 ipsec 服务。有关防火墙和允许特定服务通过的信息,请查看 第 5 章 使用防火墙libreswan 需要防火墙以允许以下数据包:
  • UDP 端口 500 和 4500 用于 Internet 密钥交换 (IKE)协议
  • 封装安全负载(ESP ) IPsec 数据包的协议 50
  • 用于经过身份验证的标头(AH) IPsec 数据包(uncommon)的 51 协议.
我们给出了使用 Libreswan 设置 IPsec VPN 的三个示例。第一个示例是将两个主机连接在一起,以便它们能够安全地进行通信。第二个示例是将两个站点连接在一起,组成一个网络。第三个示例是支持远程用户,称为这种情况下的路战