【汇总】学习VPN其实很简单
说明
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的比较,摘自秦柯老师的总结
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:
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就完成了
还能实现关于文件访问 或者一个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
第二个效果就是文件访问
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
关于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
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之间是否能够测试成功。
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登陆的时候,它继承默认的组策略。
关于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:sslclient-win-1.1.4.176.pkg
SSLVPN(config)#webvpn install csd disk0:securedesktop-ios-3.1.1.45-k9.pkg
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属于哪个范围,然后注册表必须满足,然后登陆上去后 运行访问哪些资源什么的。
https://12.1.1.1/csd_admin.html
这里username为admin 密码为之前设置的cciese
进去之后,创建一个location。
策略里面最重要的是VPN feature Policy的Full Tunneling 为On状态。否则CSD启用不成功,我这还开启了port-forwarding作为测试。
禁止使用CMD功能。
当安装完成后,它会进入安装桌面。
命令提示符 之前设置禁止使用,所以打开提示错误。
我后来设置了个自动安装,所以port-forwarding不会显示出来了。
下载对应文档
关于博客资源下载说明
(1)第一种是书籍PDF与视频类,全部放在博客分享,觉得对大家学习有帮助的博主会收集好、然后以博主的经验整理分类后排序好分享出来。
(2)第二种是技术性文章与视频,全部放在公众号(网络之路博客)/B站(网络之路Blog)发布,以博主原创为主,主要分享系列为主,由浅入深的带大家了解工作中常用到的一些网络技术,当然也会分享一些比较经典的案例。
(3)分享资源有涉及到您的利益以及版权问题,请联系博主,24小时候内删除。

学习视频系列(总有您想要的)
Book与实验手册(从初级到高级)
数通系列(路由交换 无线、防火墙VPN等)
实战系列(最贴近企业需求的案例)
想第一时间收到最新更新内容吗,点击获取~~~