导读 本文目的是为服务器配置可供多种操作系统访问的 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 内存,SELinux 不开启

配置StrongSwan

说明:不使用 yum 直接安装的原因是在库中的二进制 StrongSwan 的参数配置导致无法通过 OS X 与 iOS 连接

配置环境 & 编译

编译安装默认的配置文件路径为 /usr/local/etc,通过 yum 安装的默认为 /etc/strongswan

yum -y install pam-devel openssl-devel make gcc curl wget
wget --no-check-certificate https://download.strongswan.org/strongswan-5.3.5.tar.gz
tar zxvf strongswan-5.3.5.tar.gz
cd strongswan-5.3.5
./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  \
--enable-certexpire --enable-radattr --enable-swanctl --enable-openssl --disable-gmp
make && make install

配置证书

需要生成的证书包括根证书(CA)、服务器证书(Server)和客户端证书(Client),客户端证书可用于通过证书认证。

生成根证书

ipsec pki --gen --outform pem > ca.key.pem
ipsec pki --self --in ca.key.pem --dn "C=CN, O=VisionSrv, CN=VisionSrv CA" --ca --lifetime 3650 --outform pem > ca.cert.pem

生成服务器证书

ipsec pki --gen --outform pem > server.key.pem
ipsec pki --pub --in server.key.pem --outform pem > server.pub.pem
ipsec pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in server.pub.pem --dn "C=CN, O=VisionSrv, CN=dev.panic.ml" --san="dev.panic.ml" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem

生成客户端证书

ipsec pki --gen --outform pem > client.key.pem
ipsec pki --pub --in client.key.pem --outform pem > client.pub.pem
ipsec pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in client.pub.pem --dn "C=CN, O=VisionSrv, CN=dev.panic.ml" --outform pem > client.cert.pem

生成 p12 证书可以设置密码,请注意:OS X 无法导入密码为空的 p12 证书

openssl pkcs12 -export -inkey client.key.pem -in client.cert.pem -name "VisionSrv Client Cert" -certfile ca.cert.pem -caname "VisionSrv CA" -out client.cert.p12

复制证书

说明:

(1)如果你希望用户通过用户名 + 密码连接 IKEv2,请将 ca.cert.pem 发送给客户并要求客户安装证书
(2)如果你希望用户直接通过证书登陆,请将 client.cert.p12 发送给客户并要求客户安装证书
(3)如果是 iOS,用户还需要安装 ca.cert.pem
(4)如果是 OS X,用户需要设置 CA 根证书为可信
cp -r ca.key.pem /usr/local/etc/ipsec.d/private/
cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/
cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r server.key.pem /usr/local/etc/ipsec.d/private/
cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r client.key.pem /usr/local/etc/ipsec.d/private/

配置 ipsec.conf

通过编译安装,ipsec.conf 路径为 /usr/local/etc/ipsec.conf,通过 yum 安装路径为 /etc/strongswan/ipsec.conf

config setupuniqueids=never conn cisco_certkeyexchange=ikev1fragmentation=yesleft=%defaultrouteleftauth=pubkeyleftsubnet=0.0.0.0/0leftcert=server.cert.pemright=%anyrightauth=pubkeyrightauth2=xauth-radiusrightsourceip=10.31.2.0/24auto=addconn cisco_xauth_pskkeyexchange=ikev1left=%defaultrouteleftauth=pskleftsubnet=0.0.0.0/0right=%anyrightauth=pskrightauth2=xauth-radiusrightsourceip=10.31.2.0/24auto=addconn standard_ikev2keyexchange=ikev2ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!esp=aes256-sha256,3des-sha1,aes256-sha1!rekey=noleft=%defaultrouteleftid=@dev.panic.mlleftsendcert=alwaysleftfirewall=yesleftsubnet=0.0.0.0/0leftcert=server.cert.pemright=%anyrightauth=eap-radiusrightsourceip=10.31.2.0/24eap_identity=%anydpdaction=clearfragmentation=yesauto=add

配置 strongswan.conf

通过编译安装,ipsec.conf 路径为 /usr/local/etc/strongswan.conf,通过 yum 安装路径为 /etc/strongswan/strongswan.conf

charon {load_modular = yesduplicheck.enable = no #是为了你能同时连接多个设备,所以要把冗余检查关闭compress = yesplugins {include strongswan.d/charon/*.confeap-radius {servers {server-a {address = YourRadiusServersecret = YourRadiusSecret# nas_identifier = ipsec-gateway}}}}dns1 = 114.114.114.114dns2 = 8.8.8.8# for Windows WINS Servernbns1 = 114.114.114.114nbns2 = 8.8.8.8
}include strongswan.d/*.conf

配置 ipsec.secrets

通过编译安装,ipsec.conf 路径为 /usr/local/etc/ipsec.secrets,通过 yum 安装路径为 /etc/strongswan/ipsec.secrets

: RSA server.key.pem
: PSK "visionsrv"
: XAUTH "visionsrv"
test : EAP "123456"

我们在这里增加了一个测试账号,但在 Radius 认证中并不生效,如果需要使用此认证用于测试或不需要使用 Radius 进行认证,请将 ipsec.conf 中的 rightauth(或 rightauth2) 值改为 eap-mschapv2(eap-radius) 或 xauth(xauth-radius)

注意: 在停用 Radius 认证后,使用本文配置将无法通过客户端证书直接连接 VPN 服务器。如有需要,请自行研究配置方式。 下面是一些直接使用证书认证的参考资料: StrongSwan Android、Windows 身份验证(使用计算机证书)-> IKEv2 Certificate -> rightauth=pubkey StrongSwan Android、OS X、iOS -> EAP-TLS -> rightauth=eap-tls Linux 通过 NetworkManager-strongswan 支持上述所有方式

配置防火墙

本文使用的是 CentOS 7 默认的防火墙 firewalld,如需要 iptables 请查看官方文档或参阅 Google

firewall-cmd --add-port=500/tcp --permanent
firewall-cmd --add-port=500/udp --permanent
firewall-cmd --add-port=4500/tcp --permanent
firewall-cmd --add-port=4500/udp --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload

启动服务

systemctl start strongswan
systemctl enable strongswan

配置 Radius

安装并配置 FreeRadius

yum install -y freeradius*
echo 'test ClearText-Password := "123456"' >> /etc/raddb/users
# 配置 Radius 客户端,0.0.0.0 替换为 VPN 服务器地址,123456 替换为您想设置的 Radius 连接密钥
cat >> /etc/raddb/clients.conf < <-EOF
client 0.0.0.0 {secret = 123456shortname = 0.0.0.0nas_type = other
}
EOF

请将 CA 根证书ca.cert.pem放置在/etc/raddb/certs/ca.pem(本项如果不需要通过客户端证书连接可以不配置)

请将服务器证书server.cert.pem放置在/etc/raddb/certs/server.pem

服务器私钥server.key.pem放置在/etc/raddb/certs/server.key

完成后,请执行命令cat /etc/raddb/certs/server.key >> /etc/raddb/certs/server.pem

2016-5-8 更新: 新版 OS X 对`用户名+密码`不再要求强制校验服务器身份,所以不使用证书登陆可以不配置 RADIUS 证书。

注意

不配置 Radius 服务器证书时 Windows PEAP 连接将弹出提示(提示信息为“信息不足,无法验证服务器”),OS X 将拒绝连接。

需要说明的是,这并不是一般的 Radius 服务器证书配置方法,但出于简单、实用且易于描述的考虑我们这样做以免您产生混淆。

正常的做法是通过通用的 CA 根证书、 CA 私钥、 CSR 文件以及 FreeRadius 内置的私钥为 Radius 服务器生成一个证书。

这样生成的服务器证书可以被 VPN 客户端的 PEAP 判断为合法的服务器并进行连接。

OS X 使用 PEAP-EAP-MSCHAPv2(用户名)和 EAP-TLS(证书)并强制要求校验服务器合法性。

Windows 可以选择使用 PEAP-EAP-MSCHAPv2(用户名)和 EAP-TLS(证书),但配置更自由,更具灵活性。

在本文所述的方法中,因 server.pem 中的私钥是未加密的,所以 eap 配置文件中的私钥密码是不产生作用的。

配置防火墙

# Radius 认证端口
firewall-cmd --add-port=1812/udp --permanent
# Radius 计费端口(本文不会使用)
firewall-cmd --add-port=1813/udp --permanent
firewall-cmd --reload

客户端配置

说明:

(1)如果你希望用户通过用户名 + 密码连接 IKEv2,请将 ca.cert.pem 发送给客户并要求客户安装证书
(2)如果你希望用户直接通过证书登陆,请将 client.cert.p12 发送给客户并要求客户安装证书
(3)如果是 iOS,用户还需要安装 ca.cert.pem
(4)如果是 OS X,用户需要设置 CA 根证书为可信

OS X

OS X 采用了严格的安全校验措施,IKEv2 连接采用 PEAP(用户名+密码)/EAP-TLS(证书) 模式并必须验证服务器身份,
对服务器校验分两步:(1)校验该服务器证书是否是合法 CA 签发的,(2)校验被连接服务器的被连接域名是否是证书允许的
OS X 要求这两部分必须均校验且通过,Windows 可以选择是否校验以及校验至哪一步。
这意味着为了保证 OS X 正常使用 IKEv2,您必须为 Radius 服务器配置证书。
iOS 与 OS X 的要求相似,本文以 OS X 为例进行说明。

IKEv1

配置位置:系统偏好设置 -> 网络 -> 新建 -> VPN -> Cisco IPsec
服务器地址:在这里输入您的服务器地址
账户名称:在这里输入用户名
密码:在这里输入密码
在鉴定设置 -> 共享的密钥中输入在 ipsec.secrets 中设置的 PSK 预共享密码

IKEv2

配置位置:系统偏好设置 -> 网络 -> 新建 -> VPN -> IKEv2
服务器地址:在这里输入您的服务器地址
远程地址:在这里输入您的服务器地址
在鉴定设置 -> 用户名中输入在 ipsec.secrets 中设置的用户名和密码(通过用户名密码登陆)
在鉴定设置 -> 证书中选择安装的客户端证书(通过客户端证书登陆)

Android

由于 Andorid 的版本众多,配置方法可能不同但大同小异。

IKEv1

说明:您也可以使用 IPSec Xauth RSA 进行连接,但需要安装证书,连接时选择客户端证书,CA 和服务器证书留空

配置位置:设置 -> 其它连接方式 -> VPN -> 添加 VPN
名称:在这里填写任意名称
类型:IPSec Xauth PSK
IPsec 标识符:不更改此项内容
预共享密钥:在这里输入在 ipsec.secrets 中设置的 PSK 预共享密码

此后,在连接时输入您的用户名和密码。

IKEv2

您需要安装 StrongSwan Andorid 版本,具体配置方法详见不同版本的配置方法。

由于该 APP 为官方出品,支持认证方法众多,配置简单,推荐使用。

Windows

说明:鉴于 Windows 支持认证方式较为广泛,本文仅示例最简单的通过 EAP(MSCHAPv2) 与通过本地证书(EAP-TLS)进行认证

Windows 7 以下版本不支持 IKEv2 连接,所有版本均不支持 IKEv1 连接,如有需要请下载第三方组件。
本文配置对于 Windows 7 以上版本的 IKEv2 连接,支持通过 EAP-MSCHAPv2、EAP-TLS、PEAP(部分支持)、EAP-TTLS 认证
本文采用 Windows 10 作为操作示例,其它受支持的 Windows 版本配置与本文类似,请自行研究。
如前文所述,本文对于 PEAP 仅支持 PEAP-EAP-MSCHAPv2(用户名+密码),不支持 PEAP-EAP-TLS(证书)。
有消息称,不同连接方式之间的性能可能存在差异,但笔者并未进行详细的性能测试。

注意:笔者测试 StrongSwan 官方的 Windows 7 配置,但 Windows 7 仍不可连接。 错误提示为 IKE 身份验证凭证不可接受,该问题通常是由于 CA 根证书未安装导致,但 CA 根实际上已经安装。 因此,错误原因不明,该问题仅在 Windows 7 (Windows Server 2008)上被发现,其他未见影响。

IKEv2

配置位置:网络与共享中心 -> 设置新的连接或网络 -> 连接到工作区 -> 使用我的 Internet 连接
Internet 地址:在这里填写服务器地址
确认后,在网络与共享中心 -> 更改适配器设置 -> 选择刚刚添加的 VPN -> 右键选择属性 -> “安全”中“VPN 类型”选择 IKEv2

在这里,我们展示两种方式:

方法一:通过 EAP-TLS 使用证书连接

(1)安装客户端证书 client.cert.p12,设置为可信
(2)在“安全”中选择“Microsoft: 智能卡或其他证书(启用加密)”,在“属性”中选择“在此计算机上使用证书”
(3)完成上述步骤后,可以勾选“通过验证证书来验证服务器身份”,在文本框中输入 VPN 服务器地址
(4)勾选“连接到这些服务器”,在证书列表中选择 CA 根证书(一般在最后一个)后确定
(5)尝试连接到 VPN 服务器即可

说明:用户可以关闭“通过验证证书来验证服务器身份”,但这将降低用户安全性。

方法二:通过 EAP-MSCHAPv2 使用用户名与密码连接

(1)安装 CA 根证书,设置为可信
(2)在“安全”中选择“Microsoft: 安全密码(EAP-MSCHAP v2)(启用加密)
(3)尝试输入账号密码进行 VPN 连接即可。

本文地址:https://www.linuxprobe.com/?p=143921

Building IKEv1 and IKEv2 on CentOS 7相关推荐

  1. IPsec:IKEv1和IKEv2区别

    协商过程不同 IKEv1 IKEv1协商安全联盟主要分为两个阶段.         IKEv1阶段1的目的是建立IKE SA,它支持两种协商模式:主模式和野蛮模式.主模式用6条ISAKMP消息完成协商 ...

  2. 密钥交换协议之IKEv2

    1. IKEv2 1.1 IKEv2简介 IKEv2(Internet Key Exchange Version 2,互联网密钥交换协议第 2 版)是第 1 版本的 IKE 协议(本文简称 IKEv1 ...

  3. [RFC5996 翻译一] IKEv2 互联网密钥交换协议版本2

    rfc5996 (ietf.org) 本文档介绍了 Internet 密钥交换 (IKE) 协议的第 2 版. IKE 是 IPsec 的一个组件,用于执行相互身份验证以及建立和维护安全关联 (SA) ...

  4. IKEv2协议协商流程: (IKE-SA-INIT 交换)第二包

    IKEv2协议协商流程: (IKE-SA-INIT 交换)第二包 文章目录 IKEv2协议协商流程: (IKE-SA-INIT 交换)第二包 1. IKEv2 协商总体框架 2. 第二包流程图 3. ...

  5. IPSec之IKEv2协议详解

    IKEv2简介 IKEv2介绍: 定义在RFC4306 ,更新与 RFC 5996. 不兼容IKEv1,IKEv1不支持认证,IKEv2支持认证,EAP. 支持NAT穿越. IKEv2支持私密性.完整 ...

  6. strongswan 配置ikev2 for iOS and Android

    strongswan 高版本已支持ikev2,ios9.0以上版本的支持ikev2,Android也是高版本的部分机型支持ikev2,本人搭建的基于ikev2交换协议的strongswan VPN服务 ...

  7. 华为防火墙基础自学系列 | IKE介绍

    视频来源:B站<乾颐堂HCIP-HCIE-security安全 2019年录制> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:华为防火墙基础自 ...

  8. buildroot学习(十)——at91sam9g45软件平台更新

    转载地址:https://blog.csdn.net/srf1986/article/details/52474697 (136)spice protocol In computing, SPICE ...

  9. 使用libreswan搭建ipsec点对点隧道 实现两idc内网网段互通

    使用libreswan搭建ipsec点对点隧道 实现两idc内网网段互通 文章目录 使用libreswan搭建ipsec点对点隧道 实现两idc内网网段互通 一.libreswan 简介 - > ...

  10. 上云之路之企业级云上网络解决方案

    2017年,越来越多的企业处于内部部署解决方案和云环境拆分的混合IT世界中.为了适应产品的服务模式和公司未来的业务运营模式,结合公司2018年业务发展计划.计划将部分系统迁移部署在云平台,从而产生对混 ...

最新文章

  1. CF5A Chat Server's Outgoing Traffic(字符串模拟,find函数的应用)难度⭐
  2. mysql 5.7 缺点_MySQL · 特性分析 · MySQL 5.7 外部XA Replication实现及缺陷分析
  3. python 数据分析学什么-数据分析培训学习多久?都学什么?
  4. leetcode算法题--Count and Say
  5. Linux之Nginx配置多个虚拟主机:静态转发
  6. c语言输入字符串的格式不正确的是,关于c#:输入字符串的格式不正确
  7. nfs文件共享+netstat相关 记录
  8. java的文本框如何回车键触发按钮_java回车触发按钮的代码
  9. 轻量级RTSP服务和内置RTSP网关的区别和联系
  10. 【KPC】关于为什么不用Zepto而用JQuery
  11. 使用jquery 给span 赋值
  12. Asp.net 在配置Microsoft Excel、Microsoft Word应用程序权限时 error: 80070005 和8000401a 的问题...
  13. matlab圆锥曲线,Matlab软件在高中数学圆锥曲线学习过程中应用.doc
  14. 约束优化方法_2_——Frank-Wolfe方法
  15. matlab求二阶中心矩,opencv —— moments 矩的计算(空间矩/几何矩、中心距、归一化中心距、Hu矩)...
  16. [经典模型] 4. 图与网络模型及方法
  17. matlab 7x5 棋盘格,matlab画棋盘格程序
  18. 编写一个js函数,实时显示当前时间,格式:“年-月-日 时:分:秒”
  19. Android Studio下Terminal窗口Window下cmd黑窗口中使用adb命令调试精炼详解
  20. 使用java连接neo4j aura数据库

热门文章

  1. 麦客表单无法登录打开显示空白怎么办?
  2. 解决pip Could not fetch URL There was a problem confirming the ssl certificate: HTTPSConnectionPool问题
  3. 计算机毕业设计Java河南省农村多元化养老服务管理系统设计与实现(源码+系统+mysql数据库+lw文档)
  4. dhcp服务器不显示mac地址,利用MAC地址解决无法获得DHCP动态地址分配问题
  5. keepalived的主备模式下,优先访问了从机的资源,原因尚未知
  6. shell 小米system锁adb_小米Max刷机及ADB操作
  7. 扫盲:集线器、网桥、交换机、路由器、网关大解析
  8. 雷顿学院与与河北各地高校签署战略合作伙伴关系
  9. 前端项目使用阿里巴巴icon font的具体过程
  10. 【shareX】自定义图片上传-基于tu.my最新版API