6.6. 使用基于证书的身份验证手动配置 IPsec 网格 VPN
IPsec 网格会创建一个完全互连的网络,每个服务器都可以与所有其他服务器安全通信。这是涵盖多个数据中心或云供应商的分布式数据库集群或高可用性环境的理想选择。在每对服务器之间建立直接的加密隧道可确保安全通信,而无需中央瓶颈。
为进行身份验证,使用由证书颁发机构(CA)管理的数字证书,可提供高度安全、可扩展的解决方案。网格中的每个主机都提供由可信 CA 签名的证书。这个方法提供强大的、可靠的身份验证,并简化了用户管理。可以在 CA 中集中授予或撤销访问权限,Libreswan 通过针对证书撤销列表(CRL)检查每个证书来强制实施这个访问权限,如果证书出现在列表中,则拒绝访问。
先决条件
网格中的每个对等点都存在一个公共密钥加密标准(PKCS UDS)文件,其中包含以下内容:
- 服务器的私钥
- 服务器证书
- CA 证书
- 如果需要,则中间证书
有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
服务器证书包含以下字段:
-
扩展的密钥使用(EKU)设置为
TLS Web 服务器身份验证
。 - 通用名称(CN)或主题备用名称(SAN)被设置为主机的完全限定域名(FQDN)。
- X509v3 CRL 发行版点包含证书撤销列表(CRL)的 URL。
-
扩展的密钥使用(EKU)设置为
流程
如果 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/mesh.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 示例中指定的设置包括:
left=%defaultroute
-
当
ipsec
服务启动时,动态设置默认路由接口的 IP 地址。或者,您可以将left
参数设置为 IP 地址或主机的 FQDN。 leftid=%fromcert
和rightid=%fromcert
- 将 Libreswan 配置为从证书的可分辨名称(DN)字段检索身份。
leftcert="<server_certificate_nickname>"
- 设置 NSS 数据库中使用的服务器证书的别名。
leftrsasigkey=%cert
- 将 Libreswan 配置为使用嵌入在证书中的 RSA 公钥。
leftsendcert=always
- 指示对等点始终发送证书,以便对等点可以针对 CA 证书进行验证。
failureshunt=drop
- 如果 IPsec 协商失败,强制实施加密并丢弃流量。对于安全网格来说,这至关重要。
right=%opportunisticgroup
- 指定连接应应用到策略文件中定义的动态远程对等点组。这可让 Libreswan 对该组中每个列出的 IP 或子网实例化 IPsec 隧道。
有关示例中使用的所有参数的详情,请查看系统中的
ipsec.conf (5)
手册页。创建
/etc/ipsec.d/policies/server-mesh
策略文件,该文件以无类别域间路由(CIDR)格式指定对等或子网:192.0.2.0/24 198.51.100.0/24
192.0.2.0/24 198.51.100.0/24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这些设置,
ipsec
服务会加密这些子网中主机之间的流量。如果主机没有配置为 IPsec 网格的成员,则此主机和网格成员之间的通信会失败。重启
ipsec
服务:systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 对您在策略文件中指定的子网中的每个主机上重复这个过程。
验证
将流量发送到网格中的主机以建立隧道。例如,ping 主机:
ping -c3 <peer_in_mesh>
# ping -c3 <peer_in_mesh>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 IPsec 状态:
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果成功建立连接,输出包含 peer 的以下行:
互联网密钥交换版本 2 (IKEv2)协商的阶段 1 成功完成:
#1: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 12822s; REPLACE in 13875s; newest; idle;
#1: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 12822s; REPLACE in 13875s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安全关联(SA)现在可以协商实际数据加密隧道,称为子 SA 或阶段 2 SA。
已建立了子 SA:
#2: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 13071s; REPLACE in 13875s; newest; eroute owner; IKE SA #1; idle;
#2: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 13071s; REPLACE in 13875s; newest; eroute owner; IKE SA #1; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这是您的数据流量通过的实际隧道。
检查服务是否载入 CRL 并将条目添加到 NSS 数据库中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
- 如果您在具有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道。