第一章

一、VPN(virtual private Network,虚拟专用网)的基本概念

  1. VPN连接模式分为两种,分别是传输模式和隧道模式
    1. 传输模式:在整个VPN传输中,ip包头并没有被封装进去
    2. 隧道模式:VPN将整个三层数据报文封装在VPN数据内,再为封装后的数据报文添加新的ip头
  2. VPN的类型
    1. 站点到站点VPN:数据包封装的ip地址一般都是公司内网地址(一般为私有地址),而VPN网关对数据宝进行再次封装过程,客户端是全然不知的
    2. 远程访问VPN:但设备用户与VPN之间的连接通信,远程访问VPN对于安全性要求较高,更用于隧道模式
    3. 要想实现隧道模式的通信,就需要给客户端分配两个ip:
      1. 一个是它自己的nic地址,另一个是内网地址
  3. 加密算法
    1. 对称加密算法:使用同一种密钥对信息提供安全的保护,对称加密就是指,加密和解密使用同一个密钥的加密方式。
      1. 过程:发送方使用密钥将明文数据加密成密文,然后发送出去,接收方收到密文后,使用同一个密钥将密文解密成明文读取。
      2. 优点:加密计算量小、速度块,适合对大量数据进行加密的场景。(记住这个特点,实际使用是会用到的)
      3. 不足
        1. 密钥传输问题:如上所说,由于对称加密的加密和解密使用的是同一个密钥,所以对称加密的安全性就不仅仅取决于加密算法本身的强度,更取决于密钥是否被安全的保管,因此加密者如何把密钥安全的传递到解密者手里,就成了对称加密面临的关键问题。(比
          如,我们客户端肯定不能直接存储对称加密的密钥,因为被反编译之后,密钥就泄露了,数据安全性就得不到保障,所以实际中我们一般都是客户端向服务端请求对称加密的密钥,而且密钥还得用非对称加密加密后再传输。
        2. 密钥管理问题:再者随着密钥数量的增多,密钥的管理问题会逐渐显现出来。比如我们在加密用户的信息时,不可能所有用户都用同一个密钥加密解密吧,这样的话,一旦密钥泄漏,就相当于泄露了所有用户的信息,因此需要为每一个用户单独的生成一个密钥并且管理,这样密钥管理的代价也会非常大。
      4. 常见算法
        1. des:IBM研发的产品,密钥长度64位,其中8位,所以有效长度56位,该方法虽未被破解,但是暴力破解时间相对较短
        2. 3des:NIST(National instiute if Standards and Technology,美国国家标准及结束协会),在1999年研发了3des算法,理论上是des的加强版,使用了三个阶段的des,及同时使用了三个不同的56位密钥,所以相当于产生了168位的有效密钥长度
        3. aes:3des虽然是最安全的,但是随着时代的发展,总会被破解,NIST在2002年研发了aes算法,欲取代3des算法
    2. 非对称加密
      1. 算法原理
        1. A要向B发送信息,A和B都要产生一对用于加密
        2. A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
        3. A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
        4. A将这个消息发给B(已经用B的公钥加密消息)。
        5. B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
      2.  算法优缺点

        1. 优点:安全性高,到目前为止,没有任何一种方式可以在合理的时间范围内攻破该算法
        2. 缺点:效率低
      3. 非对称算法
        1. DH 
          非对称算法的基石 
          仅能用于密钥分配,不能用于加解密数据,一般加密数据用AES 
          密钥长度:512~1024中的64的整数倍 
          双方各有自己的密钥对
        2. RSA 
          最经典的非对称加密算法 
          也可认为是使用最多的非对称加密算法 
          能用于密钥分配,也能用于加解密数据(“私钥加密,公钥解密”和“公钥加密,私钥解密”) 
          密钥长度:512~65536(64的整数倍) 
          只有发送方有一个密钥对,或者更安全的做法是:双发均生成自己的密钥对,但是后边使用密钥对进行加解密时与DH的区别查看前一章 
          可用于数字签名
        3. ElGamal 
          数字签名DSA的基础 
          具体实现方式只有BC有,与RSA的实现方式类似 
          只有“公钥加密,私钥加密”方式(公钥加密实际上安全性不高) 
          密文会成倍扩张
    3. 密钥交换
      1. 在讨论算法时,我们忽略可一个问题:密钥的交换。许多工程师使用对称密钥加密时,都会担心密钥如何实现共享
      2. 密钥交换分为带外共享和带内共享
        1. 带外共享:即通信双方通过一个磁盘、纸、QQ、微信、打电话的共享。这种方法的缺点就是好费时间长
        2. 带内共享:通过ssh、telent等连接方式通过网络传输密钥。这种方法可以提高效率,但是前提是保证传输通道安全,而传输密钥根就是为了建立安全通道,所以这就成了恶性循环
        3. 其实,解决这个方法很简单,可以通过非对称加密算法加密对称加密算法的密钥,再用对称加密算法加密实际要传输数据。
  4. 数据报文验证:
    1. HMAC功能实现
      1. 在VPN领域,对数据进行来源和完整性校验通常借助散列算法实现
      2. HMAC(Hash-based MEssage Authentication Codes,散列消息验证码)功能专门用来处理数据及数据包相关验证问题
      3. HMAC:算法原理等信息可以去看百度百科:https://baike.baidu.com/item/hmac/7307543?fr=aladdin
    2. MD5 和 SHA
      1. MD5(Message-digest Algorithm 5,信息-摘要算法)
      2. SHA(Secure Hash Algorithm,安全散列算法)
  5. IPsec连接三个步骤
    1. 流量触发IPsec
    2. 建立管理连接
      1. OSAKMP/IKE 阶段一:要完成三个任务:①协商采用何种方式连接  ②通过DH算法共享密钥信息  ③对等体之间进行身份验证
        上述的三个任务是通过6个数据包完成的:
        前两个数据包用于协商对等体间的管理连接使用何种安全策略;
        中间两个数据包通过DH算法产生并交换加密算法和HMAC功能所需的密钥;
        最后两个数据包使用预共享密钥等方式执行对等体间的身份验证
        1. 交换ISAKMP/IKE 传输集,它主要包括以下几个方面
          1. 加密算法:des、3des、aes
          2. HMAC功能:MD5 或 SHA-1
          3. 设备验证的类型:预共享密钥
          4. DH密钥组
          5. 管理连接的生存周期
        2. 通过DH算法实现密钥交换
          1. 第一步只是协商管理连接的安全策略,而共享密钥需要通过DH算法实现
          2. DH算法前边已经说过
        3. 实现设备间身份验证
          1. 设备验证时最常用的就是预共享密钥,即在对等体之间通过带外共享的方式共享密钥,并存储在本地设备。
          2. 设备验证通过加密算法或HMAC实现两种方式实现
      2. ISAKMP/IKE:相关命令
        1. 配置安全策略

           R1(config)#crypro isakmp policy priority
          
           crypto isakmp policy用于建立ISAKMP/IKE的管理连接策略,每个策略对应一个序列号(priority)
          
           R1(config-isakmp)#encryption { des | 3des | aes}
          
           encryprion命令用于指定管理连接的租后两个报文(用于身份验证)采用何种加密算法
          
           R1(config-isakmp)#hash { sha | md5 }
          
           hash 指定了验证过程中采用的散列算法
          
           R1(config-isakmp)#authentication { pre-share | rsa-encr | rsa-sig }
          
           authentication 命令指定了设备身份验证的方式
          
           R1(config-isakmp)#group { 1 | 2 | 5 | 14 | 15 | 16 |}
          
           group 命令用于指定DH加密组,模式使用DH1,组号越大,算法越安全,占用资源也越多
          
           R1(config-isakmp)#lifertime seconds
          lifetime 指定管理连接的生命周期,默认值为86400s(24小时) 查看上述配置可以使用 show crypto isakmp policy 查看
        2. 配置预共享密钥
           一、
          R1(config)#crypto isakmp key {0 | 1 } keystring address peer-address { subnet_mask } 0表示密钥为明文,6表示密钥被加密
          keystring:表示密钥的具体内容
          peer-address 表示对端的与之共享密钥的对等体设备地址
          subent_mask 在这里为可选命令,如果没有指定,默认使用255.255.255.255作为掩码 可以使用:show crypto isakmp key 查看 二、为了增强安全性,在iOS12.3(2)t版本中,增加了衣蛾选项用来加密密钥,但是要求对端的iOS支持aes加密,命令如下
          New key: # 输入用于加密的预共享密钥
          Confirm key: # 确认密钥
          R1(config)#password encryption aes 通过 show run 查看到的是密文 通过 no key config-key password-encrypt并不会使配置文件中的密码解密,会导致不可用,所以,使用该命令必须重新为设备指定密钥

          预共享密钥

    3. 建立数据连接
      1. 主要在两个对等体之间建立数据连接,主要完成以下内容
        1. 定义对等体需要保护那种流量
        2. 定义用来保护数据的安全协议
        3. 定义传输集
        4. 定义数据的生命周期及密钥刷新的方式
      2. ISAKMP/IKE阶段二的建立过程
        1. 安全关联:IPSec需要在两个对等体之间建立一条逻辑连接,这就要使用一个被称为安全连接(Security Association,SA)的信令协议。
          SA的连接是在源点和终点之间的单向连接,如果需要双向连接,就需要两个SA连接,每个方向一个,SA由三个要素定义

          •  安全参数索引:用于唯一标示每条SA连接
          • 安全协议类型:AH(Authentication Header,圈圈头协议)和ESP(Encapsulating Secuity Protocol,封装安全载荷协议)
          • 目的的、ip
        2. ISAKMP/IKE阶段二的传输集
          1. 安全协议:AH 协议 ESO协议
          2. 连接模式:隧道模式、传输模式
          3. 加密方式:对于ESP而言,有DES、3DES、AES-128、AES-192、AES-256或不使用加密算法
          4. 验证方式:MD5或SHA1
        3. 安全协议
          1. AH 和 ESP:可以看另一篇文章:https://www.cnblogs.com/-xuan/articles/10311238.html
      3. ISAKMP/IKE 第二阶段的命令配置
        1. 配置Crypto ACL

           R1(config)#access-list access-list-number { deny | permit } protocol source source-wildcard destination-wildcard
        2. 配置传输集
          R1(config)#crypto ipsec transform-set transform_set_name transform1 [transform2] [transfrom3 ]
          
          R1(config)#mode { tunnel | transport }
          
          transfrom_set_name :传输集的名字
          transform1:传输集选项,可以打问号查看所有传输集选项
        3. 配置crypto map
          R1(config)#crypto map map_name seq_num ipsec-isakmp
          
          map_name:Crypto map 的名字
          seq_num:Crypto map的序列号,范围1~65535,数值越小,优先级越高 R1(config-crypto-m)#match address ACL_name_or_num
          match address 命令用于指定Crypto ACL的名称或编号 R1(config-crypto-m)#set peer { hostname | IP_address }
          set peer 用于指定IPSec的对等体设备,即配置的设备应该与谁建立连接 R1(config-crypto-m)#set transform-set transform_set_name1
          set transform-set 命令用户指定传输集的名称,这里最多可以列出六个传输集名称 R1(config-crypto-m)#set pfs [ group1 | group2 | group5 ]
          PFS(Perfect Forword Secrecy,完美转发保密) 保证两个阶段中的密钥只能使用一次,进一步增加了安全性 R1(config-crypto-m)#set security-association lifetime { seconds seconds | kilobytes kilobytes }
          set security-asscociation lifetime 命令用于指定SA的生存周期 R1(config-crypto-m)#set security-association idle-time seconds
          set secutity-accociation idle-time 用于指定空闲超时计时器,范围为60 - 86400s,默认情况是关闭的

 二、IPsec的案例

    1、某公司为了降低人员成本,在中小型城市建立了分公司,但是分支公司上传给总公司的数据一般为软件开发业务数据,如果被盗取,可能会带来不小的影响,管理员提出了以下要求

    1. 分支公司开发项目小组所在网络地址为172.16.10.0/24,该网络的主机可以通过VPN访问总公司的数据服务器(10.10.33.0),但是不能访问internet
    2. 分公司的其他客户端(同属于172.16.0.0/16网段)可以访问telent

      根据上述需求可以看出,网络管理员需要在分支公司的网关路由器上同事配饰VPN和pat

      案例拓扑如图所示

配置步骤:

  1、先给个端口配置ip

  2、R1 和 R2 配置默认路由连接ISP路由器

  3、配置VPN(分公司网关路由器和总公司网关路由器都需要配置)

    ①配置ISAKMP策略

    ②配置crypto 共享密钥

    ③配置Crypto ACL

    ④配置传输集

    ⑤配置加密映射

    ⑥加密映射应用到接口

  4、配置NAT

配置:

第一步配置ip和第二步配置路由不做演示

第三步:配置VPN

  1. 配置策略,R1和R2配置一模一样

     R1(config)#crypto isakmp policy 1
    R1(config-isakmp)#encryption 3des
    R1(config-isakmp)#hash sha
    R1(config-isakmp)#authentication pre-share
    R1(config-isakmp)#group 2
    R1(config-isakmp)#lifetime 10000
  2. 配置共享密钥
    R1
    R1(config)#crypto isakmp key 0 xuan address 200.0.0.1 R2
    R2(config)#crypto isakmp key 0 xuan address 100.0.0.1 其中key 0 为明文
    xuan 为共享密钥
    最后的ip是对方的ip
  3. 配置Crypto ACL
    R1
    R1(config)#access-list 100 permit ip 172.16.10.0 0.0.0.255 10.10.33.0 0.0.0.255 R2
    R2(config)#access-list 100 permit ip 10.10.33.0 0.0.0.255 172.16.10.0 0.0.0.255
  4. 配置传输集
    R1
    R1(config)#crypto ipsec transform-set set-1 esp-des ah-sha-hmac
    R1(cfg-crypto-trans)#mode tunnel
    R1(cfg-crypto-trans)#exit
    R1(config)#crypto ipsec security-association lifetime seconds 1800 R2
    R2(config)#crypto ipsec transform-set set-2 esp-des ah-sha-hmac
    R2(cfg-crypto-trans)#mode tunnel
    R2(cfg-crypto-trans)#exit
    R2(config)#crypto ipsec security-association lifetime seconds 1800
  5. 配置加密映射
    R1
    R1(config)#crypto map map-1 1 ipsec-isakmp
    R1(config-crypto-map)#set peer 200.0.0.1
    R1(config-crypto-map)#set transform-set set-1
    R1(config-crypto-map)#match address 100 R2
    R2(config)#crypto map map-2 1 ipsec-isakmp
    R2(config-crypto-map)#set peer 100.0.0.1
    R2(config-crypto-map)#set transform-set set-2
    R2(config-crypto-map)#match address 100
  6. 接口应用
    R1
    R1(config-crypto-map)#int e 0/1
    R1(config-if)#crypto map map-1 R2
    R2(config-crypto-map)#int e 0/2
    R2(config-if)#crypto map map-2

第四步:配置PAT

  1. 创建转换的ACL

    R1
    R1(config)#access-list 1 deny 172.16.10.0 0.0.0.255
    R1(config)#access-list 1 permit 172.16.0.0 0.0.255.255
    R1(config)#ip nat inside source list 1 interface ethernet 0/1
    R1(config)#int e 0/1
    R1(config-if)#ip nat outside
    R1(config-if)#int e 1/0
    R1(config-if)#ip nat inside

配置完成

现在就可以各种whow 了

  1. show crypto isakmp policy :查看ISAKMP协商策略
  2. show crypto isakmp sa:查看SA的状态
  3. show crypto ipsec transform-set :显示传输集
  4. show crypto ipsec sa:查看sa细节信息
  5. show crypto map:查看加密映射的信息

        

课后案例地址:https://www.cnblogs.com/-xuan/p/10312025.html

第一章:IPsecVPN的更多相关文章

  1. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  2. MyBatis3.2从入门到精通第一章

    第一章一.引言mybatis是一个持久层框架,是apache下的顶级项目.mybatis托管到goolecode下,再后来托管到github下.(百度百科有解释)二.概述mybatis让程序将主要精力 ...

  3. Nova PhoneGap框架 第一章 前言

    Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...

  4. 第一章 MYSQL的架构和历史

    在读第一章的过程中,整理出来了一些重要的概念. 锁粒度  表锁(服务器实现,忽略存储引擎). 行锁(存储引擎实现,服务器没有实现). 事务的ACID概念 原子性(要么全部成功,要么全部回滚). 一致性 ...

  5. 第一章 Java多线程技能

    1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...

  6. 【读书笔记】《编程珠玑》第一章之位向量&位图

    此书的叙述模式是借由一个具体问题来引出的一系列算法,数据结构等等方面的技巧性策略.共分三篇,基础,性能,应用.每篇涵盖数章,章内案例都非常切实棘手,解说也生动有趣. 自个呢也是头一次接触编程技巧类的书 ...

  7. 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介

    前言: 为什么会想到把<JavaScript 高级程序设计(第 3 版)>总结记录呢,之前写过一篇博客,研究的轮播效果,后来又去看了<JavaScript 高级程序设计(第3版)&g ...

  8. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  9. 《Entity Framework 6 Recipes》翻译系列(2) -----第一章 开始使用实体框架之使用介绍

    Visual Studio 我们在Windows平台上开发应用程序使用的工具主要是Visual Studio.这个集成开发环境已经演化了很多年,从一个简单的C++编辑器和编译器到一个高度集成.支持软件 ...

随机推荐

  1. 快速自动安装dart

    @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat Non ...

  2. linux shell的for循环语法是怎样的?

    答:如下: ;i<100;i++)) do echo "i=${i}" done

  3. fw-cloud-framework项目配置、启动问题

    1.config组件:其配置优先级高于每个注册到同一个中心的工程的本地配置,所以在统一以dev这个 profile启动各个项目时,去config中心中找-dev结尾的各个工程名命名的文件. confi ...

  4. 关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset)

    关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset) 2018-01-22  21:49:17 ...

  5. .Net Core之Swagger

    1.项目生成xml 2.添加链接文件,并将属性设值为始终复制 3.添加swagger引用:Swashbuckle.AspNetCore 4.startup.cs配置swargger的xml来源: Co ...

  6. VirtuablBox 出错: VERR_SUPLIB_OWNER_NOT_ROOT 解决方法

    刚刚把 VirtualBox 升级, 从 3.2 到 4.0.4 后,虚拟机上的系统无法运行, 提示: VERR_SUPLIB_OWNER_NOT_ROOT 查了一下,发现是因为 /opt 的 own ...

  7. Wijmo 2017路线图

    2016年是Wijmo团队发展和增长的另一个富有成效的一年.回顾我们2016年的路线图,您可以看到我们交付了我们承诺的一切.让我们回顾一下2016年的亮点: 我们第一个全面支持Angular 2 互操 ...

  8. 中文目录对 sublime text 有什么影响?

    用了这软件好几个月了,一直没出现问题.最近做精简时,发现一个奇怪的问题. 相同的配置,为什么两个程序表现得不一样? 难道是哪里的配置不一样? 难道是插件被我精简得太厉害了? 难道是插件有依赖文件被我删 ...

  9. java根据URL获取HTML内容

    之前我写脚本,是想获取HTML内容的. 但是呢...一方面编码困扰着我,于是我写了这个: java根据URL获取网页编码 然后呢,每个网站是不是GZIP还得判断,贼麻烦... 但是没办法啊,麻烦也得写 ...

  10. 【Ruby】【变量】

    知识点[Ruby 中$开头的全局变量.内部变量.隐藏变量介绍] Ruby 中充满了一系列的隐藏变量,我们可以从这些预定义的全局变量中获取一些有意思的信息. 全局进程变量 $$ 表示当前运行的 ruby ...