6.5. 手动配置带有基于证书身份验证的 IPsec 主机到站点 VPN
主机到站点的 VPN 在单独的远程计算机和私有网络之间建立一个安全的、加密的连接,允许它们在不安全的公共网络(如互联网)间无缝链接。这对于需要从他们的计算机访问公司内部网络上的资源的远程员工很理想,就好像他们在办公室中一样。
对于身份验证,使用证书颁发机构(CA)管理的数字证书提供了一个高度安全且可扩展的解决方案。每个连接主机和网关都提供一个由可信 CA 签名的证书。这个方法提供强大的、可验证的身份验证,并简化了用户管理。可以在 CA 中集中授予或撤销访问权限,Libreswan 通过针对证书撤销列表(CRL)检查每个证书来强制实施这个访问权限,如果证书出现在列表中,则拒绝访问。
6.5.1. 手动设置 IPsec 网关 复制链接链接已复制到粘贴板!
您必须正确配置 Libreswan IPsec 网关,以启用安全远程访问。Libreswan 从网络安全服务(NSS)数据库读取服务器证书、私钥和 CA 证书。
以下示例允许经过身份验证的用户访问内部 192.0.2.0/24 子网,并将虚拟 IP 池中的 IP 地址动态分配给每个客户端。为保持安全性,网关会验证客户端证书是否由同一可信 CA 发布,并自动使用证书撤销列表(CRL)来确保对于任何撤销的证书,访问被拒绝。
先决条件
公共密钥加密标准 #12 (PKCS #12)文件
~/file.p12在带有以下内容的网关上存在:- 服务器的私钥
- 服务器证书
- CA 证书
- 中间证书(如果需要的话)
有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
服务器证书包含以下字段:
-
扩展的密钥用法(EKU)被设置为
TLS Web Server Authentication。 - 通用名称(CN)或主题备用名称(SAN)被设置为网关的完全限定域名(FQDN)。
- X509v3 CRL 分发点包含证书撤销列表(CRL)的 URL。
-
扩展的密钥用法(EKU)被设置为
- VPN 客户端流量的返回路由在内部网络上配置,指向 VPN 网关。
流程
如果 Libreswan 尚未安装:
安装
libreswan软件包:dnf install libreswan
# dnf install libreswanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnssCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令在
/var/lib/ipsec/nss/目录下创建数据库。启用并启动
ipsec服务:systemctl enable --now ipsec
# systemctl enable --now ipsecCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在防火墙中打开 IPsec 端口和协议:
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
将 PKCS #12 文件导入到 NSS 数据库中:
ipsec import ~/file.p12
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CACopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示服务器和 CA 证书的昵称:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您需要将此信息用于配置文件。
在
/etc/ipsec.d/目录中为连接创建一个.conf文件。例如,创建带有以下设置的/etc/ipsec.d/host-to-site.conf文件:添加
config setup部分,以启用 CRL 检查:config setup crl-strict=yes crlcheckinterval=1hconfig setup crl-strict=yes crlcheckinterval=1hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例中指定的设置包括:
crl-strict=yes- 启用 CRL 检查。如果 NSS 数据库中没有 CRL,则身份验证客户端将被拒绝。
crlcheckinterval=1h- 在指定的时间段后,从服务器证书中指定的 URL 重新获取 CRL。
为网关添加一部分:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例中指定的设置包括:
ikev2=insist- 将现代 IKEv2 协议定义为唯一允许的协议,而不回退到 IKEv1。
left=%defaultroute-
当
ipsec服务启动时,动态设置默认路由接口的 IP 地址。或者,您可以将left参数设置为 IP 地址或主机的 FQDN。 leftid=%fromcert和rightid=%fromcert- 将 Libreswan 配置为从证书的可分辨名称(DN)字段检索身份。
leftcert="<server_certificate_nickname>"- 设置 NSS 数据库中使用的服务器证书的昵称。
leftrsasigkey=%cert和rightrsasigkey=%cert- 将 Libreswan 配置为使用嵌入在证书中的 RSA 公钥。
leftsendcert=always- 指示网关始终发送证书,以便客户端可以针对 CA 证书验证它。
leftsubnet=<subnets>- 指定连接到客户端可以通过隧道访问的网关的子网。
mobike=yes- 使客户端能够在网络之间无缝漫游。
rightaddresspool=<ip_range>- 指定网关可以为客户端分配 IP 地址的范围。
modecfgclient=yes-
使客户端能够接收
modecfgdns参数中设置的 DNS 服务器 IP,以及modecfgdomains中设置的 DNS 搜索域。
有关示例中使用的所有参数的详情,请查看您系统上的
ipsec.conf (5)手册页。启用数据包转发:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
ipsec服务:systemctl restart ipsec
# systemctl restart ipsecCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您在配置文件中使用
auto=start,则连接会自动激活。使用其他方法时,需要执行额外的步骤来激活连接。详情请查看您系统上的ipsec.conf (5)手册页。
验证
- 配置一个客户端并连接到 VPN 网关。
检查服务是否已载入 CRL ,并将条目添加到 NSS 数据库中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤:
- 配置防火墙规则,以确保客户端只能与所需的资源进行通信。有关防火墙的详情,请参阅 配置防火墙和数据包过滤器。
6.5.2. 使用 GNOME Settings 将客户端配置为连接到 IPsec VPN 网关 复制链接链接已复制到粘贴板!
要访问远程私有网络上的资源,用户必须首先配置一个 IPsec VPN 连接。GNOME Settings 应用程序提供一个在 NetworkManager 中创建 IPsec VPN 连接配置文件并建立隧道的图形化解决方案。
先决条件
- 您已配置了 IPsec VPN 网关。
-
已安装
NetworkManager-libreswan-gnome软件包。 PKCS #12 文件
~/file.p12在客户端上存在,并包含以下内容:- 用户的私钥
- 用户证书
- CA 证书
- 中间证书(如果需要的话)
有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
-
证书中的扩展密钥用法(EKU)被设置为
TLS Web Client Authentication。
流程
初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnssCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令在
/var/lib/ipsec/nss/目录下创建数据库。将 PKCS #12 文件导入到 NSS 数据库中:
ipsec import ~/file.p12
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CACopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示用户和 CA 证书的昵称:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在配置文件中,您需要此信息。
- 按 Super 键,输入 Settings,然后按 Enter 键打开 GNOME Settings 应用程序。
- 点 VPN 条目旁边的 按钮。
- 从列表中选择 IPsec based VPN。
在 Identity 选项卡上,按如下所示填写字段:
Expand 表 6.1. Identity 选项卡设置 字段名称 值 相应的 ipsec.conf参数Name
<networkmanager_profile_name>N/A
Gateway
<ip_address_or_fqdn_of_the_gateway>rightType
IKEv2 (certificate)authbyGroup name
%fromcertleftidCertificate name
<user_certificate_nickname>leftcertRemote ID
%fromcertrightid- 单击 Advanced。
在 Advanced properties 窗口中,填写 Connectivity 选项卡的字段,如下所示:
Expand 表 6.2. Connectivity 选项卡设置 字段名称 值 相应的 ipsec.conf参数Remote Network
192.0.2.0/24rightsubnetNarrowing
Selected
narrowingEnable MOBIKE
yesmobikeDelay
30dpddelayTimeout(超时)
120dpdtimeout操作
清除dpdaction- 点 返回到连接设置。
- 点 保存连接。
- 在 Settings 应用程序的 Network 选项卡中,切换 VPN 配置文件旁边的开关来激活连接。
验证
- 建立到远程网络中主机的连接或 ping 它。
后续步骤
- 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能很容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用路由表,以防止连接绕过隧道。