strongswan

AWS China S2S (Solution-Custom)

偶尔善良 提交于 2020-04-27 20:11:16
请关注微信公众号: 插秧者 获取更多资料。 转载请说明出处!!! 理论: IPsec: 安全协议(Internet Protocol Security,缩写为IPsec),是一个协议组合,协议工作在OSI模型中网络层。 IKE: 密钥交换(Internet Key Exchange,简称IKE或IKEv2)是一种网络协议,归属于IPsec协议族之下。 ESP: 安全报文协议(Encapsulating Security Payload,简称ESP)是一种安全报文协议,范畴于ICP-IP。 关于IKE v1和IKE v2差别这里不做详细的阐述了,一个重要的差别 IKE v1一般被称为Policy Based的VPN,IKEv2一般被称为Route Based的VPN。详情请参阅RFC5996做了定义。接下来阐述一下IKE的工作过程(参阅下图): IKE 的工作过程: 启动IKE阶段1,目标保护的流量触发协商过程,对通讯双方进行身份,两端之间建立一条安全通道。 启动IKE阶段2,在阶段1的安全通道内协商IPSec参数。 加密传输,按照协商好的IPSec参数对数据流进行加密,HASE等进行双向传输的保护。 如果需要支持多站点那么需要采用Route Based模式,IKE v2不同的设备配置方法不同,可能密钥算法类型不支持,前期一定调研好本地的硬件设备的类型,以及VPN的模式,被动还是主动

解决:deepin连接预共享秘钥的L2TP/IPSec的VPN下,出现“连接vpn失败,原因未知”

元气小坏坏 提交于 2020-04-10 18:34:06
背景:公司的vpn是有预共享秘钥的l2tp/ipsec,使用deepin连接时,一直连接不成功,因为这个原因,不得不回归windows阵营。但对于一个爱好linux的折腾者,还是时不时会找找解决办法,功夫不负有心人,这次终于是找到了。 我连接的vpn是预共享秘钥的l2tp/ipsec,在windows10上显示如下: 1.创建vpn连接 在控制中心进行vpn创建,操作如下: 1.1 网络-->vpn-->创建-->l2tp 1.2 配置vpn信息 1.填写网关/密码信息 2.启用ipsec 拉到下面,启用ipsec,填写预共享密钥/密钥交换协议/安全封装协议关于密钥交换协议与安全封装协议如何填写,请看下一节。 3.保存。 信息填写完之后,点击”保存“。对于其他项,一个普适的建议是:如果不明白具体是干嘛的,就使用默认的。 1.3 密钥交换协议与安全封装协议如何填写 可以参考 network-manager-l2tp 我使用的脚本如下 #!/bin/bash # Encryption algorithms: 3des=5, aes128=7/128, aes192=7/192, aes256=7/256 ENCLIST="5 7/128 7/192 7/256" # Hash algorithms: md5=1, sha1=2, sha256=5, sha384=6, sha512=7

Strongswan 服务端配置

会有一股神秘感。 提交于 2020-04-10 18:14:57
首先编译安装Strongswan 1. 安装必须的库 apt-get update apt-get install build-essential libpam0g-dev openssl libssl-dev make gcc wget -y 2. 下载Strongswan并解压(*代表当前版本号,这里采用最新的版本) wget http://download.strongswan.org/strongswan.tar.gz tar xzf strongswan.tar.gz cd strongswan-* 3. 编译Strongswan : Xen 、Kvm使用以下参数(这里也是如此) ./configure --enable-eap-identity --enable-eap-md5 \ --enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap \ --enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap \ --enable-xauth-pam --enable-dhcp --enable-openssl --enable-addrblock --enable-unity \ -

Building IKEv1 and IKEv2 on CentOS 7

狂风中的少年 提交于 2020-04-10 16:52:12
本文目的是为服务器配置可供多种操作系统访问的 IKEv1/IKEv2 接入,需要支持 Radius 认证;按照本文配置,没有进行流量统计的功能,如果有相关需求,请自行配置 Radius 和 StrongSwan 的 eap-radius 组件。 本文实现的 Radius 认证方式有: EAP-MSCHAPv2(用户名+密码)、EAP-TLS(证书)、EAP-TTLS(证书)、PEAP(用户名+密码) 已知的问题 PEAP本可以支持两种认证方式:PEAP-EAP-MSCHAPv2(用户名+密码)与PEAP-EAP-TLS(证书) 但 FreeRadius 在PEAP中仅支持PEAP-EAP-MSCHAPv2与PEAP-EAP-TLS必须二选一而不能同时启用。 FreeRadius 推荐且默认为PEAP-EAP-MSCHAPv2,鉴于用户使用PEAP-EAP-MSCHAPv2是主流,且后者替代品丰富,所以放弃对PEAP-EAP-TLS的支持。但出于测试的目的,笔者尝试配置PEAP-EAP-TLS却未能成功。 系统环境 公有云上的 CentOS 7 x86_64(非 OpenVZ),双核,2 GB 内存,SE Linux 不开启 配置StrongSwan 说明:不使用 yum 直接安装的原因是在库中的二进制 StrongSwan 的参数配置导致无法通过 OS X 与 iOS 连接

IKEv2子网之间秘钥重协商

南楼画角 提交于 2019-12-10 06:52:41
以下根据strongswan代码中的testing/tests/ikev2/net2net-rekey/中的测试环境,验证一下网络到网络的IKEv2协议的秘钥重协商过程。拓扑结构如下: 拓扑图中使用到的设备包括:虚拟网关moon和sun。 moon网关配置 moon网关的配置文件:/etc/ipsec.conf ,内容如下。为了进行秘钥重协商,安全关联的生存期lifetime指定为较短的10s,正常情况下不应使用如此短的时间值。margintime指定在具体生存期到期之前多久开始进行重新协商,此处为5s秒,即在距离到期(10s)前5s开始重协商。rekeyfuzz字段的值为0%表示禁用重协商时间的随机功能。 conn %default ikelifetime=60m lifetime=10s margintime=5s rekeyfuzz=0% keyingtries=1 keyexchange=ikev2 mobike=no conn net-net left=PH_IP_MOON leftcert=moonCert.pem leftid=@moon.strongswan.org leftsubnet=10.1.0.0/16 leftfirewall=yes right=PH_IP_SUN rightid=@sun.strongswan.org rightsubnet=10.2

[ipsec][strongswan] strongswan源码分析-- (三) xfrm与strongswan内核接口分析

廉价感情. 提交于 2019-11-29 03:18:58
strongwan sa分析(三) Author:caotong Date:2019-01-02 Version:1.0 xfrm与strongswan内核接口分析 1. strongswan的实现 如下图,业务场景可以分为两类: 下发类的交互主要由包触发或用户配置动作触发。 消息类的交互主要由watcher监听socket,然后触发。 2. 交互机制 2.1 下发消息 消息名 功能定义 XFRM_MSG_ALLOCSPI 获取SPI XFRM_MSG_NEWSA 新建SA XFRM_MSG_UPDSA 更新SA XFRM_MSG_GETSA 获取SA XFRM_MSG_DELSA 删除SA XFRM_MSG_FLUSHSA 清空SA XFRM_MSG_GETSPDINFO 获取SPD信息 XFRM_MSG_NEWPOLICY 新建安全策略 XFRM_MSG_UPDPOLICY 更新安全策略 XFRM_MSG_GETPOLICY 获取安全策略 XFRM_MSG_DELPOLICY 删除安全策略 XFRM_MSG_FLUSHPOLICY 清空安全策略 2.2 接收消息 消息名 功能定义 XFRM_MSG_ACQUIRE ??? XFRM_MSG_EXPIRE CHILD_SA超时 XFRM_MSG_MIGRATE CHILD_SA热迁移 XFRM_MSG_MAPPING

ipsec][strongswan] ipsec SA创建失败后的错误处理分析

大兔子大兔子 提交于 2019-11-28 16:03:20
〇 ike协商的过程最终是为了SA的建立, SA的建立后, 在底层中管理过程,也是相对比较复杂的. 这里边也经常会出现失败的情况. 我们以strongswan为例, 在strongswan的底层SA管理由linux kernel实现, 并通过netlink与strongswan进行交互. 当linux kernel收到sa的建立命令,并不幸失败后, 会给strongswan回复一个error消息. 一 我们现在将视角来回到ike协议的交互层面. 来观察一下. 发生〇中的情况时, 我们抓包观察如下: 可以看见, 经过四个包的协商之后. 发起端, 主动回复了一个Delete消息给响应端. (我们是在发起端人为设置的kernel SA添加失败, 来模拟这个场景.) 二 现在来进行一下分析. 如下图: 1. 我们知道child sa的建立过程是在上边pcap那张图的包3和包4中进行的. 在下边这张手绘图里, pkt1表示包3, pkt2表示包4 2. 整个SA的建立与协商过程是这样的: a, 为对方分配一个spi b. 将该spi发给对方. c. 对方通过收到的spi在本地建立sa d, 对方为我方申请一个spi e, 对方将申请到的spi发送给我方. f. 我方收到spi后, 在本地建立sa. 3. 上边的过程里, 只讲到了建立出方向SA的过程. 实际上每端都需要管理两个方向SA.

[dev][ipsec] 基于路由的VPrivateN

天涯浪子 提交于 2019-11-28 01:02:30
之前写的一个: [dev][ipsec] 基于路由的VPrivateN 一 我们默认用strongswan的时候基于策略的. 也就是policy. 基于策略的ipsec中, policy承担了两部分功能 一是访问权限的控制功能, 另一个是路由的功能. linux kernel做完路由之后会在查询policy,从而确定要将包转发给哪一个SA. 二 基于一中的描述, 我们现在要做基于路由的ipsec, 也就是说将路由功能从policy中去除出来, 在路由表中使用路由条目来做. 于是在这里需要解决的就是路由指向下一条的问题, 而这个下一条就是Ipsec SA. 三 现在引入一个概念叫做VTI(Vitual Tunnel Interface), VTI是内核中的一种设备. 使用如下命令添加: ip link add name vti1 type vti key VTI_KEY local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR 我们看见, 创建vti时指定了一个key, 这个key便是与SA之间的关联. 见下面的例子如何完成这样一个关联: # ip link add name vti1 type vti key VTI_KEY local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR # ip link set

[ipsec][strongswan] strongswan源码分析-- (二)rekey/reauth机制分析

谁都会走 提交于 2019-11-27 16:52:02
strongwan sa分析(二) Author: Cao Tong Date: 2018-12-29 Version: 1.2 文档历史 版本 日期 说明 修改人 1.0 20181229 初版 caotong 1.1 20190102 修改重要的概念阐述,IKE SA rekey caotong 1.2 20190103 修改IPsec SA的名称约定 caotong 名词约定 client / initiator: IKE连接的首先发起方。 server / responder: IKE连接首先发起方的对方,即响应方。 IKE SA: 用于对ISAKMP数据包进行加密的SA。 CHILD SA / IPsec SA: 用于对传输数据(用户数据)进行加密的SA,如加密ESP协议数据。 SA: 包括,IKE SA和CHILD SA。 rekey/reauth 机制分析 1 概述 reauth是指重新进行身份认证过程。rekey包含两个过程。IKESA rekey指协商IKE SA。 CHILD SA rekey是指重新协商CHILD SA。IKEv1与IKEv2在概念上同样适用。但是需要特别说明的是,IKEv1中没有实现 IKESA rekey机制。 详见,官网wiki中的一篇文档 ExpiryRekey 讲到 IKEv1不支持ikesa的rekey

[ipsec][strongswan] strongswan源码分析--(一)SA整体分析

寵の児 提交于 2019-11-27 16:50:52
strongswan SA分析(一) Author: Cao Tong Date: 20181224 Version: v1.1 1 概念 下面主要介绍两个本文将要阐述的核心概念。他们是SA和SP。注意,这不是一篇不需要背景知识的文章。作者认为你适合阅读接下来内容的的前提是,你已经具备了一下三方面的知识: a. 什么是VPN。 b. 什么是IPsec,包括IKE,ESP,strongswan都是什么等。 c. 一般的linux使用方法和常见概念。 1.1 什么是SAD,SPD SAD是Security Association Database的缩写。 SPD是Security Policy Database的缩写。 SAD是用来存储SA的数据库。SPD是用来存储SP的数据库。 1.2 什么是SPI SPI是Security Parameter Index的缩写。是有一组数字(长度?)。被使用在SAD和SPD里作为索引的一部分。是由IKE协商的两侧客户端随机选择的UUID?。0-255是被保留的值,禁止在SPI中使用。 1.3 什么是SA SA是Security Association的缩写。SA是一组算法和算法参数(包括key)的集合,用来完成单个方向的数据流加密和验证任务。通过SPI加数据包的目的地址可以唯一查找到一个SA。 包含的属性: 加密算法 属性 key 验证算法 属性