运维的工作,一方面要保证服务器日常的稳定运行。同时也要做到安全方面的管理。因为运维的一部分服务器在AWS上面,所以用到了Client-VPN服务做访问限制。本次就通过图文来讲解下VPN的创建过程。

1.前提准备

  因为本次创建VPN的目的是访问服务器所在区域的实例资源内网并做到访问限制。所以需要用到一台在相同区域的EC2实例资源做相关的证书验证,才能保证后续的Client-VPN创建成功。完成后的VPC和Client-VPN终端节点的配置如下图所示。

client-vpn-scenario-igw

2.客户端身份验证和授权

1.客户端身份验证

  本次我们使用的是双向身份验证,在服务器生成CA证书并导入ACM中进行验证。由于服务是Linux系统,因此通过命令生成证书的方式。

  #将 OpenVPN easy-rsa 存储库克隆到本地计算机并导航到 easy-rsa/easyrsa3 文件夹。
  $ git clone https://github.com/OpenVPN/easy-rsa.git

  $ cd easy-rsa/easyrsa3

  #初始化一个新的 PKI 环境。
  $ ./easyrsa init-pki

  #构建一个新的证书颁发机构 (CA)。
  $ ./easyrsa build-ca nopass
  
  #按照提示构建 CA。
  #生成服务器证书和密钥。
  $ ./easyrsa build-server-full server nopass

  #生成客户端证书和密钥。
  (请务必保存客户端证书和客户端私有密钥,因为您配置客户端时需要这些信息。)
  $ ./easyrsa build-client-full client1.domain.tld nopass
  #您可以选择为需要客户端证书和密钥的每个客户端(最终用户)重复此步骤。

  #将服务器证书和密钥和客户端证书和密钥复制到自定义文件夹,然后导航到此自定义文件夹。
  #复制证书和密钥之前,请使用 mkdir 命令创建自定义文件夹。以下示例在您的主目录中创建自定义文件夹。
  $ mkdir ~/custom_folder/
  $ cp pki/ca.crt ~/custom_folder/
  $ cp pki/issued/server.crt ~/custom_folder/
  $ cp pki/private/server.key ~/custom_folder/
  $ cp pki/issued/client1.domain.tld.crt ~/custom_folder
  $ cp pki/private/client1.domain.tld.key ~/custom_folder/
  $ cd ~/custom_folder/
						
  #将服务器证书和密钥以及客户端证书和密钥上传到 ACM。通过SFTP工具或者AWS CLI。
  $ aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region region
  $ aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt --region region

customfolder

cacert

2.客户端身份授权

  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/。
  2. 在导航窗格中,选择 Security Groups。
  3. 选择与您的资源或应用程序关联的安全组,然后选择操作、编辑入站规则。
  4. 选择 Add rule。
  5. 对于 Type (类型),请选择 All traffic (所有流量)。或者,您也可以限制访问特定类型的流量,例如 SSH。
  6. 对于源,请指定与客户端 VPN 终端节点的目标网络(子网)关联的安全组的 ID。
  7. 选择 Save rules (保存规则)。

3.客户端 VPN 终端节点

1.创建客户端VPN终端节点

  点击创建客户端VPN终端节点。

createvpn

  然后选择上一步导入的server证书。

vpnendpoint

  选择1194端口然后点确定。

vpnport

2.目标网络

  1. 选择要与目标网络关联的客户端 VPN 终端节点,然后依次选择关联、关联。
  2. 对于 VPC,选择您要在其中放置子网的 VPC。如果您在创建客户端 VPN 终端节点时指定了 VPC,或者如果您有以前的子网关联,则这必须是相同的 VPC。
  3. 对于要关联的子网,选择要与客户端 VPN 终端节点关联的子网。
  4. 选择 Associate。

associate

3.授权规则

  1. 选择要向其中添加授权规则的客户端 VPN 终端节点,然后依次选择授权和授权入口。
  2. 对于 Destination network (目标网络),输入您希望用户访问的的 IP 地址,以 CIDR 表示法表示(例如,VPC 的 CIDR 块)。本次选择以172.31.0.0/16作为授权规则。
  
rules

4.路由

  每个客户端 VPN 终端节点都具有一个路由表,用于描述可用的目标网络路由。路由表中的每个路由决定了将网络流量指引到何处。您必须为每个客户端 VPN 终端节点路由配置授权规则,以指定哪些客户端可以访问目标网络。

  当您将 VPC 中的子网与客户端 VPN 终端节点关联时,VPC 的路由会自动添加到客户端 VPN 终端节点的路由表中。要允许访问额外的网络(如对等 VPC、本地网络(使客户端能够相互通信)或 Internet),必须手动将路由添加到客户端 VPN 终端节点的路由表中。

  1. 选择要添加路由的客户端 VPN 终端节点,选择路由表,然后选择创建路由。
  2. 对于 Route destination (路由目标),为目标网络指定 IPv4 CIDR。例如:
  - 要添加 Internet 访问的路由,请输入 0.0.0.0/0。
  - 要添加对等 VPC 的路由,请输入对等 VPC 的 IPv4 CIDR 范围。
  - 要为本地网络添加路由,请输入 AWS 站点到站点 VPN 连接的 IPv4 CIDR 范围。
  - 要为本地网络添加路由,请输入客户端 CIDR 范围。
  3. 对于目标 VPC 子网 ID,选择与客户端 VPN 终端节点关联的子网。
  或者,如果要为本地网络添加路由,请选择 local。
  4. 对于描述,输入路由的简短描述。
  5. 选择 Create Route (创建路由)。
 
route

5.连接

  在连接栏里面,可以看到客户端VPN的连接使用情况。

vpnconnect

客户端VPN配置

  配置好客户端终端节点VPN后,点击下载客户端配置文件得到openvpn的相关config,包括opvn文件,crt和key密钥。

downloadvpn

vpnkey

  然后导入openvpn软件的config,由于在AWS控制台上未做相关的隧道拆分规则,于是我们用文本编辑器打开opvn文件,在首行以及末尾行分别添加隧道拆分规则和密钥认证文件配置。

openvpn

  最后右键任务栏左下角的openvpn图标,点击连接,最后显示绿色就说明连接成功即可访问该区域的内网实例资源了。如果还想做更加细化的管理,还可以给每个使用vpn的人单独创建账户密码登录。

  注意:如果是MAC OS系统的话,需要拿掉config里面的以下两行。

  register-dns
  block-outside-dns