通过AD认证实现客户端与VPC建立SSL-VPN连接

SSL-VPN的双因子认证功能要求客户端在通过SSL客户端证书认证的基础上,还要通过应用身份服务IDaaS(Identity as a Service)用户名和密码的认证,双重认证均通过后才能成功建立SSL-VPN连接,该功能有效提高了SSL-VPN连接的安全性。在使用IDaaS认证时,支持绑定AD(Active Directory)服务器,实现AD认证登录。本文将介绍如何使用SSL-VPN双因子认证功能,使客户端可以在经过AD认证后与专有网络VPC(Virtual Private Cloud)实例建立SSL-VPN连接,进而访问VPC实例下的资源。

场景示例

image

本文以上图场景为例。某公司在华东1(杭州)地域拥有一个VPC实例,VPC实例下使用云服务器 ECS(Elastic Compute Service)产品部署了相关应用。因业务发展,出差员工需要使用客户端远程访问VPC实例下的资源。该公司拥有自己的AD(Active Directory)系统,为确保安全性,公司希望出差的员工可以在通过公司AD服务器的身份认证后,再访问VPC实例下的资源。

公司可以使用VPN网关产品的SSL-VPN功能,同时为SSL-VPN开启双因子认证,并设置IDaaS应用进行AD认证。在员工要与云上建立SSL-VPN连接时,将会先经过SSL客户端证书的认证,然后还会通过IDaaS EIAM实例进行AD认证,IDaaS EIAM实例会将员工的用户名和密码发送到公司的AD服务器中去进行验证,并返回验证结果。只有在员工输入的账户信息验证通过后,员工才能与云上建立SSL-VPN连接,进而访问VPC实例下的资源。

准备工作

  • 您已经在阿里云华东1(杭州)地域创建了VPC实例,VPC实例中使用ECS部署了相关应用。具体操作,请参见搭建IPv4专有网络

    请确保您已经了解VPC中ECS实例所应用的安全组规则,并确保安全组规则允许客户端访问云上资源。具体操作,请参见查询安全组规则添加安全组规则

  • 请确保客户端可以访问互联网,客户端的私网网段与VPC实例的私网网段没有重叠。

  • 您已创建企业版的IDaaS EIAM实例。具体操作,请参见实例管理

    重要
  • 您已知AD服务器的公网IP地址和服务端口。

    本文示例中,AD系统部署在Windows Server 2022系统中,其公网IP地址为47.XX.XX.62,服务端口为389

  • 您已知AD服务器的Base DN。

    本文示例中,AD服务器的Base DN为dc=zxtest,dc=com

  • 您已知AD服务器管理员的DN、用户名和密码。

    本文示例中,管理员账户名为Administrator,密码为1****2。其DN为cn=Administrator,cn=Users,dc=zxtest,dc=com,如下图所示。管理员DN

配置步骤

image

步骤一:绑定AD服务器

为IDaaS EIAM实例绑定AD服务器,将AD服务器中的账户信息同步至IDaaS EIAM实例中。具体操作,请参见步骤二、AD数据同步到IDaaS

本文在绑定AD服务器时,除必填参数外,其余配置均保持默认值。下图为本文通过绑定AD服务器同步至IDaaS EIAM实例的账户信息。

2024-05-10_17-09-24

步骤二:添加阿里云SSL-VPN应用

  1. 登录IDaaS管理控制台

  2. EIAM 云身份服务页面,找到在准备工作中创建的EIAM实例,然后在操作列单击访问控制台

  3. 在EIAM实例的左侧导航栏,选择应用。在应用页面,单击添加应用

  4. 添加应用页面,找到阿里云 - SSL VPN模板,然后单击添加应用

  5. 在添加应用对话框中,自定义应用的名称,然后单击立即添加

  6. 在应用详情页面的登录访问页签,根据以下信息进行配置,然后单击页签底部的保存

    单点登录配置保持开启状态。

    授权模式:默认为密码模式身份提供方选择已绑定的AD服务器,系统将会使用AD服务器对员工身份进行认证。

    授权范围:使用默认值手动授权。该方式下,您需要手动为指定账户授权,允许这些账户访问该应用。关于授权范围的更多说明,请参见授权范围

  7. 保持在登录访问页签,然后单击应用授权页签。

    为要建立SSL-VPN连接的员工账户添加授权。具体操作,请参见应用授权2024-05-10_17-06-10

步骤三:创建VPN网关实例

  1. 登录VPN网关管理控制台
  2. VPN网关页面,单击创建VPN网关

  3. VPN网关(包月)页面,根据以下信息配置VPN网关,然后单击立即购买并完成支付。

    以下仅列举本文强相关的配置,其余配置项保持默认值或为空。更多信息,请参见创建和管理VPN网关实例

    配置项

    说明

    地域和可用区

    选择VPN网关实例的地域。 本文选择华东1(杭州)

    说明

    确保VPC实例的地域和VPN网关实例的地域相同。

    网关类型

    选择待创建的VPN网关类型。本文选择普通型

    网络类型

    选择VPN网关实例的网络类型。本文选择公网

    隧道

    系统直接展示当前地域支持的IPsec-VPN连接的隧道模式。

    VPC

    选择待连接的VPC实例。

    虚拟交换机1

    从VPC实例中选择一个交换机实例。

    • IPsec-VPN连接的隧道模式为单隧道时,您仅需要指定一个交换机实例。

    • IPsec-VPN连接的隧道模式为双隧道时,您需要指定两个交换机实例。

      IPsec-VPN功能开启后,系统会在两个交换机实例下各创建一个弹性网卡ENI(Elastic Network Interfaces),作为使用IPsec-VPN连接与VPC流量互通的接口。每个ENI会占用交换机下的一个IP地址。

    说明
    • 系统默认帮您选择第一个交换机实例,您可以手动修改或者直接使用默认的交换机实例。

    • 创建VPN网关实例后,不支持修改VPN网关实例关联的交换机实例,您可以在VPN网关实例的详情页面查看VPN网关实例关联的交换机、交换机所属可用区以及交换机下ENI的信息。

    虚拟交换机2

    从VPC实例中选择第二个交换机实例。

    • 您需要从VPN网关实例关联的VPC实例下指定两个分布在不同可用区的交换机实例,以实现IPsec-VPN连接可用区级别的容灾。

    • 对于仅支持一个可用区的地域 ,不支持可用区级别的容灾,建议您在该可用区下指定两个不同的交换机实例以实现IPsec-VPN连接的高可用,支持选择和第一个相同的交换机实例。

    说明

    如果VPC实例下没有第二个交换机实例,您可以新建交换机实例。具体操作,请参见创建和管理交换机

    IPsec-VPN

    是否开启IPsec-VPN功能。本文选择关闭

    SSL-VPN

    是否开启SSL-VPN功能。本文选择开启

    SSL连接数

    选择需要连接的客户端的数量。

    说明

    开启SSL-VPN功能后才可配置SSL连接数

  4. 返回VPN网关页面,查看创建的VPN网关实例。

    刚创建好的VPN网关实例的状态是准备中,约1~5分钟会变成正常状态。正常状态就表明VPN网关实例已完成初始化,可以正常使用。

步骤四:创建SSL服务端

  1. 在左侧导航栏,选择网间互联 > VPN > SSL服务端

  2. 在顶部菜单栏,选择SSL服务端的地域。

    说明

    请确保SSL服务端的地域和已创建的VPN网关实例的地域相同。

  3. SSL服务端页面,单击创建SSL服务端

  4. 创建SSL服务端面板,根据以下信息配置SSL服务端,然后单击确定

    以下仅列举本文强相关的配置,其余配置项保持默认值或为空。更多信息,请参见创建和管理SSL服务端

    配置项

    说明

    VPN网关

    选择已创建的VPN网关实例。

    本端网段

    以CIDR地址块的形式输入要访问的VPC实例的网段。本文输入192.168.0.0/16。

    客户端网段

    以CIDR地址块的形式输入客户端访问VPC实例时使用的网段。本文输入10.0.0.0/24。

    重要
    • 客户端网段的子网掩码位数在16至29位之间。

    • 请确保客户端网段与本端网段、VPC网段以及与客户端终端关联的任何路由网段均没有重叠。

    • 在指定客户端网段时,建议您使用10.0.0.0/8、172.16.0.0/12和192.168.0.0/16网段及其子网网段。如果您的客户端网段需要指定为公网网段,您需要将公网网段设置为VPC的用户网段,以确保VPC可以访问到该公网网段。关于用户网段的更多信息,请参见什么是用户网段?如何配置用户网段?

    • 创建SSL服务端后,系统后台会自动将客户端网段的路由添加在VPC实例的路由表中,请勿再手动将客户端网段的路由添加到VPC实例的路由表,否则会导致SSL-VPN连接流量传输异常。

    高级配置

    开启双因子认证功能,本文使用EIAM 2.0。其余配置保持默认值。

    • IDaaS实例所在地域:选择华东1(杭州)

    • IDaaS实例:选择在准备工作中创建的EIAM实例。

    • IDaaS应用:选择已添加的阿里云SSL-VPN应用。

      说明

      在阿联酋(迪拜)地域创建SSL服务端时,推荐您绑定新加坡地域的IDaaS EIAM 2.0实例,以减少跨地域时延。

步骤五:创建SSL客户端

  1. 在左侧导航栏,选择网间互联 > VPN > SSL客户端

  2. SSL客户端页面,单击创建SSL客户端

  3. 创建SSL客户端面板,输入SSL客户端的名称,选择对应的SSL服务端,然后单击确定

  4. SSL客户端页面,找到已创建的SSL客户端,然后在操作列单击下载证书

    将下载的SSL客户端证书保存在您的本地,后续用于配置客户端。

步骤六:配置客户端

配置Linux客户端

  1. 打开命令行窗口。

  2. 执行以下命令安装OpenVPN客户端。

    #CentOS系统执行以下命令
    yum install -y openvpn
    #执行以下命令查看系统是否已创建/etc/openvpn/conf/目录,如果系统未创建,需手动创建/etc/openvpn/conf/目录。
    cd /etc/openvpn #进入openvpn目录下
    ls              #查看openvpn目录下是否已创建conf目录
    mkdir -p /etc/openvpn/conf #如果openvpn目录下不存在conf目录,手动创建conf目录。
    
    #Ubuntu系统执行以下命令
    apt-get update
    apt-get install -y openvpn
    #执行以下命令查看系统是否已创建/etc/openvpn/conf/目录,如果系统未创建,需手动创建/etc/openvpn/conf/目录。
    cd /etc/openvpn #进入openvpn目录下
    ls              #查看openvpn目录下是否已创建conf目录
    mkdir -p /etc/openvpn/conf #如果openvpn目录下不存在conf目录,手动创建conf目录。
  3. 将已下载的SSL客户端证书解压拷贝至/etc/openvpn/conf/目录。

  4. 进入/etc/openvpn/conf/目录,执行以下命令,然后输入用户名和密码。客户端通过AD认证后,将会和云上建立SSL-VPN连接。

    openvpn --config /etc/openvpn/conf/config.ovpn --daemon

    2024-05-11_10-47-04

配置Windows客户端

  1. 下载并安装OpenVPN客户端(Windows版本)

  2. 将已经下载的SSL客户端证书解压拷贝至OpenVPN\config目录。

    本文将证书解压拷贝到C:\Program Files\OpenVPN\config目录,请您根据安装路径将证书解压拷贝至您真实的目录。

  3. 启动OpenVPN客户端,单击Connect,然后输入用户名和密码。客户端通过AD认证后,将会和云上建立SSL-VPN连接。

    2024-05-11_10-56-59

配置Mac客户端(OpenVPN)

  1. 打开命令行窗口。

  2. 如果您的客户端尚未安装homebrew,执行以下命令安装homebrew。

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  3. 执行以下命令安装OpenVPN客户端。

    brew install openvpn
  4. 将已下载的SSL客户端证书解压拷贝至配置目录。

    1. 备份/usr/local/etc/openvpn文件夹下的所有配置文件。

      重要

      不同版本的macOS系统OpenVPN默认的安装路径可能不同,请以您实际的安装路径为准。在执行本操作及后续操作时,请将相关路径替换为您实际的安装路径。

    2. 执行以下命令删除OpenVPN的配置文件。

      rm /usr/local/etc/openvpn/*
    3. 执行以下命令将已经下载的SSL客户端证书拷贝到配置目录。

      cp cert_location /usr/local/etc/openvpn/

      cert_location是下载的SSL客户端证书的路径,例如:/Users/example/Downloads/certs6.zip

  5. 执行以下命令解压证书。

    cd  /usr/local/etc/openvpn/
    unzip /usr/local/etc/openvpn/certs6.zip
  6. 进入/usr/local/etc/openvpn/目录下,执行以下命令,然后输入用户名和密码,建立SSL-VPN连接。

    sudo /usr/local/opt/openvpn/sbin/openvpn --config /usr/local/etc/openvpn/config.ovpn

步骤七:测试连通性

完成上述步骤后,客户端已经可以远程访问VPC实例下的资源。以下内容以Linux客户端为例介绍如何测试客户端和VPC实例间的连通性。

  1. 打开客户端的命令行窗口。

  2. 执行ping命令,尝试访问VPC下的ECS1实例,验证通信是否正常。

    ping <ECS1实例的IP地址>

    收到如下所示的回复报文,则证明客户端可以正常访问VPC实例下的资源。

    2024-05-09_17-05-07

IDaaS EIAM 1.0配置说明

如果您需要使用IDaaS EIAM 1.0实例,请按照以下步骤进行操作。您需要开启LDAP认证,在创建SSL服务端时,需绑定EIAM 1.0实例,其余步骤与上文相同,此处不再描述。

配置步骤

image

开启LDAP认证

在您建立SSL-VPN连接前,您需要在IDaaS EIAM 1.0实例中开启LDAP认证功能并同步账户数据,用于后续的身份验证。

  1. 添加LDAP认证源。

    1. 登录IDaaS管理控制台

    2. EIAM云身份服务页面,单击旧版页签,找到目标实例ID。

    3. 在左侧导航栏,单击认证源

    4. 认证源页面的右上角,单击添加认证源

    5. 添加认证源页面,找到LDAP图标LDAP图标,在操作列单击添加认证源

    6. 添加认证源(LDAP)面板,配置LDAP服务器(即本文的AD服务器)信息,然后单击提交

      • 认证源ID:由系统自动生成。

      • 认证源名称:输入自定义名称。

      • LDAP URL:LDAP服务器连接地址,LDAP服务器即指您部署AD系统的服务器。地址填写格式例如:ldap://127.0.0.1:389/。本文输入ldap://47.XX.XX.62:389/

        若主机的IP地址为IPv6地址格式,则地址需放在中括号([])内,例如:ldap://[0000:0000:0000:0000:0000:0000:0001]:389/

        说明

        IDaaS目前只支持公网访问,LDAP服务器需要提供公网地址,并开启389端口。您可以在您LDAP服务器的安全组策略中设置只允许IDaaS的公网IP可以访问LDAP服务器,关于IDaaS公网IP地址信息,请提交工单至阿里云IDaaS团队咨询。

      • LDAP Base:LDAP服务器Base DN。本文输入dc=zxtest,dc=com

      • LDAP账户:LDAP服务器管理账户DN。本文输入cn=Administrator,cn=Users,dc=zxtest,dc=com

      • LDAP账户密码:LDAP服务器管理账户密码。

      • 过滤条件:查询用户名的过滤条件。本文输入(sAMAccountName=$username$)

        具体匹配规则,请参见LDAP官方文档LDAP Filters。其中$username$为IDaaS系统用户名参数,为固定值。

      更多参数说明,请参见旧版本 LDAP 认证登录

    7. 认证源页面,找到目标认证源,在其状态列单击启用图标,然后在弹出的对话框中,单击确定,开启LDAP认证源。

  2. LDAP账户同步配置,将LDAP服务器中的账户数据导入到IDaaS系统中。

    1. 在左侧导航栏,单击机构及组

    2. 机构及组页面的右上角,单击配置LDAP。在LDAP配置面板,单击新建配置

    3. LDAP配置面板的服务器链接页签下,配置以下信息,然后单击保存

      • AD/LDAP名称:输入自定义名称。

      • 服务器地址:输入您LDAP服务器的公网IP地址。本文输入47.XX.XX.62

      • 端口号:输入您LDAP服务器提供服务的端口号。本文输入389

      • Base DN:输入要同步账户的节点DN。本文输入dc=zxtest,dc=com

        说明

        此项在添加完成后不可更改,因为在IDaaS系统与LDAP(或AD)服务器进行同步数据时,如果Base DN发生改变会使双方组织机构目录无法对应而导致数据同步失败,想要同步不同目录的数据建议添加多个LDAP配置来完成。

      • 管理员DN:请输入管理员账户DN。本文输入cn=Administrator,cn=Users,dc=zxtest,dc=com

      • 密码:输入管理员账户的密码。

      • 类型选择:选择您LDAP服务器的类型。本文选择Windows AD

      • 所属OU节点:账户数据导入IDaaS系统中组织机构的节点位置,若不选择,则导入到根OU下。本文保持默认值。

      • LDAP同步至本系统:启用该项后,可以手动从LDAP服务器同步数据到IDaaS系统。本文选择启用

      • 本系统同步至LDAP:启用该项后,可以从IDaaS系统同步数据到LDAP服务器。本文选择启用

      在您完成上述配置后,您可以单击测试连接来测试服务器的连通性。如果测试失败,请检查网络连通性,以及配置的连接参数是否正确。

    4. LDAP配置面板的字段匹配规则页签下,配置以下信息,然后单击保存

      字段匹配规则为IDaaS系统的字段与LDAP服务器中属性的对应匹配规则,例如LDAP服务器中的cn字段对应为IDaaS系统中的用户名。

      • 用户名:本文输入cn

        说明

        如果您AD系统中的账户的cn字段值为中文,则该账户无法拉取到IDaaS系统。建议您使用sAMAccountName字段。

      • 外部ID:Windows AD为objectGUID, OpenLdap为uid。本文输入objectGUID

      • 密码属性:Windows AD为unicodePwd, OpenLdap为userPassword。本文输入unicodePwd

      • 用户唯一标识:Windows AD为DistinguishedName, OpenLdap为EntryDN。本文输入DistinguishedName

      • 邮箱:本文输入mail

      更多信息,请参见LDAP账户同步配置

    5. 机构及组页面,选择导入 > LDAP > 组织结构

    6. LDAP列表面板,找到目标LDAP,单击导入,在弹出的对话框中,单击确定。在组织机构临时数据面板确认组织机构信息,单击确定导入

    7. 在当前页面的组织架构区域,选择目标组织机构,在组织机构的详情区域,选择导入 > LDAP > 账户

    8. LDAP列表面板,找到目标LDAP,单击导入,在弹出的对话框中,单击确定。在账户临时数据LDAP列表面板中确认账户信息,单击确定导入,然后为导入的账户设置默认密码,实现LDAP服务器账户信息同步到IDaaS系统。

      重要

      客户端后续登录时,需要使用AD服务器中的密码进行登录。此处设置的是IDaaS实例中的密码。

  3. 开启云产品LDAP认证。

    1. 在左侧导航栏,选择设置 > 安全设置

    2. 安全设置页面,单击云产品AD认证页签。

    3. 选择刚刚创建的LDAP认证源,启用该功能并单击保存设置

      认证源