2024年2月6日发(作者:)
多厂商 VPN 系列之五:Cisco SSL VPN 的实现【基于路由器,包含 Anyconnect】
SSL VPN 是这几年越来越火的远程访问 VPN 了,因为它基于 browser 来实现一个安全的访问,它跟 IPsec 的远程访问,
方便在于不需要安装任何的客户端,这对于远程办公或者需要突然临时有事需要访问公司内部的文件,可以就在附近网吧进
行访问,而不需要任何的客户端安装。
SSL 和 TLS 历史:
安全套接层俗称 Secure Socket Layer (SSL )是由 Netscape Communitcation 于 1990 年开发,用于保障 Wo r d Wi
d e We b(WWW)通讯的安全。主要任务是提供私密性,信息完整性和身份认证。1994 年改版为 SSLv2 ,1995 年改
版为 SSLv3 。
Transport Layer Security(TLS )标准协议由 IETF 于 1999 年颁布,整体来说 TLS 非常类似与 SSLv3 ,只是对 SSLv3 做
了些增加和修改。 现在大部分使用的是 TLS 了,因为它属于标准化协议,后续开发了基于无线的 WTLS 和基于 UDP 传输数
据的 DTLS。
SSL 是一个不依赖与平台和运用程序的协议,用于保障 TCP-Based 运用安全,SSL 在 TCP 层和应用层之间,就像应用
连接到 TCP 连接的一个插口。
我们常用的 HTTPS,就是 HTTP over SSL,它工作过程:PC 访问服务器的时候,如果证书是信任的,那么直接推送到 PC 上,
如果是不信任,我们就需要手动信任它。然后 PC 的 IE 浏览器产生一个随机化对称密钥,用服务器推送的证书的公钥对这个
密钥做加密,然后发送给服务器,服务器收到以后用这个私钥解密后,得到对称密钥,后续的数据包就利用这个对称密钥来
保证安全.这个在我们访问 https 的时候经常遇到询问你是否信任这个证书站点,SSL VPN 实验中也是经常遇到。
第一阶段:Handshake phase(握手阶段)
a.协商加密算法
b.认证服务器
c.建立用于加密和 MAC 用的密钥
第二阶段:Secure data transfer phase(安全的数据传输阶段)
在已经建立的 SSL 连接里安全的传输数据
这些是在秦柯老师的 SSL VPN 卷一看的,深入的部分还有许多不了解,所以不做深入了。
SSL VPN 特点 (7.0 为 SSL VPN, 8.0 以后为 Anyconnect)
1、不需要预先安全客户端软件
2、使用标准的网页浏览器建立远程 VPN 连接
3、使用浏览器拥有 SSL 安全技术提供数据私密性,完整性校验,和源认证
4、提供细致的访问控制
5、客户端运行程序可以通过多种方式动态的下载。如:连接时在线下载,通过 JAVA,activex 或者 EXE 文件分发
6、为连接互联网的系统灵活的建立 VPN 连接,不过这个系统是否被公司管理
7、在任何地点都能轻松的穿越防火墙和网络
8、支持透明的无线漫游
9、可以使用集成的 IOS 防火墙特性提供增强的安全性。
Anyconnect 表现在:任意地点,任意环境,任意操作系统 、任意参数可选
分为 1. WEB-enable mode :通过浏览器,在线通过 ActiveX 或 Java
2、Standalone mode :使用 MSI 安装包,直接在客户端安装
关于 SSL VPN 与其他 VPN 的比较,摘自秦柯老师的总结
SSLVPN Access Methods (SSL VPN 访问的四种模式)
1、Reverse proxy technology (Clientless Access)
2、port-forwarding technology
3、SSL VPN Tunnel Client
4、Integrated terminal services (只有 ASA 支持)
1、Reverse proxy technology (clientless access) 只适合访问 WEB 文件服务器,也通常叫 WEB VPN
Reverse Proxy 是一个内部服务器和远程用户之间的代理服务器,提供给远程用户提供访问内部 WEB 资源的入口点。
对于远程用户而言 这台 Reverse Proxy 就是一台真正的 WEB 服务器。当收到 用户的请求的时候,会把请求转送到内部服
务器,就像用户直接去获取
一样,并把服务器返回的内容发送给客户端。
| PC——————| | Reverse Proxy——————| | Server ——————|
访问的过程是 先 PC 与 Reverse 建立 TCP 会话。 然后 Reverse 与 Server 建立 TCP 会话(用的为 reverse 的地址)
Reverse 把 PC 发过来的请求,通过与 Server 的 TCP 发送给 Server,返回过程也一样。
2、port-forwarding Technology 只可以访问基于 TCP 固定的端口服务
port-frwarding 客户端是一个客户端代理程序,为特殊的流量做中继,通过已经连接的 SSLVPN 连接来转发给固定的
端口。这个客户端一般小于 100KB
3、SSL VPN Tunnel Client (通过安装 SSL 客户端,可以基于网络层流量进行保护,需要管理员权限,它的作用可以与
EZVPN 相比,更加方便、灵活。)
4、关于 terminal server 只有 ASA 才能实现,它是产商对于 SSL VPN 的更好的支持。不同的产商支持的类型不同,cisco
支持 SSH、远程登陆之类的。
关于 SSLVPN 的实现,每个产商的功能可能不太一样,所以在分析需求和选购的时候,最好能现场验证,否则到时候容易
浪费时间、精力。
实验环境 SOHO 作为一个模拟外部网络的一个场点,Client 通过 SOHO 提供的 NAT 功能访问 internet 和公司的 SSLVPN,
HTTP_telnet 作为测试环境,AAA Server 作为扩展性使用。
SOHO:
interface FastEthernet0/0
ip address 23.1.1.2 255.255.255.0
!
interface FastEthernet0/1
ip address 200.200.200.1 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 23.1.1.1
Internet:
interface FastEthernet0/0
ip address 23.1.1.1 255.255.255.0
interface FastEthernet0/1
ip address 12.1.1.2 255.255.255.0
!
interface Loopback0
ip address 1.1.1.1 255.255.255.255
SSL VPN:
interface FastEthernet0/0
ip address 192.168.1.1 255.255.255.0
ip nat inside
!
interface FastEthernet0/1
ip address 12.1.1.1 255.255.255.0
ip nat outside
ip route 0.0.0.0 0.0.0.0 12.1.1.2
ip nat inside source list nat interface f0/1 overload
ip access-list extended nat
permit ip any any
router ospf 1
router-id 1.1.1.1
network 192.168.1.0 0.0.0.255 area 0
HTTP_telnet
interface FastEthernet0/0
ip address 192.168.1.2 255.255.255.0
interface Loopback0
ip address 2.2.2.2 255.255.255.255!
router ospf 1
router-id 2.2.2.2
network 2.2.2.0 0.0.0.255 area 0
network 192.168.1.0 0.0.0.255 area 0
default-information originate
!
ip http server
ip http authentication local
line vty 0 4
Http_Telnet(config-line)#ling
Http_Telnet(config-line)#login local
username cciese privilege 15 password cisco
基本配置,Client 能访问 internet 资源 和 SSL VPN 外部接口的访问,内部通过 OSPF 模拟一个内部网络。HTTP-Telnet
作为测试环境。
开始 SSL VPN 的配置,先介绍几个概念,在 cisco IOS SSL VPN 实现,它依靠 gateway、context、group policy 三个组
成。
1、gateway:cisco IOS 路由器是一个在 SSL-enable VPN 客户和私有网络资源之间的 proxy (代理服务器).在 SSL VPN 隧
道能够建立之前,为了连接或终结一个 VPN 会话,我们需要给 gateway 关联一个公网 IP 或者主机名。这样 VPN 用户就可
以使用浏览器来连接这个 IP 或者主机名来协商 SSL。gateway 能为多个与 context 关联的提供服务
2、Context: 实际的用户会话是连接 gateway 定义的 IP 地址,直接和 context 建立的。还可以运用策略到 context 来先限
制对实际用户的认证。当认证通过后,配置的策略就运用到这个用户会话上。
3、Group policy:是一个在 SSLVPN 用户隧道协商过程中继承的参数。(策略大部分都是基于这个来实现)
关于 group policy 是在 context 中定义的,一个 context 可以定义多个 group policy,但是在 context 中必须存在一个
default group policy。
如果一个 context 定义了多个 Group policy,但是 radius 服务器并没有推送任何 policy。那么会用 Default Group policy
中的策略给这用户
1、webvpn gateay cciese :定义一个 gateway ,名字为 cciese
ip address 12.1.1.1 port 443
inservice
当建立一个 gateway 后,它会自动生成一个自签名的证书,在这个进程中只需要设置哪个作为网关,其实端口号不需要设
置 默认为 443,inservice 表示开启服务,默认是关闭的。
2、webvpn context c1
gateway cciese
inservice
定义个 context 名字为 c1,关联之前的 gateway,然后开启服务,熟悉 firewall 的朋友 肯定比较熟悉 context,就像 ASA
可以实现多个虚拟防火墙一样,每个 context 之间是独立的,在这里面也是一样,它还能关联用户,需要使用 radius 来实现。
3、usernmae cisco password cisco
这三部完成,基于最简单的 SSL VPN 就完成了,
Client 访问 internet 1.1.1.1 正常成功,然后用网页访问 12.1.1.1,就进入登陆界面了,其实也不是什么都不能实现,
它就能实现之前说的 Clientless Access,能实现基于网页形式的访问,局限性比较大。就像在网页输入 192.168.1.2,就自
动转入登陆了。
还能实现关于文件访问 或者一个 URL 的标签,因为有时候关于不是很懂技术的人来说,让它输入 192.168.1.1 这些信息 它
们觉得很繁琐,那么我们可以基于这种情况把常用访问的都用标签形式表示出来,而省去这个烦恼。
SSLVPN(config)#webvpn context c1
SSLVPN(config-webvpn-context)#url-list "cisco"
SSLVPN(config-webvpn-url)#heading "CCNP"
SSLVPN(config-webvpn-url)#url-text "OSPF" url-value 192.168.1.2
SSLVPN(config-webvpn-context)#policy group test1
SSLVPN(config-webvpn-group)#url-list cisco
SSLVPN(config-webvpn-context)#default-group-policy test1
它实现的效果就是这样,在这个书签中显示了 CCNP 列表有个 OSPF 的标签,之前在上面说过 context 可以定义多个 group
policy,但是必须存在一个 default group policy,所以之前定义的 url-list cisco,是定义一个名字,只作于调用,没别的
用处,真实的内容 heading 就是相当于一个文件夹,uri-text 就是这文件夹里面的文件。最后在 group policy 中调用,然
后把这个 policy 设为 default 的。
第二个效果就是文件访问
SSLVPN(config-webvpn-context)#cifs-url-list cisco
SSLVPN(config-webvpn-cifs-url)#heading "CCIE"
SSLVPN(config-webvpn-cifs-url)#url-text "multicast" url-value 192.168.1.2
SSLVPN(config-webvpn-context)#nbns-list cisco
SSLVPN(config-webvpn-nbnslist)#nbns-server 123.1.1.1
SSLVPN(config-webvpn-context)#policy group test1
SSLVPN(config-webvpn-group)#nbns-list cisco
SSLVPN(config-webvpn-group)#cifs-url-list cisco
SSLVPN(config-webvpn-group)#functions file-access
SSLVPN(config-webvpn-group)#functions file-browse
SSLVPN(config-webvpn-group)#functions file-entry
这跟 http 访问是一样的,我作为一个效果实现了,关于 nbns 就是文件访问,在 window 里面如果想通过主机名来访问就
必须装 wins 服务器来做解析,在 group policy 里面三句话,file-access 是必须敲的,不敲的话关于 browse 和 entry 都
不能实现,entry 的效果就是哪个 network file 的搜索框,而 browser 就是那个网络邻居的小图标,它们实现的效果就是一
个目的,通过 url 或者网上邻居的图标来访问共享的文件夹。
关于 cifs 跟之前的 URL-list 一样的目的,就是为了不太懂技术的人使用的,也是定义一个书签,然后在定义标签,这里书签
为 ccie,标签为 multicast。这里因为文件系统有点问题,所以测试不了,可以根据需求来定义
port-forwarding Technology 必须使用 group policy 来实现。
关于端口转发举几个例子,它能实现基于 TCP 的静态端口与本地端口进行映射,比如把本地的 127.0.0.1 5555 端口映射成
内部网络 192.168.1.2 的 23 号端口,只需要在本地 telnet 127.0.0.1 5555 就自动转换了。
SSLVPN(config)#webvpn context c1
SSLVPN(config)#port-forward "cisco"
SSLVPN(config)#local-port 4444 remote-server "192.168.1.2" remote-port 23 description "Telnet"
SSLVPN(config-webvpn-group)#port-forward cisco
当 telnet 本地 127.0.0.1 4444 端口号自动映射到 192.168.1.2 23 号端口了,并且有加解密情况。 这个功能需要 java 的支
持,版本需要在
1.6 以上。
SSL VPN 关于 IOS,默认情况下只能存在一个 group policy,它不像 ASA 默认就有隧道组的概念,所以要想完成多个 group
policy 的实现,那么就必须定义 AAA Server 来做联动,当使用这个用户登陆的时候,那么就继承这个 policy 的策略,如果
基于那个用户登陆,就继承那个 policy 的策略。 AAA server 这里就不做太多介绍了。
SSLVPN(config)#aaa new-model
SSLVPN(config)#aaa authentication login noacs local none
SSLVPN(config)#line con 0
SSLVPN(config-line)#login authentication noacs
SSLVPN(config)#aaa authentication login sslvpn group radius
SSLVPN(config)#radius-server host 192.168.1.3 key cisco
这里定义一个 noacs 作为线下保护,AAA 一旦开启的话,所以的登陆都要求做认证,这是需要养成一个习惯。 然后定义一
个 login 认证,认证送往 radius 服务器,服务器的地址是 192.168.1.3 key cisco。
在 AAA 服务器上,Network configuration 里面定义一个 Client。
Client 地址为 192.168.1.1 密钥为 cisco,与 Client 定义的一样,然后点 Submit+Apply,就定义完毕了,cisco ACS 也是
基于 JAVA 实现的。
然后定义两个用户。test1 与 test2 为了方便做测试。这里最重要的就是 radius 的类型,必须是 IOS 的。
在做策略之前,先测试下 Client 与 Server 之间是否能够测试成功。
Server 跟 Client 已经能够通信了,开始进行 policy group 的授权,我定义两个 policy 一个就是之前做了许多策略的,名
字为 test1,那么还定义一个 test2,在这个里面我设置一个 baner,定义为“you are welcome" ,正好 test1 用户对应
group test1 test2 对应组 test2。
SSLVPN(config)#webvpn context c1
SSLVPN(config-webvpn-context)#aaa authentication list sslvpn
SSLVPN(config-webvpn-context)#policy group test2
SSLVPN(config-webvpn-group)#banner "you are welcome"
调用 AAA 认证,默认为本地认证,然后定义一个 test2。
主要在于 ACS 服务器的属性设置,默认情况下 ACS 的属性没有全部显示,大部分都是在组里面显示,而用户来继承它的属
性,在这个测试环境中我们必须把用户属性给调试出来。 基于组的适用于人数比较多的时候。
在 AAA 的选项 列表选择
出现这个界面后,先在 Advanced Options ,里面设置一个 per-user
TACACS+/RADIUS 属性打勾
然后在点击 radius cisco IOS/pix 6.0 里面第一个选项 cisco-av-pair 的 user 下打勾,默认没有打,每选择一个选项记得
Submit。
由于第一个用户是继承 default 的策略。所以不需要做修改,我们在 test2 中做修改,点击用户信息 找到这个选项
这个格式前面固定的,test2 就是表示你这个用户想关联的 group policy 是哪个,必须名字跟你设置的一样。
当使用 test1 登陆的时候,它继承默认的组策略。
当使用 test2 登陆的时候,它用于关联了 group policy 所以它显示了 you are welcome 和没有定义策略。
关于 SSL VPN 第三块 就是 SVC 跟 CSD 了,SVC 就是一个软件 Client,它跟 EZVPN 的功能非常相识,因为有些动态端口
的流量访问基于上面两种形式是无法完成的,所以必须依靠 SVC 来完成,CSD 是 cisco 的另外一个提供安全保证的功能,
它能实现你在网吧、公共场所这些不安装的环境下,虚拟一个桌面出来,当访问结束以后,它会清空所以访问的痕迹,并且
可以定义许多策略来规定用户的使用。
关于这个两个插件 在 cisco SDM 包里面就用,必须使用 7200 才能模拟环境,首先需要 format disk0,把空间格式化。然
后把插件 copy 到 disk0 中,建议使用 FTP,TFTP 虽然方便,但是每次规定只能传递 512 字节的数据,比较慢。
SSLVPN(config)#webvpn install svc disk0:
SSLVPN(config)#webvpn install csd disk0:
installed successfully,出现这句话表示加载成功了。
首先看下 SVC 开启。
ip local pool cciese 100.1.1.100 100.1.1.200
SSLVPN(config)#webvpn context c1
SSLVPN(config-webvpn-context)#policy group test1
SSLVPN(config-webvpn-group)#functions svc-enabled
SSLVPN(config-webvpn-group)#svc address-pool cciese
SSLVPN(config-webvpn-group)#svc split include 192.168.1.0 255.255.255.0
有些老版本的地址池定义的网段必须与路由器处于直连网段(可以用环回口代替),否则会使用 anyconnect 失败
定义一个地址池,SVC 也会为每个 Client 分配一个地址,然后在 group policy 下开启,然后调用地址池。 这里我把隧道分
离也做了,不然默认情况下会把所有流量都引向 Server 那,就不能访问 internet 了。
点击 tunnel conection 就可以安装了,它这里说是 anyconnect ,但是实现的效果还是 SVC,anyconnect 可以进行拨号
连接,它这个必须每次登陆网页后在下载。 第一次安装的话,会有点小慢。
当安装成功后,会有一个提示,然后关于 split tunnel 也获取了,然后 Telnet 192。168.1.2 后 加解密也正常。这种客户端
只是 SVC,因为断开后就自动卸载了,还有一种 anyconnect,可以实现跟 EZVPN 的 client 一样,输入用户名地址 就可以
直接拨入了 而不需要进入网页。但是一直没有找到合适的插件,所以只能使用 SVC 了。
最后一个部分,CSD
SSLVPN(config)#webvpn context c1
SSLVPN(config-webvpn-context)#csd enable
SSLVPN(config)#enable secret cciese
配置命令很简单,但是必须创建一个 enable 密码,因为默认情况下 csd 没有定义 location,需要创建 location,location
相当于 policy 一样,可以定义多个来规定策略,比如 IP address 属于哪个范围,然后注册表必须满足,然后登陆上去后 运
行访问哪些资源什么的。
12.1.1.1/csd_
这里 username 为 admin 密码为之前设置的 cciese
进去之后,创建一个 location。
策略里面最重要的是 VPN feature Policy 的 Full Tunneling 为 On 状态。否则 CSD 启用不成功,我这还开启了
port-forwarding 作为测试。
禁止使用 CMD 功能。
当安装完成后,它会进入安装桌面。
命令提示符 之前设置禁止使用,所以打开提示错误。
我后来设置了个自动安装,所以 port-forwarding 不会显示出来了。
最后,抓包验证下,第一个是关于 Client 到 SSL VPN 之间的,它使用 TLS V1 来加密数据,而不是使用 SSL 3.0,第二个是
SSL VPN 解密后,然后转发给内部服务器后,是通过这个分配给 Client 的地址为源发送的。 所以 当一个 Client 登入 SSL
VPN 后,是 Client 与 SSL VPN 之间现成一个 TCP 的连接,这个连接被 TLS 保护着,然后 SSL VPN 在与内部服务器建立另
外一个连接,它相当于一个代理。所以关于启用 NAT,它也不会影响正常的流量转发。更多效果,就需要自己去发现跟体验
了。


发布评论