这里演示了如何在AWS上搭建思科的SSLV P N,用来解决员工远程办公的需求。文章需要你有一定的AWS和SSLV P N基础。


个人博客地址:https://liuqianglong.com
文章视频地址:https://space.bilibili.com/408773931


1、实验简介

最近一直在研究思科防火墙的SSL***,用来解决员工远程办公的问题。传统上一般使用ASA55XX系列的硬件防火墙做SSL***,使用ASAv与使用硬件防火墙功能特性几乎没有区别。ASAv在vSphere和AWS环境都可以部署。这里主要介绍一下在AWS上使用ASAv配置SSL***的步骤。后续会继续深入去聊SSL***上的高级特性。

如果你有配置ASA SSL***的经验,需要注意的是AWS上的特殊场景,下面是整个实验的注意事项:

  • 中国区如果AWS账号未经过ICP备案则无法使用TCP 80/443端口,所以需要SSL***修改默认的443端口号。

  • AWS上ASAv为客户端分配的IP地址需要进过NAT转换后才能访问,因为服务器没有回包路由。

  • AWS上的Windows2016无法安装ASDM,建议使用Windows2019安装ASDM软件。

  • 如果ASAv未购买License会限速100k并且最大会话100个,用于做实验足够了但是无法用于生产环境。


2、环境介绍

  • 本次实验在VPC内需要使用2个子网,一个公共子网用于连接跳板机,用户可以先连接Windows2016之后,在Windows2016通过SSH和ASDM连接ASAv。这里不会详细介绍AWS相关基础知识,例如如何创建VPC、如何创建公有子网、私有子网。

AWS上配置Cisco ASAv SSLV P N_AWS

  • 这是实验将会用到的公有子网,默认路由指向了IGW。

AWS上配置Cisco ASAv SSLV P N_AWS_02


3、配置跳板机环境

  • 在公有子网启用一台window2016,用于之后通过SSH和ASDM访问ASAv,注意实例要选择windows 2016,经过测试windows 2019 无法安装ASDM。通过AWS的快速启动一台windows 2016,可以通过输入“windows 2016”过滤查找。注意,window 2019环境无法安装Cisco ASDM。

AWS上配置Cisco ASAv SSLV P N_AWS_03

  • Window2016放置在公有子网,并且开启分配公有IP功能。

AWS上配置Cisco ASAv SSLV P N_ASAv_04

AWS上配置Cisco ASAv SSLV P N_AWS_05

AWS上配置Cisco ASAv SSLV P N_Cisco_06

AWS上配置Cisco ASAv SSLV P N_ASAv_07

AWS上配置Cisco ASAv SSLV P N_AWS_08

AWS上配置Cisco ASAv SSLV P N_ASAv_09


4、创建ASAv实例

  • 在AWS Marketplace搜索asav,选择ami启用即可。需要注意的是,ASAv默认eth0是ciscoasa的管理接口,管理接口只能走网管流量,不能传输数据流量,所以至少需要再添加一个eth1作为outside接口。如果需要添加更多接口,例如inside和dmz接口,可以添加「网络接口」然后附加到实例。其实在AWS环境中一个outside接口就可以运行AnyConnect环境了。

AWS上配置Cisco ASAv SSLV P N_AWS_10

AWS上配置Cisco ASAv SSLV P N_AWS_11

AWS上配置Cisco ASAv SSLV P N_AWS_12

AWS上配置Cisco ASAv SSLV P N_AnyConnect_13

AWS上配置Cisco ASAv SSLV P N_Cisco_14

AWS上配置Cisco ASAv SSLV P N_Cisco_15

AWS上配置Cisco ASAv SSLV P N_SSLVPN_16

AWS上配置Cisco ASAv SSLV P N_Cisco_17

AWS上配置Cisco ASAv SSLV P N_SSLVPN_18

  • 实例创建成功之后,在AWS环境下需要对实例参数进行一下配置。在AWS接口上默认会丢弃目的IP不是本接口IP的流量,所以想要ASA转发流量,必须关闭outside接口的源/目标检查

AWS上配置Cisco ASAv SSLV P N_AnyConnect_19

AWS上配置Cisco ASAv SSLV P N_Cisco_20

AWS上配置Cisco ASAv SSLV P N_AWS_21

  • 如果客户端想要访问私有云内的服务器,那么不能直接使用ASAv分配的地址池去访问,否则服务器没有回包路由。解决方法是在ASAv做源NAT,将客户端的源IP地址转换成outside上的一个辅助IP地址(无法转换成outside接口地址)。如果是vSphere环境可以转换为outside接口地址。

AWS上配置Cisco ASAv SSLV P N_ASAv_22

AWS上配置Cisco ASAv SSLV P N_SSLVPN_23

  • 防火墙outside需要公网能直接访问,所以需要一个公网地址。

AWS上配置Cisco ASAv SSLV P N_AnyConnect_24

AWS上配置Cisco ASAv SSLV P N_ASAv_25

AWS上配置Cisco ASAv SSLV P N_ASAv_26

  • 公网地址关联上防火墙的outside接口。

AWS上配置Cisco ASAv SSLV P N_ASAv_27

AWS上配置Cisco ASAv SSLV P N_ASAv_28

  • 启动之后,eth0是管理接口首次连接时只能连接管理接口,如果想要连接其他接口可以连接之后配置。

AWS上配置Cisco ASAv SSLV P N_AWS_29


5、ASAv基础配置

  • 首先通过SSH连接到ASAv的管理口进行一些基础配置,这里我使用MobaXterm作为SSH客户端,下载地址会放在最后。在AWS上启动的ASAv默认用户名是admin,使用对应的密钥登录即可。

AWS上配置Cisco ASAv SSLV P N_AnyConnect_30

  • 首先需要设置enable密码

 ciscoasa> enable
 The enable password is not set.  Please set it now.
 Enter  Password: ****
 Repeat Password: ****
 Note: Save your configuration so that the password persists across reboots
 ("write memory" or "copy running-config startup-config").
  • 添加的eth1接口默认是down状态

 ciscoasa# show interface ip brief
 Interface                 IP-Address     OK? Method Status               Protocol
 Internal-Data0/0           169.254.1.1     YES unset  up                   up
 Management0/0             172.30.2.176   YES DHCP   up                   up
 TenGigabitEthernet0/0     172.30.1.7     YES CONFIG administratively down up
  • 开启eth1,配置名称为outside

 interface TenGigabitEthernet0/0 
  no shutdown
  nameif outside
  • 想要通过ASDM连接ASAv,需要开启http服务器,并且允许http流量从管理口进入,0 0 表示不限制IP地址段,如果想要只允许192.168.1.0/24网段的http连接可以这么配置http 192.168.1.0 255.255.255.0。配置http的认证方式是本地认证,配置一个本地15级权限的用户名密码。

 http server enable
 http 0 0 management
 aaa authentication http console LOCAL
 username cisco password ciscoasa privilege 15
  • 通过网页访问ASAv的管理接口地址

AWS上配置Cisco ASAv SSLV P N_Cisco_31

  • 先下载并且安装Java环境,然后下载安装ASDM软件。

AWS上配置Cisco ASAv SSLV P N_AnyConnect_32

AWS上配置Cisco ASAv SSLV P N_ASAv_33

AWS上配置Cisco ASAv SSLV P N_AWS_34

AWS上配置Cisco ASAv SSLV P N_AnyConnect_35

  • 下载安装ASDM环境。

AWS上配置Cisco ASAv SSLV P N_AnyConnect_36

  • 使用本地15级账号密码登录。

AWS上配置Cisco ASAv SSLV P N_AWS_37

  • ASAv未导入License的情况下,限速100Kbps,最大会话100个连接。

AWS上配置Cisco ASAv SSLV P N_SSLVPN_38

  • 这里通过ASDM的文件管理功能导入AnyConnect文件。

AWS上配置Cisco ASAv SSLV P N_SSLVPN_39

AWS上配置Cisco ASAv SSLV P N_SSLVPN_40

  • 导入本地的AnyConnect客户端文件。

AWS上配置Cisco ASAv SSLV P N_AnyConnect_41

  • 查看磁盘确认有客户端文件。

 ciscoasa# dir
 Directory of disk0:/
 86     -rwx  41077110     08:00:10 Jan 12 2021  anyconnect-win-4.6.00362-webdeploy-k9.pkg

6、ASAv配置SSL***

  • 下面几乎是在AWS上ASAv的最小化配置了,这里对AnyConnect高级功能不做讨论。下面命令的含义:当客户端访问其他任何地址时,源地址转换为172.30.1.5。

 object network asa_outside_address
  host 172.30.1.5
 object network anyconnect_pool_object
  subnet 192.168.1.0 255.255.255.0
 nat (outside,outside) source dynamic anyconnect_pool_object pat-pool asa_outside_address
  • 默认情况下ASAv相同安全级别不能访问流量不能从相同接口进出,这里需要开启这2个特性。

 same-security-traffic permit inter-interface
 same-security-traffic permit intra-interface
  • 创建客户端的地址池

 ip local pool anyconnect_client_pool 192.168.1.1-192.168.1.254 mask 255.255.255.255
  • 定义隧道分隔地址段,只有当用户访问172.30.1.0/24时,流量才会通过SSL隧道到达ASAv,去往其他网段的流量客户端依然从本地网络出去。

access-list anyconnect_split standard permit 172.30.1.0 255.255.255.0
  • 开启web***功能,修改端口为8443(AWS中国区未经过ICP备案无法使用TCP80/443),激活anyconnect拨号功能。

web***
 port 8443
 enable outside
 anyconnect enable
 anyconnect image disk0:/anyconnect-win-4.6.00362-webdeploy-k9.pkg
  • 配置group-policy,允许通过网页和客户端拨入,定义流量为隧道分隔模式。

group-policy anyconnect internal
group-policy anyconnect attributes
 ***-tunnel-protocol ssl-client ssl-clientless
 split-tunnel-policy tunnelspecified
 split-tunnel-network-list value anyconnect_split
 address-pools value anyconnect_client_pool
  • 创建一个本地账号,用于拨号测试。

username anyuser password ciscoasa
username anyuser attributes
 ***-group-policy anyconnect
  • 目前防火墙的默认路由是通过管理接口DHCP获取到的,需要将默认路由修改为outside出去。修改步骤如下:

  1. 开启outside ssh管理

  2. 将管理接口配置为静态IP,获取的默认路由会自动消失

  3. 重新通过outside接口连接ciscoasa

  4. 指定默认路由出口为outside

查看现有默认路由通过mgmt接口出去

ciscoasa# show route
S*       0.0.0.0 0.0.0.0 [1/0] via 172.30.2.1, management
C        172.30.1.0 255.255.255.0 is directly connected, outside
L        172.30.1.7 255.255.255.255 is directly connected, outside
C        172.30.2.0 255.255.255.0 is directly connected, management
L        172.30.2.176 255.255.255.255 is directly connected, management
  • 允许ssh连接outside接口

ssh 0 0 outside
  • 将管理接口配置为静态地址,获取的默认路由会自动消失。

interface management 0/0
  ip address 172.30.2.176 255.255.255.0
  • 重新通过SSH连接上outside接口之后,添加默认路由从outside接口出去。

route outside  0 0 172.30.1.1
  • 默认情况下AnyConnect不允许通过远程桌面拨号,需要创建一个AnyConnect Client Profile文件,编辑里面的参数。

AWS上配置Cisco ASAv SSLV P N_Cisco_42

  • 允许通过远程桌面拨号。

AWS上配置Cisco ASAv SSLV P N_SSLVPN_43

  • 如果未修改这个参数,通过远程桌面拨号后会有如下报错。

AWS上配置Cisco ASAv SSLV P N_ASAv_44


7、测试AnyConnect拨号

  • 拨号成功后,通过SSL通道能访问到Windows2016的内网地址即可证明访问成功。Windows2016需要关闭防火墙才能ping通。

AWS上配置Cisco ASAv SSLV P N_SSLVPN_45

  • 安全组也需要放行ICMP协议。

AWS上配置Cisco ASAv SSLV P N_ASAv_46

  • 在公网上拨号成功。

AWS上配置Cisco ASAv SSLV P N_SSLVPN_47

  • 去往172.30.1.0/24网段的流量会通过加密隧道访问。

AWS上配置Cisco ASAv SSLV P N_Cisco_48

  • 测试访问内网Windows2016

C:\Users\Administrator>ping 172.30.1.131

正在 Ping 172.30.1.131 具有 32 字节的数据:
来自 172.30.1.131 的回复: 字节=32 时间=1ms TTL=128
来自 172.30.1.131 的回复: 字节=32 时间=1ms TTL=128
来自 172.30.1.131 的回复: 字节=32 时间=1ms TTL=128
来自 172.30.1.131 的回复: 字节=32 时间=1ms TTL=128
  • 这里协议默认是TLS,也就是TCP建立的连接,如果网络环境不太稳定,需要走语音和视频流量,建议使用DTLS通道,也就是UDP连接。

AWS上配置Cisco ASAv SSLV P N_AWS_49

  • 修改DTLS端口为8443

web***
 dtls port 8443
  • 在group-policy下开启DTLS

group-policy anyconnect attributes
 web***
 anyconnect ssl dtls enable
  • 重新拨号查看协议。

AWS上配置Cisco ASAv SSLV P N_SSLVPN_50

  • ASAv上查看客户端信息

ciscoasa(config)#  show ***-sessiondb anyconnect

Session Type: AnyConnect

Username     : anyuser                Index        : 3
Assigned IP  : 192.168.1.1            Public IP    : 52.83.196.213
Protocol     : AnyConnect-Parent SSL-Tunnel
License      : AnyConnect Premium
Encryption   : AnyConnect-Parent: (1)none  SSL-Tunnel: (1)AES-GCM-256
Hashing      : AnyConnect-Parent: (1)none  SSL-Tunnel: (1)SHA384
Bytes Tx     : 18613                  Bytes Rx     : 7928
Group Policy : anyconnect             Tunnel Group : DefaultWEB***Group
Login Time   : 09:46:43 UTC Tue Jan 12 2021
Duration     : 0h:01m:51s
Inactivity   : 0h:00m:00s
VLAN Mapping : N/A                    VLAN         : none
Audt Sess ID : ac1e02b0000030005ffd7003
Security Grp : none

1、mobaxterm下载地址

2、Java环境下载地址