ipsec 订阅
[1]  (英语:Internet Protocol Security,缩写为IPsec),是一个协议包,通过对IP协议的分组进行加密和认证来保护IP协议的网络传输协议族(一些相互关联的协议的集合)。 展开全文
[1]  (英语:Internet Protocol Security,缩写为IPsec),是一个协议包,通过对IP协议的分组进行加密和认证来保护IP协议的网络传输协议族(一些相互关联的协议的集合)。
信息
缩    写
IPsec
本    质
开放标准的框架结构
作    用
保障网络安全
中文名
互联网安全协议
学    科
通信工程
外文名
Internet Protocol Security
ipsec简介
互联网安全协议(英语:Internet Protocol Security,缩写为IPsec),是一个协议包,通过对IP协议的分组进行加密和认证来保护IP协议的网络传输协议族(一些相互关联的协议的集合)。 [1]  IPsec主要由以下协议组成:一、认证头(AH),为IP数据报提供无连接数据完整性、消息认证以及防重放攻击保护;二、封装安全载荷(ESP),提供机密性、数据源认证、无连接完整性、防重放和有限的传输流(traffic-flow)机密性;三、安全关联(SA),提供算法和数据包,提供AH、ESP操作所需的参数。
收起全文
精华内容
下载资源
问答
  • IPSec

    千次阅读 多人点赞 2018-12-23 20:51:25
    什么是IPSec? 提到IPSec,我们就不得不先说说IP协议,传统的IP协议未考虑太多安全问题,存在很多安全隐患。比如明文传输,同在一个集线器的通信可以被互相监听,如果获得交换机权限, 所有流经交换机的通信也可以被...

    什么是IPSec?

    提到IPSec,我们就不得不先说说IP协议,传统的IP协议未考虑太多安全问题,存在很多安全隐患。比如明文传输,同在一个集线器的通信可以被互相监听,如果获得交换机权限, 所有流经交换机的通信也可以被监听。攻击者即便没有交换机权限, 也可以通过中间人攻击窃取用户的通信。

    此时,IPSec(Internet Protocol Security)应运而生,IPSec是由IEIF设计的一种端到端的确保IP层通信安全的机制,它不是一个单独的协议,而是一组协议。IPSec是IPv6的组成部分,也是IPv4的可选扩展协议。IPSec包含了三个最重要的协议:认证头AH(Authentication Header),封装安全载荷ESP(Encapsulating Security Payload),密钥交换协议IKE(Internet Key Exchange)。(这些协议均可独立作为加密算法来使用)。IPSec在网络层将每个IP分组的内容先加密在传输,即便中途被截获,攻击者由于缺乏解密数据包所必要的密钥而无法获取其中内容。

    目前IPSec最主要的应用是构造VPN,IPSec作为一个第三层隧道协议实现了VPN的通信,可以为IP网络通信提供透明的安全服务,确保数据的完整性和机密性,有效低于网络攻击。

    IPSec数据加密方式

    CIA 和 prevent Replay-Attack:

    • 数据保密性(Confidentiality):用各种加密手段对数据进行加密,保证攻击者无法破解解密密文。
    • 数据完整性度量(Integrity):保证所收到的数据是完整的,在传输途中没有被恶意增减或篡改。
    • 数据来源认证(Authentication):需要确保数据发送和接收两方的身份,防止攻击者的伪造(例如将数据包接获后将发送地址改成自己的地址)
    • 防止数据回放攻击(Prevent Replay-Attack):攻击者有时候并不(无法)窃取信息,而是进行恶意破环。比如截获交易命令的数据包后,攻击者虽然无法知道里面的具体的内容,但只要他将交易过程的所有数据包重复发送一次就能造成另一次重复的交易,从而使得被攻击者遭受损失。解决方法是:对每一个数据包打上一个唯一的表示,即使鉴别重复的数据包是一种可行的方法。

    传输模式(Transport Mode)、隧道模式(Tunnel Mode):

    • 传输模式下IPsec 保护的仅仅是原始IP 报文的数据内容部分(即 IP 报文的有效载荷),而不是整个原报文。所以,在这个过程中原报文结构被修改。在处理方法上,原IP 报文被拆解,在其有效载荷前面加上新的 ESP 或AH 协议头,再装回原来的IP 地址,形成IPsec 报文。
    • 隧道模式下IPsec 将要发送的原始IP 报文作为数据内容,在这段“数据”前面加上ESP 或AH 协议头,再加上新的IP 头,形成IPsec报文进行传输。 原始IP报文的传输就像在一个安全的隧道中进行一样。在整个传输过程中,原报文保持原有的完整结构,内容没有被修改。

    IPSec - AH协议

    认证头AH协议能够在数据的传送过程中对数据进行完整性度量和来源认证,还可以防止回访攻击。

    AH 协议和ESP 协议相比较具备更强的认证能力,它能保护通信 免受篡改,但没有提供加密能力,因此不能防止被窃听,适合 用于传输非机密数据。AH 协议在被保护的IP 报文上添加一个 称为认证报头的数据项,其中包含一个带密钥的对该IP 报文计 算的Hash 值。对IP 报文内容的任何更改将致使该值无效,从 而提供了数据完整性保护。

    AH 结构由IP 协议号51标识,AH 的封装结构随着所采用的传输 模式和隧道模式并不相同。

    AH 可以单独使用,也可以与ESP 协议结合使用。

    IPSec - ESP协议

    ESP封装安全载荷协议能够在数据的传输过程中对数据进行完整性度量和来源认证,可以选择加密,也可以选择防止回放保护。

    ESP 服务依据建立的SA (Security Association, 安全关联),对可选项目有所限制:

    • 完整性检查和认证一起进行;
    • 仅当与完整性检查和认证一起时才能选择防止回放保护;
    • 防止回放保护只能由接收方选择。

    ESP 的加密服务是可选的,但如果启用加密,则也就同时选择了完整性检查和认证。因为如果仅使用加密,入侵者可能发动密码分析攻击。

    ESP 结构由IP 协议号50标识,ESP 的封装结构随着所采用的传输模式和隧道模式并不相同。

    IPSec - IKE协议

    IPSec 的通信双方需要事先协商好将要采用的安全策略,包括使用的加密算法、密钥、密钥的生存期等,亦即创建SA。AH 和ESP 都需 要使用SA,而IKE的主要功能就是SA的建立和维护。

    IPsec 使用IKE (Internet Key Exchange) 协议来进行自动的密钥管理。 IKE 实际上是一个混合协议,它包含:

    • ISAKMP:IKE 协议的主要组成部分,它负责指定密钥的协商过程。ISAKMP 协议只是一个框架,并未规定具体使用的加密算法;
    • Oakley:Oakley 和SKEME 协议可以理解为加密算法的具体规定。
    • SKEME:Oakley 和SKEME 协议可以理解为加密算法的具体规定。
    展开全文
  • 它在通知区域提供了一个系统托盘图标,非特权用户可以从中建立和关闭 L2TP over IPsec VPN 连接。 还有一个“编辑连接”菜单项。 为了打开编辑器对话框,非特权用户必须以 root 身份进行身份验证。 用户可以从那里...
  • strongSwan是基于IPsec的开源VPN解决方案。 本文只是对StrongSwan swanctl命令的简短介绍,该命令使用了现代的 Versatile IKE配置界面。 描述使用旧笔画配置界面的不推荐使用的ipsec命令。 有关更多详细信息,请...
  • Ipsec安全策略 方法:设置安全策略。采用window的IPSec进行防护。允许80 3306端口。拒绝所有其他端口连接。 1:控制面板-系统和安全-管理工具-本地安全策略 打开本地安全策略。默认是没有的。这里我已经添加一个...
  • IPsec出口商 Prometheus出口商的ipsec指标,用Go编写。 功能性 IPsec导出器通过以下过程确定已配置IPsec隧道的状态。 读取启动ipsec.conf 。 观察通过conn关键字配置的所有隧道。 如果查询/metrics端点,则导出器...
  • IPSec是一组基于网络层的,应用密码学的安全通信协议族,这篇文章主要介绍了阿里云 ubuntu16.04搭建IPSec服务,需要的朋友可以参考下
  • iPsec搭建使用

    2018-12-13 10:32:40
    主要讲的是IPsec的搭建,非常详细,图解配文字,一般人都看得懂吧
  • 该文档主要用来介绍IPsec是模块中pluto的框架、基本原理简介、函数调用关系、主要函数接口说明。例如包含:主模式和野蛮模式报文交互流程和函数接口、IKE协商、内核函数接口等
  • IPsec

    2019-10-14 13:58:45
    GRE没有去往对端公网IP路由 keepalive只支持GRE,不支持...ipsec只支持ipv4单播 VPN:企业级别,不需要花钱 MPLS VPN :运营商级别,需要花钱 telnet抓包可以看到访问者对自己做的所有操作 对称:私钥算法,加密和解...
    1. GRE没有去往对端公网IP路由
    2. keepalive只支持GRE,不支持MGRE,默认10s发一个
    3. logging monitor
    4. terminal monitor(永不保存)
    5. logging console随手打上日志
    6. ipsec只支持ipv4单播

    VPN:企业级别,不需要花钱
    MPLS VPN :运营商级别,需要花钱

    telnet抓包可以看到访问者对自己做的所有操作
    对称:私钥算法,加密和解密都是使用这个密钥,一旦丢了,数据不安全,3次DES算法,加密大量数据很快
    非对称:公钥算法,生成公钥和私钥,公钥加密,私钥课解开,私钥加密,只能成对的公钥解开rsa(缺点慢)
    作用:给数字证书加密

    对称加密算法:
    des:40bit
    3des:168bit
    aes:128bit

    非对称算法:
    迪福赫尔曼算法:生成密钥(group1(768bit),group2(1024bit),group5)
    RSA:不可逆
    hash:不能反运算,防止:将data+对称密钥用hash加密,对端也将收到data+对称密钥hash比较(md5,SHA)

    1. A使用对称加密生产key

    2. Akey+data算法生成数据

    3. B使用key解密

    4. (问题)A怎么将key传递B?

    5. B用非对称加密生成publickey和privatekey

    6. B将publickey传给A(黑客也会得到publickey)

    7. A将publickey加密key后发给B(黑客回截到加密后数据,但是没有publickey无法解开)

    8. B用privatekey解密得到key

    9. 此时用key加密数据data发送就算被截获也不会被解开

    10. (问题)黑客虽不能解开但是可以串改数据

    • 哈希校验和防串改
    • 如果B发送数据给A借钱,过后不认账?

    1. B将data+对称密钥哈希后通过privatekey加密,生成signature
    2. 将data+signature通过key加密送给A
    3. A通过key解密,再通过publickey解密得到哈希后data
    4. 再将data哈希得到的值和data对比
      在这里插入图片描述

    • 如果黑客模拟B生成publickey和privatekey给A发数据?

    1. 找到公安局用B的publickey用公安局privatekey生成数字证书
    2. B发送数据时带着signature和证书
    3. A拿着证书去公安局请求用公安局publickey解开得到B的publickey
    4. 看从公安局拿到的publickey能否解开signature
    5. 若能解开证明是B没错,再看哈希后的数据对比是否被篡改
    6. RA作为代理帮助收集用户公钥和所有信息发给CA,CA生成证书
      在这里插入图片描述
      在这里插入图片描述

    https数字签名+公安局证书,防止第三者将公钥,私钥串改
    • 哈希算法,校验和
    • 数字签名,确认是bob发的
    • 数字证书,到公安局确认bob身份
    • key加密
    • 随机数短信

    • 防止重放攻击:随机数避免,即使密码一样,但是随机数还是原来的(可能被截获)也不会认证通过

    1. 客户端向server发送request请求认证
    2. server回复随机数
    3. 客户端用认证密码+key+随机数生成的内容发给server
    4. (黑客)截获3生成的内容,发给server
    5. server用key解开得到认证密码和随机数,发现随机数还是上次的,验证不通过

    VPN:隧道+安全,GRE隧道是明文传输的

    IPSec:框架,里面的组件可以实现安全,
    • 安全联盟SA=规则(2条):IKESA和ipsec SA,需要手动输入
    • SA生存周期(类似更改密码保证安全)
    默认在到期之前隐含建一条,以在续期后平滑过度
    生存周期长,越不安全,节省资源
    生存时间越短,越安全,消耗资源
    • 转换集:算法保证安全
    • 感兴趣流:定义哪些数据需要被保护
    • 安全策略:真正应用的安全策略

    组件(协议):2个SA
    1. IKE:保证密钥交换安全,混合协议(UDT,source-port:500,destination-port:500)
    v1:理论复杂,配置简单
    v2:理论简单,配置复杂
    2. ESP:保证数据安全,一种封装方式(50)3des
    优点:加密,公安局,哈希
    3. AH:认证头,一种封装方式,不能保证安全(IP之上51)
    缺点:未对数据进行加密

    IKE有3种认证:pre-share,RSA,

    两种工作mode
    1. 传输:无法形成vpn,封装ipsec头部(50,51可选)没有隧道(没有类似GRE头封装)
    2. 隧道:自带隧道,IPsec保证安全=vpn,不能启协议
    在这里插入图片描述

    在这里插入图片描述

    认证:签名
    密钥算法:赫尔曼
    hash算法
    对称算法

    1. phase1:上述4个,密钥认证,主模式:l2l,积极模式:reemote-access
    会将所有policy发送过来,选择一个进行认证
    2. 发送密钥材料:DH算法生成公共值+pre-key,相互发随机数,生成密钥
    3. pre身份认证(key老地方)
    
    • 触发协商phase1:只有感兴趣流经过时acl(ping)
    • ping会丢一个包,不是因为ARP而是因为需要协商
    
    clear crypto isakmp(1)清理第一阶段SA,不会重新协商,第2条SA仍在,不会丢包
    

    (第一阶段配置错误修改过来后,仍不通,因为没有触发协商,只有clear session后,才会重新触发协商 )
    • clear crypto session(local 12.1.1.1 remote 23.1.1.3)清理第2阶段SA,会丢包因为感兴趣流触发协商

    1. 开启isakmp:crypto isakmp enable
    2. 开启策略(越小越优先):crypto isakmp policy 1(可配置多条,优先级最高的生效,当地一条协商失败,会继续找后续SA)
    3. 封装esp算法:encryption 3des
    4. 哈希算法:hash md5
    5. 签名:authentication pre-share(以上仅保证数据安全)(pre-share两个人约定老地方见,结果一个人没出现,证明此人不是A)
    6. key安全算法:group 2
    7. SA寿命:life-time 86400(默认一天)
    8. 配置pre-share密钥:crypto isakmp key cisco address 目的公网IP(key是pre-share约定的老地方,目的IP代表只有该IP地址给我提供的key值和我的key值一样我才认)不支持vrf(phase3)
    

    到此第一条SA相关配置完毕,保证密钥安全(isakmp=ike)
    第2条SA保证数据安全(转换集)

    1. ACL把要保护的数据抓取,也叫感兴趣流 允许两个私网IP抓取(不允许用any)
    ip access-list extended ccie 
    permit ip 源私网IP 目的私网IP
    2. 转换集:crypto ipsec transform-set ccie2 esp-3des esp-md5-hmac
    3. 修改模式:mode transport(可以不写,默认就是隧道模式)
    4. 静态安全策略:crypto map gou 1 ipsec-isakmp(此处的号跟policy的1没有任何关系)
    5. 指定策略要保护的流量:match address ccie
    6. 设置转换集:set transform-set ccie2
    7. 设置邻居:set peer 23.1.1.3(公网IP)
    

    调用策略
    (接口下)encrypto map gou(策略名两端可以不一样)
    在这里插入图片描述

    #####动态VPN######################自在hub上配置一次即可,spoke上配值多次,建一个分布就需要加配置

    动态l2l:hub有固定IP
    (hub不需要感兴趣流)

    • 定义标识符:
    r1(config)#crypto keyring ccna
    r1(conf-keyring)#pre-shared-key address 0.0.0.0 0.0.0.0 key 123

    • 引入第一阶段配置文件:
    

    r1(config)#crypto isakmp profile ccnp
    r1(conf-isa-prof)#keyring ccna
    r1(conf-isa-prof)#match identity address 0.0.0.0(谁都可以跟我协商)

    • 动态map:
    

    r1(config)#crypto dynamic-map cisco 1
    r1(config-crypto-map)#set isakmp-profile ccnp
    r1(config-crypto-map)#set transform-set ccie
    • 关联
    r1(config)#crypto map l2l 1 ipsec-isakmp dynamic cisco(静态不能直接调用第一阶段profile)

    (接口下)crypto map l2l

    ###########此时在接口下配置######################

    第2阶段配置文件:
    crypto ipsec profile ccie
    set isakmp-profile ccnp(引入第一阶段配置文件)
    set transform ccie

    tunnel口下调用:
    (接口)tunnel protection ipsec profile l2l

    • 此时从总部无法ping其他分部,因为没有感兴趣流,只有分布主动发起感兴趣流激活才能协商
    • 如果分部有多个网段仍需要写多条感兴趣流,因为tunnel vpn只支持单播,不能运行IGP协议,所以需要借助GRE
    

    DMVPN :分部之间可以自己建隧道

    EIGRP:单播,组播
    BMA:有几个点只发一份,NBMA:有几个点发几份,不具备广播功能
    MGRE:类似NBMA,总比和分布在一个网段
    hub端 p2mp默认hello是30s,维护数据库,记录spoke的公网IP地址
    NHRP:一分部向总部发送,解析到另一分部公网IP地址,实现两个分部建隧道,当有流量触发
    每个spoke在启动时,将自己的IP地址注册在hub

    hub
    int tunnel 1
    ip add 1.1.1.1 255.255.255.0
    mode gre multiple

    ip nhrp network-id 1(进程号)
    ip nhrp map multicast dynamic(动态获取spoke端IP地址)

    EIGRP
    两个分布直接建立隧道:no ip next-hop-self eigrp 100

    下一跳问题
    在hub端:ip nhrp redirect
    在spoke端:ip nhrp shortcut

    OSPF
    hub默认是点到点,需要改成10s建邻居
    ip ospf network p-2-mp
    ip hello-interval 10

    (查看nhrp表)show ip nhrp br
    • ospf无法建立邻居,因为时nbma网络,不是广播,无法发hello包
    • EIGRP有水平分割问题:no ip split-horizon eigrp 100

    spoke
    tunnel source e0/0
    ip address 1.1.1.2 255.255.255.0
    mode gre multipoint

    ip nhrp network-id 1
    ip nhrp map 1.1.1.1 15.1.1.1(手动写一条映射告诉hub)
    ip nhrp nhs 1.1.1.1(去服务器注册)
    ip nhrp map multicast 15.1.1.1(承载组播报文)

    //tunnel key 12345
    // ip nhrp authentication cisco

    hub:
    在这里插入图片描述

    spoke:
    在这里插入图片描述

    展开全文
  • wireshark1.12和IPSec详解

    2019-03-13 19:22:09
    内含低版本wirshark(1.12wendows server 2003可用),以及点对点搭建IPSec教程详解(网上搜集之后整理)
  • IPSec协议详细介绍.ppt

    2019-08-09 14:50:01
    IPSec协议原理详细介绍,很经典的教材
  • IPsec密码学评估

    2018-11-09 17:16:56
    是一个非常难得的资料,讲述了IPsec的AH的非必要性,传输模式的非必要性,加密算法缺陷等等;这篇文章可以说是把IPsec怒怼了一把
  • ipsec内核实现分析

    2018-07-04 14:55:33
    linux的ipsec内核实现源码分析,本人的源码阅读笔记,主要讲解了xfrm模块的实现和源码流程,有需要的可以下载参考
  • IPSec是一个安全协议组,他可以为我们数据传输提供私密性(加密)、完整性校验(Hash)、源认证(Hmac或者数字签名技术)。IPSec 工作的时候会用到IKE(互联网密钥交换)协议,IKE有两个版本,目前版本1和版本2都被...
  • openwrt-luci-vpnd openwrt-luci-vpnd
  • ipsec 它工作在网络层,可以直接对路由器上的ip数据包进行加密Ipsec的主要目标:为IPV4和IPV6提供具有较强的互操作能力
  • 利用IPSec安全协议完成网络数据传输通信数据检测,分析了IPSec安全协议中的AH协议和ESP协议,使用不同的安全策略分布密钥,建立双向通讯流,并根据安全关联终点数量构建出3种嵌套隧道通信传输检测扩展方式,利用DBN...
  • ensp配置虚拟隧道接口建立GRE over IPSec隧道示例
  • 实验七 Window 7系统中IPSec协议配置及数据包分析 一实验目的 本实验主要验证IP通信在建立IPSec传输模式和隧道模式前后的变化为了简化实验过程这里只对ICMP进行加密但在配置的过程中即可发现其他IP协议要进行同样的...
  • 深信服IPSEC-WOC考试初级B-80分
  • IPSec简介

    千次阅读 2018-06-10 11:53:39
    优点: 1.在网络层进行安全加密,便于公司和公司的信息传输的加密构建VPN 2.密钥协商的开销减少,只需要在公司出口的路由器上配置即可,不...IPSec 体系结构 有两个安全协议ESP协议和AH协议,在协议中涉及...

    优点:
    1.在网络层进行安全加密,便于公司和公司的信息传输的加密构建VPN
    2.密钥协商的开销减少,只需要在公司出口的路由器上配置即可,不需要每个用户都做协商。
    3.需要改动的应用程序很少,

    缺点:
    很难解决“抗抵赖”之类的问题。(A冒充B给对端发送数据)

    IPv4 的头

    IPSec 体系结构

    这里写图片描述

    有两个安全协议ESP协议和AH协议,在协议中涉及到加密算法和鉴别算法,在算法中涉及到密钥问题,故有密钥管理。IPsec 支持不同 的用户使用不同的策略。

    IPSec 安全协议

    AH:authentication Header 验证头部

    • 为IP包,提供数据完整性校验和身份认证功能
    • 验证算法由SA指定。
    • 认证的范围是整个包

    完整性校验算法:MD5、SHA
    身份认证:证书、签名、域共享的密码、

    ESP:encapsulation security payload 封装安全负载

    • 提供机密性、数据源验证、抗重播以及数据完整性等安全服务
    • 加密算法和身份验证方法有SA指定。

    机密性:数据加密算法:(MD5、RSA、DES)

    IPSec 加密算法

    IPSec 密钥管理

    SA:security association 安全联盟

    • 确保通信双方的密钥和算法一致

    ISAKMP:定义了密钥管理框架
    IKE 是目前正式确定用于IPsec的密钥交换协议(可以看做是ISAKMP的高版本)

    两种模式

    两种模式:传输模式和隧道模式

    这里写图片描述

    简介:

    1. 原始的IP包,是由低层封装高层。
    2. 传输模式封装原始的IP包,是在原始的IP报文中新增加了一个IPsec的头,并对tcp头、数据做加密处理。
    3. 使用隧道模式封装原始的IP包,是将原始的IP包整体作为需要加密的有效数据部分,直接在外面增加IPsec头,在最外面增加外部IP头。

    AH头格式:

    这里写图片描述
    SPI:security parameter index 安全参数索引
    标识此包使用的算法、密钥进行加密处理。
    sequence number:序列号
    authentication data(variable):可变长度的数据验证

    封装后的具体的包格式,IPsec的封装部分就是AH的封装部分。

    这里写图片描述

    这里写图片描述

    AH的处理过程

    对于发送出的包的处理构造AH

    • 创建一个外出SA(手工或通过IKE)
    • 产生序列号 填充AH头的各字段 计算ICV(integrity check value
      完整性检验值)内容包含:ip头中部分域、AH自身、上层协议数据。
      AH头中的“下一头部”置为原IP报头中的“协议”字段的值,原IP包头的“协议字段置为51(代表AH)”

    对于接收到的包的处理

    • 分片装配 ,在不同的设备上mtu值不同,需要对接受到的数据分片装配
    • 查找SA ,确定加密的算法和相关的密钥信息。 依据:目标IP地址、AH协议、SPI
    • 检查序列号 ,看包是否存在重复出现
    • ICV检查,完整性检查

    ESP协议

    这里写图片描述

    SPI:security parameter index 安全参数索引
    标识此包使用的算法、密钥进行加密处理。
    sequence number:序列号
    payload Data(variable):可变数据的负载部分
    authentication data(variable):可变长度的数据验证
    padding(0-255bytes):填充数据部分
    Pad length:填充信息的长度
    Next Header:下一个头部信息

    这里写图片描述

    这里写图片描述

    ESP协议的处理

    对于发送出去的包的处理

    • 查找SA
    • 加密
    • 封装必要的数据,放到payload data 域中,不同的模式,封装数据的范围不同
    • 增加必要的padding数据 加密操作
    • 验证
    • 计算ICV,注意,针对加密后的数据进行计算。

    对于接收到的包(inbound Packet)的处理:

    • 分片装配
    • 查找SA,依据:目标IP地址、ESP协议、SPI
    • 检查序列号(可选、针对重放攻击) 使用一个滑动窗口来检查序列号的重放
    • ICV检查
      根据SA中指定的算法和密钥、参数,对于被加密部分的数据进行解密
      去掉padding
      重构原始的IP包

    安全联盟SA

    • SA是单向的(任何人根据SA的信息是无法逆推出,加密算法、密钥、鉴别算法)
    • SA是“协议相关”的。AH、ESP不同的协议对应和SA也不同
    • 每个SA通过三个参数来标志[SPI、dst(src)、protocol]
      安全参数索引SPI(security Parameters index):密码密钥的标号
      对方IP地址
      安全协议标识AH or ESP
    • SA 与IPsec 系统中实现的两个数据库有关
      安全策略数据库(SPD)
      安全关联数据库(SAD)

      密码和密钥放在这两个数据库中,数据库只有双方知道其他人不知道,在调用的时候通过标号来调用。

    R1和R2需要建立IPsec连接,

    1. 收发双方需要协商的方式确立安全策略数据库,安全策略中需要指定的身份认证的方法(证书或者是域共享密码),实现IPsec的过程中,既使用AH协议有用ESP协议,确定协议的切换时间,加密的方式是DES,以及切换加密协议的时间。

    2. 确立算法和密钥的数据库,

    Internet 密钥交换协议-IKE

    IKE协议

    • RFC2409 ,是0akley和SKEME协议的一种混合
    • 基于ISAKMP框架
    • 沿用0akley和SKEME的共享和密钥更新技术

    SAKMP:I Internet security association and key management protocol

    • RFC 2408
    • 定义如何检验安全联盟并初始化密钥

    两个阶段的交换

    第一阶段:建立ISAKMP SA —— IKE SA

    • 双方(例如ISAKMP servers)商定如何保护以后的通讯,通信双方建立一个已经通过身份鉴别和安全保护的通道
    • 此SA将用于保护后面的protocol SA的协商过程。

    第二阶段:建立起针对其他安全协议的SA —— IPsec SA

    • 这个阶段可以建立多个SA
    • 此SA将被相应的安全协议用于保护数据或者消息的交换。

    IPsec - VPN

    IP安全协议:AH、ESP
    数据加密标准: DES,3DES
    公共密钥密码协议:Diffie-Hellman(DH)
    散列算法(完整性):MD5,SHA-1
    公钥加密算法:RSA
    Internet密钥交换:IKE
    证书授权中心:CA

    展开全文
  • ipsec

    2018-11-13 15:06:00
    ipsec 早在2005年,为解决国内办公室访问香港邮件服务器时连接被随机中断而产生大量重复邮件的问题,我们在香港IDC机房的NetScreen防火墙上部署了IPsec VPN服务器,国内员工电脑上安装VPN客户端软件...

    ipsec

    早在2005年,为解决国内办公室访问香港邮件服务器时连接被随机中断而产生大量重复邮件的问题,我们在香港IDC机房的NetScreen防火墙上部署了IPsec VPN服务器,国内员工电脑上安装VPN客户端软件,在发送邮件前先VPN拨号,虽然麻烦,但成功解决了问题。

    到了2007年,公司在Nasdaq上市,按照SOX法案要求,必须加强全球各办公室、机房的IT架构安全,我们将网络设备全部升级为Cisco的产品。当然,我最感兴趣的是Cisco的防火墙产品,它有一套完整的IPsec VPN解决方案。当时我们采用的是ASA5520,构建site to site VPN,将各个办公室和机房的内网打通,并统一部署微软的AD森林,IT基础服务非常稳定,各方面都很满意。而最受员工好评的就是,在办公室里上网可以无阻碍地访问国外网站,并无需事前做任何动作,只因为我们将流量做了分流,访问国内的走国内线路,访问国外的走VPN加密通道从香港出去。同样的,对于移动办公人员,给他们安装Cisco System VPN Client来拨号访问香港的VPN服务器。

    期间,还有在美国的朋友要看中国网上直播的奥运节目,在香港的朋友要看内地网上点播的连续剧,而有些节目不对境外IP开放。办法当然是在国内架设远程访问VPN服务器。

    这就是一个标准的围城格局。

    皆大欢喜的背后是高昂的成本,众所周知,思科产品相当的贵。

    那有没有廉价的解决方案呢?当然有,还有不少呢,这得感谢软件开源项目,技术先进,功能强大,还不用花钱。

    今年春节前,公司为接收美国节点的数据做大数据分析,购置了IBM旗下Softlayer香港节点的云服务器,这给我测试Linux下的开源VPN软件提供了合适的资源条件,于是我开始寻找合适的开源VPN软件。

    先看看常用VPN协议有哪些?

    参考:维基百科 - 虚拟专用网

    常用的虚拟专用网协议有:

    • L2F
    • L2TP
    • PPTP
    • IPsec (如Cisco IPSec VPN)
    • SSL VPN
    • AnyConnect(Cisco SSL VPN)
    • OpenVPN
    • SoftEther


    各协议的优缺点就不说了,有兴趣可以自己去查,这里我只关注IPsec。

    基于IPsec的VPN通道其实包含以下两个部分:

    • IKE协议(互联网密钥交换协议): 两个系统端使用IKE协议来互相验证,并协商建立IPsec通道所需的特定加密参数和两端特定的网段。
    • IPsec协议(IP安全协议):使用特定加密参数对特定数据进行加密传输,通常由操作系统内核实现,目前基本上所有主流操作系统都支持IPsec协议。


    用白话说就是,IKE负责连接双方的身份验证,双方协商得出的密码和使用的加密算法都告知给操作系统,操作系统对两边网段之间的流量数据进行加密传输。

    既然数据加密传输的活都给操作系统来干了,操作系统我们也没什么好选的,能选的就只有实现IKE协议的软件了。

    IKE的版本发展:
    1988年11月,互联网工程任务组在一系列的RFC文件中,定义了这个协议,其中包括了 RFC 2407,RFC 2408 以及 RFC 2409。
    2005年以后,IKE版本升级到了IKEv2版本,RFC文件有所更新,其中包括 RFC 4306, RFC 4718,RFC 5996 以及 RFC 7296。

    IKEv2的主要改进:

    • 更精简的RFC标准化文档
    • 对移动设备更好的支持
    • 全面支持NAT穿越和SCTP协议
    • 简化的信息交换机制
    • 增强的可靠性和状态管理
    • 更好的防范DoS攻击机制



    参考 - 维基百科 - IKEv2的实现

    如下为当前可用的IKEv2开源实现:

    • OpenIKEv2,
    • strongSwan,
    • Openswan,
    • IKEv2,
    • Racoon and Racoon2 from the KAME project,
    • iked from the OpenBSD project.,
    • Libreswan,
    • Rockhopper VPN Software


    名单的有些软件已经很久不更新了。

    而稍微留心一下这个名单,会发现有个字眼很显眼,很明显就是天鹅swan家族:strongSwan, Openswan, Libreswan。

    它们其实有一个共同的鼻祖:FreeS/WAN开源项目,历史还真是悠久,为了厘清脉络,我特别做了一些翻译和编辑工作。

    参考 - Libreswan官网 - 历史

    FreeS/WAN时代(1996 - 2004)
    1996年John Gilmore和Hugh Daniel创建FreeS/WAN开源项目,致力于开发用于互联网加密的IPsec和DNS标准,愿景是以每年5%的速度推进流量加密,直到整个互联网全部使用加密通讯。FreeS/WAN项目通常有5个付费人员来开发代码,所有费用由Gilmore支付。

    那个时候,加密并不普遍,用于实施加密的免费软件也非常少见。OpenSSL的前身SSLeay也刚刚被开发出来用于web服务器和客户端之间的加密通讯。虽然美国政府与民间组织之间有关隐私的争论已经如火如荼,大多数人并没有深入思考美国政府对网络通讯的侦听和监视。Freeswan软件的目标就是在美国政府以国家安全为由出台法律禁止公众加密之前,广泛普及随机加密技术(Opportunistic Encryption,OE)使加密无处不在。为防止美国政府根据国家安全法案对freeswan的所有者提起控诉,Gilmore要求美国公民包括他本人都不得为freeswan编写代码。这个限制造成了很多不良后果,因为它阻止了freeswan代码被合并进Linux内核,因此使得部署freeswan变得更加困难。

    同时,各公司对于在互联网上建立安全连接和VPN的强烈需求,极大地推动了可用的加密标准的开发,为满足不同公司的各种加密需求,各种实现方式的IPsec标准也应运而生。

    现在大家所知的IPsec标准套件,是来自于国际互联网工程任务组(IETF)的标准,包含了许多标准文档来实现用于验证的互联网密钥交换(IKE)协议和用于传输加密数据的IPsec协议。大量的加密和验证算法被支持和标准化。然而,并没有采用随机加密(OE)机制。同时,因为一些技术障碍造成的部署困难,使得DNS的安全版本也一度被延迟了好多年。2010年7月15日DNS根区(root zone)最终获准使用DNSSEC,这已经是延迟十年之后的事情了。这期间,freeswan的DNSSEC并未被采用,
    因为IETF声明只有DNS自己可以使用DNSSEC KEY记录(现在改名为DNSKEY记录),这意味着freeswan不得不重回过去糟糕的文本记录格式。在2005年IPsec也引入了它自己的DNS记录类型IPSECKEY,但是需要耗费很多年的努力来部署新DNS软件来实际支持这个新记录类型。另外,最终用户也不希望访问他们的反向DNS区来发布OE IPsec需要的公钥。

    freeswan也始终没有被Linux内核采用过,一部分原因是Gilmore强制非美国代码的规则,更大的原因在于与负责网络和加密的Linux内核开发人员疏于协作。
    尽管freeswan团队多年一直参与Linux研讨会和内核顶层决策会议,Linux开发团队依然沿着他们自己的开发路径,最终只是推出了一些并没有获得广泛支持的加密子系统。结果导致了两个团队花费多年时间来努力维护两个互相竞争的内核IPsec协议栈,KLIPS和NETKEY,直到今日也没有人将这两个协议栈的优点统一整合起来。

    一般来说,公众似乎并不太关心政府的侦听,哪怕在Nikcy Hager揭示以美国为中心的情报收集分析网络梯队系统(Echelon)的时候,也没有引起公众对部署加密通讯的足够重视。从90年代到21世纪初,并没有太多的人认为不加密的互联网是个真实的问题,直到2013年6月斯诺登(Edward Snowden)在香港将美国国家安全局关于棱镜计划监听项目的秘密文档披露给英国《卫报》和美国《华盛顿邮报》的时候,这已经是Gilmore放弃用freeswan对整个互联网加密的企图整整十年之后了。

    从FreeS/WAN到Openswan(2004 - 2012)
    虽然很多商业公司已经在使用freeswan作为它们密钥协作性测试的工具之一,Gilmore和他的开发团队之间的矛盾却与日俱增。Andreas Steffen(strongSwan项目的维护者)编写了大量补丁使freeswan能够支持X.509数字证书标准,但Gilmore拒绝将其并入freeswan。Mathieu Lafon编写的另一个商用VPN的基本功能NAT-Traversal支持代码,也被Gilmore拒绝。freeswan的志愿者Ken Bantoft,维护了一个包含上述补丁的freeswan的版本,并将之命名为超级freeswan。然而,Gilmore看到这个名字并不高兴,因为他不想那些杂七杂八的互联网技术和freeswan这个名字有任何瓜葛。

    2003年7月,Gilmore和另一位积极的freeswan志愿者Paul Wouters在柏林附近召开的Chaos Communication Camp会议上碰面。他们想出了一个办法,在没有Gilmore提供赞助的条件下使用freeswan继续对IPsec进行开发。Wouters和其他志愿者将freeswan代码复制出一个分支,同时Gilmore将商业VPN开发相关的大块代码剔除后构建新的freeswan发布版本。Wouters的这个软件分支,被起名为openswan,源于freebsd/openbsd的命名历史,这个名字就这么叫开了。

    Gilmore在发布了2个移除了VPN代码的freeswan版本后,就在2004年3月1日,著名的开源网络安全项目 FreeS/WAN 宣布停止开发,其原因主要是开发者的意图和用户的需求不吻合。对于网络安全系统,用户更多考虑的是系统功能的完整、强大,而不是它可预知的先进性,因此,FreeS/WAN 新版本中主打推出的 Opportunistic Encryption (OE) - 随机加密没有吸引到足够数量的用户测试。鉴于此,投资者停止了对 FreeS/WAN 项目的资助,FreeS/WAN从此淡出江湖。

    总的来说,Openswan项目将注意力从随机加密(OE)技术转向VPN技术。4个Openswan志愿者创立了Xelerance公司来提供对Openswan的商业支持,盈利被用来对Openswan继续开发。由于不再有Gilmore强加于freeswan的限制这样的障碍,脱胎于freeswan的Openswan代码,被广泛采用并被整合进主要的Linux发行版中,例如RHEL,Debian和SuSe Linux。很多企业级特性被加入,像Xauth和SAref,在企业环境中Openswan如鱼得水。但这种状况本身造成了Xelerance公司收入锐减,因为企业用户大多使用RHEL,很自然付费给Red Hat来提供商业支持,而IPsec和IKE运行得足够好以致于用户基本上没有对新特性的开发要求,或者他们宁愿等待别人来付费或开发新功能。因此,虽然Xelerance公司此时仍然对Openswan项目提供赞助,但公司的运营方向已经发生了改变。一个又一个原始创始者离开了公司,Wouters是在2011年12月最后一个离开的,他的离开引发了Openswan项目团队和Xelerance公司之间关于Openswan商标所有权的争执,引发了法律诉讼。而当免费软件开发者被公司提起诉讼时,比较经济和简单的办法就是走人并给软件改名,Libreswan就这样诞生了。

    参考 - strongSwan官方文档 - The strongSwan Open Source VPN Solution



    可以看到strongSwan其实是和Openswan并列的两个开源项目,strongSwan更早就对IKEv2提供了完整支持,就选它了。

    安装strongSwan

    先升级操作系统CentOS至最新版本,我这里比较喜欢用CentOS 6.x的版本。

    1. yum -y update
    复制代码

    升级完后需要reboot重启服务器。

    查看CentOS版本号

    1. uname -a
    2. Linux slhk 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
    复制代码


    查看SELinux状态

    1. [root@slhk ~]# sestatus 
    2. SELinux status: disabled
    复制代码

    如果SELinux没有被禁用,需禁用之,并重启服务器

    查看当前网卡配置

    1. [root@slhk ~]# ifconfig
    2. eth0      Link encap:Ethernet  HWaddr 06:3C:1D:E3:9C:46  
    3.           inet addr:10.110.71.123  Bcast:10.110.71.127  Mask:255.255.255.192
    4.           inet6 addr: fe80::43c:1dff:fee3:9c46/64 Scope:Link
    5.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    6.           RX packets:88318851 errors:0 dropped:0 overruns:0 frame:0
    7.           TX packets:25328422 errors:0 dropped:0 overruns:0 carrier:0
    8.           collisions:0 txqueuelen:1000 
    9.           RX bytes:110102171108 (102.5 GiB)  TX bytes:2571529525 (2.3 GiB)
    10.           Interrupt:246 
    11. eth1      Link encap:Ethernet  HWaddr 06:F8:19:A1:0C:27  
    12.           inet addr:119.81.236.70  Bcast:119.81.236.71  Mask:255.255.255.248
    13.           inet6 addr: fe80::4f8:19ff:fea1:c27/64 Scope:Link
    14.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    15.           RX packets:15095342 errors:0 dropped:0 overruns:0 frame:0
    16.           TX packets:17748377 errors:0 dropped:0 overruns:0 carrier:0
    17.           collisions:0 txqueuelen:1000 
    18.           RX bytes:1133594452 (1.0 GiB)  TX bytes:42002925032 (39.1 GiB)
    19.           Interrupt:245 
    20. lo        Link encap:Local Loopback  
    21.           inet addr:127.0.0.1  Mask:255.0.0.0
    22.           inet6 addr: ::1/128 Scope:Host
    23.           UP LOOPBACK RUNNING  MTU:65536  Metric:1
    24.           RX packets:217503 errors:0 dropped:0 overruns:0 frame:0
    25.           TX packets:217503 errors:0 dropped:0 overruns:0 carrier:0
    26.           collisions:0 txqueuelen:0 
    27.           RX bytes:29181128 (27.8 MiB)  TX bytes:29181128 (27.8 MiB)
    复制代码

    可以看到,服务器公网IP是119.81.236.70,对应网卡是eth1。

    安装strongSwan的运行依赖环境

    1. yum -y install gpm-devel pam-devel openssl-devel make gcc
    复制代码


    现在正式开始安装strongSwan

    安装方法一:使用yum安装
    strongSwan的发行版已包含在EPEL源中, 但源中的包版本5.3.2比较低,目前官网上5.4.0已经发布了。

    • 安装EPEL源:
      1. yum -y install epel-release
      复制代码
    • 安装strongswan:
      1. yum -y install strongswan
      复制代码
      注意:使用yum安装,命令ipsec被替代为strongswan。可设置别名来解决这个问题:
      1. alias ipsec='strongswan'
      复制代码


    安装方法二:下载源程序编译安装
    为使用最新版本,还是得自己下载源码编译安装,我测试时的版本是5.3.5。

    • 下载源代码压缩包
      1. cd /root
      2. wget http://download.strongswan.org/strongswan.tar.gz
      复制代码
    • 解压
      1. tar zxvf strongswan.tar.gz
      复制代码
    • 编译安装
      程序安装路径:/usr
      strongSwan配置文件路径:/etc/strongswan
      1. cd strongswan-5.3.5
      2. ./configure --prefix=/usr --sysconfdir=/etc/strongswan --enable-eap-identity --enable-eap-md5 \
      3.             --enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap \
      4.             --enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap \
      5.             --enable-xauth-pam --enable-dhcp --enable-openssl --enable-addrblock \
      6.             --enable-unity --enable-certexpire --enable-radattr --enable-tools \
      7.             --enable-openssl --disable-gmp
      8. make
      9. make install
      复制代码


    配置私钥和证书

    • 生成CA私钥,并使用此私钥自签名生成CA证书
      1. cd /etc/strongswan
      2. ipsec pki --gen --outform pem > ca.pem
      3. ipsec pki --self --in ca.pem --dn "C=CN, O=VPN, CN=strongSwan CA" --ca --lifetime 3652 \
      4.              --outform pem > ca.cert.pem
      复制代码

      这里C表示国家名,O表示组织名,CN为通用名。默认证书有效期为3年,这里配置3652天,即10年。
    • 生成服务器私钥,然后从私钥中导出公钥,用CA证书签发服务器证书
      ipsec pki命令可用来生成RSA密钥对,包含了私钥和公钥,公钥是在网络上传输的,而私钥是藏好用来和接收到的公钥配对的(因此私钥里也有整个公钥,用来配对)。
      1. ipsec pki --gen --outform pem > server.pem
      2. ipsec pki --pub --in server.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem \
      3.              --cakey ca.pem --dn "C=CN, O=VPN, CN=119.81.236.70" --san="119.81.236.70" \
      4.              --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
      复制代码

      • iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址。
      • 除了上述要求,Windows 7 还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证)--flag serverAuth。
      • 非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU)--flag ikdeIntermediate。
      • Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,--san。

      所以这里C、O的值要跟第1步的一致,CN值及--san值是服务器公网地址或url,另外这里可以设置多个--san值。否则会出现错误 13801:IKE身份验证凭证不可接受。
    • 生成客户端私钥,然后从私钥中导出公钥,用CA证书签发客户端证书
      1. ipsec pki --gen --outform pem > client.pem
      2. ipsec pki --pub --in client.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem \
      3.              --cakey ca.pem --dn "C=CN, O=VPN, CN=strongSwan Client" --outform pem > client.cert.pem
      复制代码

      这里C、O的值要跟第1步的一致。
    • 生成 pkcs12 证书,用来导入手机或电脑
      1. openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "strongSwan Client" \
      2.                       -certfile ca.cert.pem -caname "strongSwan CA" -out client.cert.p12
      3. Export Password: pceva.com
      复制代码

      生成时需设置密码,例如:pceva.com,请记住这个密码,在客户端导入此证书时需输入该密码。



    安装证书

    把刚才生成的私钥和证书文件复制到目录/etc/strongswan/ipsec.d/下的指定目录下即可。

    1. cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/
    2. cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/
    3. cp -r server.pem /etc/strongswan/ipsec.d/private/
    4. cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/
    5. cp -r client.pem /etc/strongswan/ipsec.d/private/
    复制代码


    cacerts/目录下放置CA证书
    certs/目录下放置服务器和客户端证书
    private/目录下放置服务器和客户端私钥

    配置strongSwan

    strongSwan包含3个配置文件,在目录/etc/strongswan/下。
    strongswan.conf            strongSwan各组件的通用配置
    ipsec.conf                     IPsec相关的配置,定义IKE版本、验证方式、加密方式、连接属性等等
    ipsec.secrets                 定义各类密钥,例如:私钥、预共享密钥、用户账户和密码

    vi /etc/strongswan/strongswan.conf

    1. # strongswan.conf - strongSwan configuration file
    2. #
    3. # Refer to the strongswan.conf(5) manpage for details
    4. #
    5. # Configuration changes should be made in the included files
    6. charon {
    7.         load_modular = yes
    8.         duplicheck.enable = no                          #冗余检查关闭,以允许同时连接多个设备
    9.         compress = yes                                  #传输启用压缩
    10.         plugins {
    11.                 include strongswan.d/charon/*.conf
    12.         }
    13.         dns1 = 8.8.8.8                                  #给远程端指定DNS服务器
    14.         dns2 = 8.8.4.4
    15.         nbns1 = 8.8.8.8                                 #指定Windows的WINS服务器
    16.         nbns2 = 8.8.4.4
    17.         filelog {                                       #配置strongSwan日志级别和路径
    18.                 /var/log/strongswan.log {
    19.                    time_format = %b %e %T
    20.                    default = 2
    21.                    append = no
    22.                    flush_line = yes
    23.                 }
    24.         }
    25. }
    26. include strongswan.d/*.conf
    复制代码


    vi /etc/strongswan/ipsec.conf

    1. # ipsec.conf - strongSwan IPsec configuration file
    2. config setup
    3.           uniqueids=never               #关闭ID唯一性,即允许多个客户端使用同一个证书,多设备同时在线
    4. conn %default                           #默认配置项,其他conn配置项都会调用此默认项
    5.     left=%any                           #left表示local,即本地端(服务器端)IP地址;%any是魔数字,表示任意地址
    6.     leftsubnet=0.0.0.0/0                #本地端网络,0.0.0.0/0为通配,表示所有IP网段
    7.     right=%any                          #right表示remote,即远程端(客户端)IP地址可为任意地址
    8.     rightsourceip=10.11.12.0/24         #分配给远程端的虚拟IP地址段,尽量避免使用常用私网地址段以免冲突
    9.     dpdaction=clear                     #dpd表示Dead Peer Detection,对端失效检测,clear表示对端失效时关闭连接
    10. conn IKEv1-CERT-XAUTH                   #供老版本IOS使用。IKEv1,使用证书和XAUTH验证
    11.     keyexchange=ikev1                   #密钥交换使用IKEv1
    12.     fragmentation=yes                   #允许分片
    13.     leftauth=pubkey                     #本地端使用公钥验证
    14.     leftcert=server.cert.pem            #指定本地端证书
    15.     rightauth=pubkey                    #远程端使用公钥验证
    16.     rightauth2=xauth                    #远程端使用用户账号验证
    17.     rightcert=client.cert.pem           #指定远程端证书
    18.     auto=add                            #auto定义strongSwan服务启动时该连接的行为,add是添加连接类型但不启动
    19. conn IKEv1-PSK-XAUTH                    #供IOS, Android使用。IKEv1,使用预共享密钥和XAUTH验证
    20.     keyexchange=ikev1                   #密钥交换使用IKEv1
    21.     leftauth=psk                        #本地端使用预共享密钥验证
    22.     rightauth=psk                       #远程端使用预共享密钥验证
    23.     rightauth2=xauth                    #远程端使用用户账号验证
    24.     auto=add                            #strongSwan启动时添加连接类型但不启动
    25. conn IKEv2-CERT                         #供Windows 7+, Linux使用。IKEv2,使用证书验证
    26.     keyexchange=ikev2                   #密钥交换使用IKEv2
    27.     leftauth=pubkey                     #本地端使用公钥验证
    28.     leftcert=server.cert.pem            #指定本地端证书
    29.     rightauth=pubkey                    #远程端使用公钥验证
    30.     rightcert=client.cert.pem           #指定远程端证书
    31.     auto=add                            #strongSwan启动时添加连接类型但不启动
    32. conn IKEv2-EAP                          #供Windows 7+, IOS9+使用。IKEv2,EAP验证
    33.     keyexchange=ikev2                   #密钥交换使用IKEv2
    34.     ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!                #第一阶段加密方式
    35.     esp=aes256-sha256,3des-sha1,aes256-sha1!                                           #ESP的顺序与IKE一致
    36.     rekey=no                            #本地端对Windows远程端发出rekey请求会断开连接,所以需配置为no
    37.     leftauth=pubkey                     #本地端使用公钥验证
    38.     leftcert=server.cert.pem            #指定本地端证书
    39.     leftsendcert=always                 #本地端总是发送证书
    40.     leftid=119.81.236.70                #本地端标识,使用本地端公网IP地址作为标识,和生成服务器证书时的--san参数对应
    41.     rightauth=eap-mschapv2              #远程端使用eap-mschapv2验证
    42.     rightsendcert=never                 #不要求远程端发送证书
    43.     eap_identity=%any                   #指定EAP验证身份,任意账户
    44.     fragmentation=yes                   #允许分片
    45.     auto=add                            #strongSwan启动时添加连接类型但不启动
    复制代码


    密码文件ipsec.secrets文件默认不存在,需要自己生成。
    vi /etc/strongswan/ipsec.secrets

    1. : RSA server.pem                        #指定服务器的RSA私钥文件
    2. : PSK "hello2016.pceva.com"             #配置预共享密钥为:hello2016.pceva.com
    3. stone : XAUTH "PCeva2016"               #配置XAUTH验证的用户名stone和密码PCeva2016,可配置多个用户账户
    4. stone : EAP "PCeva2016"                 #配置EAP验证的用户名stone和密码PCeva2016,可配置多个用户账户
    复制代码


    更改密码文件读写权限,仅限root可读写

    1. chmod 600 ipsec.secrets
    复制代码


    CentOS配置转发

    1. sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
    2. sysctl -p
    复制代码


    CentOS配置iptables防火墙,允许UDP500,UDP4500,并配置转发和NAT规则。
    vi /etc/sysconfig/iptables

    1. # Generated by iptables-save v1.4.7 on Thu Mar 31 17:56:08 2016
    2. *filter
    3. :INPUT DROP [0:0]
    4. :FORWARD DROP [0:0]
    5. :OUTPUT ACCEPT [17175:5181315]
    6. -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
    7. -A INPUT -p icmp -j ACCEPT 
    8. -A INPUT -i lo -j ACCEPT 
    9. -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
    10. -A INPUT -i eth1 -p udp -m udp --dport 500 -j ACCEPT 
    11. -A INPUT -i eth1 -p udp -m udp --dport 4500 -j ACCEPT 
    12. -A INPUT -j REJECT --reject-with icmp-host-prohibited 
    13. -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 
    14. -A FORWARD -s 10.10.10.0/24 -j ACCEPT 
    15. -A FORWARD -j REJECT --reject-with icmp-host-prohibited 
    16. COMMIT
    17. # Completed on Thu Mar 31 17:56:08 2016
    18. # Generated by iptables-save v1.4.7 on Thu Mar 31 17:56:08 2016
    19. *nat
    20. :PREROUTING ACCEPT [69:5938]
    21. :POSTROUTING ACCEPT [13:839]
    22. :OUTPUT ACCEPT [13:839]
    23. -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE 
    24. COMMIT
    25. # Completed on Thu Mar 31 17:56:08 2016
    复制代码


    配置完成后,重启iptables服务,使新规则生效。

    1. service iptables restart
    复制代码


    配置init.d服务启动脚本(源码编译安装不带此脚本)
    vi /etc/init.d/strongswan

    1. #!/bin/sh
    2. #
    3. # strongswan   An implementation of key management system for IPsec
    4. #
    5. # chkconfig:   - 48 52
    6. # description: Starts or stops the Strongswan daemon.
    7. ### BEGIN INIT INFO
    8. # Provides: ipsec
    9. # Required-Start: $network $remote_fs $syslog $named
    10. # Required-Stop: $syslog $remote_fs
    11. # Default-Start:
    12. # Default-Stop: 0 1 6
    13. # Short-Description: Start Strongswan daemons at boot time
    14. ### END INIT INFO
    15. # Source function library.
    16. . /etc/rc.d/init.d/functions
    17. exec="/usr/sbin/ipsec"
    18. prog="strongswan"
    19. status_prog="starter"
    20. config="/etc/strongswan/strongswan.conf"
    21. lockfile=/var/lock/subsys/$prog
    22. start() {
    23.     [ -x $exec ] || exit 5
    24.     [ -f $config ] || exit 6
    25.     echo -n $"Starting $prog: "
    26.     daemon $exec start
    27.     retval=$?
    28.     echo
    29.     [ $retval -eq 0 ] && touch $lockfile
    30.     return $retval
    31. }
    32. stop() {
    33.     echo -n $"Stopping $prog: "
    34.     $exec stop
    35.     retval=$?
    36.     echo
    37.     [ $retval -eq 0 ] && rm -f $lockfile
    38.     return $retval
    39. }
    40. restart() {
    41.     stop
    42.     start
    43. }
    44. reload() {
    45.     restart
    46. }
    47. force_reload() {
    48.     restart
    49. }
    50. _status() {
    51.     # run checks to determine if the service is running or use generic status
    52.     status $status_prog
    53. }
    54. _status_q() {
    55.     _status >/dev/null 2>&1
    56. }
    57. case "$1" in
    58.     start)
    59.         _status_q && exit 0
    60.         $1
    61.         ;;
    62.     stop)
    63.         _status_q || exit 0
    64.         $1
    65.         ;;
    66.     restart)
    67.         $1
    68.         ;;
    69.     reload)
    70.         _status_q || exit 7
    71.         $1
    72.         ;;
    73.     force-reload)
    74.         force_reload
    75.         ;;
    76.     status)
    77.         _status
    78.         ;;
    79.     condrestart|try-restart)
    80.         _status_q || exit 0
    81.         restart
    82.         ;;
    83.     *)
    84.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
    85.         exit 2
    86. esac
    87. exit $?
    复制代码


    配置开机时strongswan服务自启动

    1. cd /etc/init.d
    2. chmod +x strongswan
    3. chkconfig --add strongswan
    4. chkconfig strongswan on
    复制代码


    启动strongswan服务

    1. service strongswan start       #或者  ipsec start
    复制代码


    查看strongswan服务状态

    1. service strongswan status       #或者  ipsec status
    复制代码

    注:以上防火墙配置只是添加了nat转发功能,ip映射在web页面操作完成的   
    服务器防火墙配置如下

    *nat
    :PREROUTING ACCEPT [69:5938]
    :POSTROUTING ACCEPT [13:839]
    :OUTPUT ACCEPT [13:839]
    -A POSTROUTING -s 10.11.12.0/24 -o eth0 -j MASQUERADE
    COMMIT

    注:服务器的dns地址为内网dns

    本机电脑vpn配置dns也为内网dns

    ----------------------------------------------------------------------

    电脑vpn配置

    在 Mac 上输入 VPN 服务器信息

    1. 点击网络设置页面左下角的 + 添加按钮。
    2. 在 接口 栏位选择  VPN 。
    3. 在 VPN 类型 栏位选择 Cisco IPSec。
    4. 输入 VPN 连接的服务名称。
    5. 点击 创建

     

     

    步骤三: 创建 VPN 连接。

    1. 进入网页图形界面(Web GUI)的 虚拟专用网(VPN)服务器 页面。
    2. 在网络设置画面的 服务器地址 栏位,输入 虚拟专用网(VPN)服务器 页面 服务器 IP 地址 栏位显示的 IP 地址。
    3. 进入网页图形界面(Web GUI)的 虚拟专用网(VPN)服务器 页面,在 帐号 栏位输入访问 VPN 服务器的用户名称。然后在 Mac 网络设置画面中输入同样的帐户名称。
    4. 进入网页图形界面(Web GUI)的 虚拟专用网(VPN)服务器 页面,在 密码 栏位输入访问 VPN 服务器的用户名称。然后在 Mac 网络设置画面中输入同样的密码。
    5. 完成后,在 虚拟专用网(VPN)服务器 页面点击 + 图标。

     

    步骤四: 连接至 VPN

    1. 在 Mac 网络设置画面,点击 认证设置。
    2. 在 虚拟专用网(VPN)服务器 页面输入Pre Shared Key,然后在 机器鉴定 窗口的 共享的密钥 栏位输入同样的密钥
    3. 完成后,在 机器鉴定 窗口中点击 好。
    4. 在 虚拟专用网(VPN)服务器 页面点击 应用本页面设置。
    5. 在 Mac 网络设置画面中点击 连接。


    以上为VPN服务器端的配置
    posted @ 2018-11-13 15:06 疯狂的米粒儿 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • 自己抓的IPSEC的包

    2019-03-31 01:41:41
    NULL 博文链接:https://137459045.iteye.com/blog/1386601
  • 本文实例讲述了python实现ipsec开权限的方法。分享给大家供大家参考。具体实现方法如下: windows自带的命令行工具netsh ipsec static add filter不支持批量添加,还会添加重复的规则进去。我用python编写了ipsecset...
  • 深信服IPSEC-WOC高级考试认证A卷,全博客独一份,要的赶紧下手

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,007
精华内容 12,402
关键字:

ipsec