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)来确保拒绝任何撤销证书的访问。
先决条件
公共密钥加密标准(PKCSautomationhub)文件
~/file.p12
在带有以下内容的网关中存在:- 服务器的私钥
- 服务器证书
- CA 证书
- 如果需要,则中间证书
有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
服务器证书包含以下字段:
-
扩展的密钥使用(EKU)设置为
TLS Web 服务器身份验证
。 - 通用名称(CN)或主题备用名称(SAN)被设置为网关的完全限定域名(FQDN)。
- X509v3 CRL 发行版点包含证书撤销列表(CRL)的 URL。
-
扩展的密钥使用(EKU)设置为
- VPN 客户端流量的返回路由在内部网络上配置,指向 VPN 网关。
流程
如果 Libreswan 尚未安装:
安装
libreswan
软件包:dnf install libreswan
# dnf install libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令在
/var/lib/ipsec/nss/
目录中创建数据库。启用并启动
ipsec
服务:systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy 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 --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将 PKCSautomationhub 文件导入到 NSS 数据库中:
ipsec import ~/file.p12
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CA
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示服务器和 CA 证书的 nicknames:
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=1h
config setup crl-strict=yes crlcheckinterval=1h
Copy 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
andrightrsasigkey=%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.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
ipsec
服务:systemctl restart ipsec
# systemctl restart ipsec
Copy 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 设置将客户端配置为连接到 IPsec VPN 网关 复制链接链接已复制到粘贴板!
要访问远程私有网络上的资源,用户必须首先配置 IPsec VPN 连接。GNOME Settings 应用程序提供了一个图形化的解决方案,来在 NetworkManager 中创建 IPsec VPN 连接配置文件并建立隧道。
先决条件
- 您已配置了 IPsec VPN 网关。
-
已安装
NetworkManager-libreswan-gnome
软件包。 PKCSeffort 文件
~/file.p12
存在于客户端上,其中包含以下内容:- 用户的私钥
- 用户证书
- CA 证书
- 如果需要,则中间证书
有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
-
证书中的扩展密钥用法(EKU)被设置为
TLS Web 客户端身份验证
。
流程
初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令在
/var/lib/ipsec/nss/
目录中创建数据库。将 PKCSautomationhub 文件导入到 NSS 数据库中:
ipsec import ~/file.p12
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CA
Copy 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 的 VPN。
在 Identity 选项卡中,按如下所示填写字段:
Expand 表 6.1. 身份选项卡 设置 字段名称 value Corresponding ipsec.conf
parameterName
<networkmanager_profile_name>
N/A
网关
<ip_address_or_fqdn_of_the_gateway>
right
Type
IKEv2 (certificate)
authby
组名称
%fromcert
leftid
证书名称
<user_certificate_nickname>
leftcert
远程 ID
%fromcert
rightid
- 单击 Advanced。
在 Advanced properties 窗口中,填写 connections 选项卡的字段,如下所示:
Expand 表 6.2. 连接 选项卡设置 字段名称 value Corresponding ipsec.conf
parameter远程网络
192.0.2.0/24
rightsubnet
缩小
已选择
缩小
启用 MOBIKE
是
MOBIKE
delay
30
dpddelay
Timeout(超时)
120
dpdtimeout
操作
清除
dpdaction
- 点 返回连接设置。
- 点 保存连接。
- 在 Settings 应用程序的 Network 选项卡中,切换 VPN 配置集旁的开关来激活连接。
验证
- 建立与远程网络中主机的连接或 ping 它。
后续步骤
- 如果您在具有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道。