Red Hat Training

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

4.6.8. 使用 X.509 配置 IKEv1 远程访问 VPN Libreswan 和 XAUTH

Libreswan 提供了一种方法,用于原生分配 IP 地址和 DNS 信息,以便在使用 XAUTH IPsec 扩展建立连接时轮转 VPN 客户端。可以使用 PSK 或 X.509 证书部署扩展身份验证(XAUTH)。使用 X.509 部署更为安全.客户端证书可通过证书撤销列表或在线证书状态协议 (OCSP)撤销。使用 X.509 证书时,单个客户端无法模拟服务器。使用 PSK(也称为组密码),理论上可以这样做。
XAUTH 要求 VPN 客户端额外使用用户名和密码来标识自身。对于一次性密码(OTP),如 Google Authenticator 或 RSA SecureID 令牌,一次性令牌附加到用户密码中。
XAUTH 有三个可能后端:
xauthby=pam
这使用 /etc/pam.d/pluto 中的配置来验证用户。可插拔验证模块(PAM)可以配置为自行使用各种后端。它可以使用系统帐户用户密码方案、LDAP 目录、RADIUS 服务器或自定义密码身份验证模块。如需更多信息,请参阅使用可插拔验证模块(PAM) 章节。
xauthby=file
这使用 /etc/ipsec.d/passwd 配置文件(它不应该与 /etc/ipsec.d/nsspassword 文件混淆)。该文件的格式与 Apache .htpasswd 文件类似,并且 Apache htpasswd 命令可用于在该文件中创建条目。但是,在用户名和密码后,使用的 IPsec 连接的连接名称需要第三列,例如使用 conn 远程用户提供 VPN 删除用户时,密码文件条目应如下所示:
user1:$apr1$MIwQ3DHb$1I69LzTnZhnCT2DPQmAOK.:remoteusers
注意
使用 htpasswd 命令时,必须在每行的 user:password 部分后手动添加连接名称。
xauthby=alwaysok
服务器始终预设 XAUTH 用户和密码组合正确。客户端仍然必须指定用户名和密码,尽管服务器忽略了这些用户名和密码。只有在用户已经由 X.509 证书标识时才使用,或者在测试 VPN 时不需要 XAUTH 后端。
带有 X.509 证书的服务器配置示例:
conn xauth-rsa
    ikev2=never
    auto=add
    authby=rsasig
    pfs=no
    rekey=no
    left=ServerIP
    leftcert=vpn.example.com
    #leftid=%fromcert
    leftid=vpn.example.com
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    rightaddresspool=10.234.123.2-10.234.123.254
    right=%any
    rightrsasigkey=%cert
    modecfgdns="1.2.3.4,8.8.8.8"
    modecfgdomains=example.com
    modecfgbanner="Authorized access is allowed"
    leftxauthserver=yes
    rightxauthclient=yes
    leftmodecfgserver=yes
    rightmodecfgclient=yes
    modecfgpull=yes
    xauthby=pam
    dpddelay=30
    dpdtimeout=120
    dpdaction=clear
    ike_frag=yes
    # for walled-garden on xauth failure
    # xauthfail=soft
    # leftupdown=/custom/_updown
xauthfail 设置为软(而不是硬)时,身份验证失败将被忽略,并且 VPN 的设置就像用户正确验证一样。可以使用自定义的 updown 脚本来检查环境变量 XAUTH_FAILED。然后,可以使用 iptables DNAT 将此类用户重定向到围栏地带,他们可以联系管理员或续订付费服务订阅
VPN 客户端使用 modecfgdomain 值和 DNS 条目将指定域的查询重定向到这些指定的名称服务器。这允许轮转用户使用内部 DNS 名称访问内部资源。请注意,虽然 IKEv2 支持使用 modecfgdomains 和 modecfgdns 的域名和名称服务器 IP 地址的逗号分隔列表,但 IKEv1 协议只支持一个域名,libreswan 仅支持最多两个名称服务器 IP 地址。要选择向 VPN cliens 发送横幅文本,请使用 modecfgbanner 选项。
如果左侧子网不是 0.0.0.0/0,则拆分隧道配置请求将自动发送到客户端。例如,在使用 leftsubnet=10.0.0.0/8 时,VPN 客户端只会通过 VPN 为 10.0.0.0/8 发送流量。
在客户端上,用户必须输入用户密码,该密码取决于使用的后端。例如:
xauthby=file
管理员生成密码并将其存储在 /etc/ipsec.d/passwd 文件中。
xauthby=pam
密码在 /etc/pam.d/pluto 文件中的 PAM 配置中指定的位置获取。
xauthby=alwaysok
未检查密码,并且始终接受该密码。使用这个选项进行测试,或者确保仅供 xauth 客户端兼容。

其它资源

有关 XAUTH 的更多信息,请参阅 ISAKMP/Oakley(XAUTH)Internet-Draft 文档中的扩展身份验证