6.6. 手动配置带有基于证书身份验证的 IPsec 网状 VPN
IPsec 网格创建一个完全互连的网络,其中每个服务器都可以与所有其他服务器安全并直接通信。这对于跨多个数据中心或云提供商的分布式数据库集群或高可用性环境很理想。在每对服务器之间建立一个直接和加密的隧道可确保安全通信,而没有中央瓶颈。
对于身份验证,使用证书颁发机构(CA)管理的数字证书提供了一个高度安全且可扩展的解决方案。网格中的每个主机都提供一个由可信 CA 签名的证书。这个方法提供强大的、可验证的身份验证,并简化了用户管理。可以在 CA 中集中授予或撤销访问权限,Libreswan 通过针对证书撤销列表(CRL)检查每个证书来强制实施这个访问权限,如果证书出现在列表中,则拒绝访问。
先决条件
网格中每个对等点上都存在一个公共密钥加密标准 #12 (PKCS #12)文件,其包含以下内容:
- 服务器的私钥
- 服务器证书
- CA 证书
- 中间证书(如果需要的话)
有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。
服务器证书包含以下字段:
-
扩展的密钥用法(EKU)被设置为
TLS Web Server Authentication。 - 通用名称(CN)或主题备用名称(SAN)被设置为主机的完全限定域名(FQDN)。
- X509v3 CRL 分发点包含证书撤销列表(CRL)的 URL。
-
扩展的密钥用法(EKU)被设置为
流程
如果 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/mesh.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 示例中指定的设置包括:
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/24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这些设置,
ipsec服务会加密这些子网中主机之间的流量。如果主机没有配置为 IPsec 网格的成员,则此主机和网格成员之间的通信会失败。重启
ipsec服务:systemctl restart ipsec
# systemctl restart ipsecCopy 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 statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果连接成功建立了,输出会包含对等点的以下行:
互联网密钥交换版本 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 连接分配给专用路由表,以防止连接绕过隧道。