Netlink消息通信机制的IPSec VPN实现研究

2017-12-21 22:34黄超赵建平韦勇钢
网络空间安全 2017年11期

黄超++赵建平++韦勇钢

摘 要:文章分析研究Netlink机制对于Linux内核IPSec服务的支持,提出了一种基于Netlink消息通信机制的IPSec VPN实现方案。方案由内核空间IPSec服务模块和用户空间IPSEC管理软件组成,两者通过Netlink进行通信,并为IPSec VPN提供了灵活、高效的IKE协商机制和安全可靠IP数据包传输保障。

关键词:Netlink;IPSec VPN;IKE协商;用户空间;内核空间

中图分类号:TP393 文献标识码:A

1 引言

VPN即虚拟专用网,是利用开放、不安全的公用网络作为基本传输介质,通过采用隧道封装、信息加密、用户认证和访问控制等技术形成专用的虚拟链路实现对信息传输过程的安全保护,从而向用户提供类似专用网络安全性能的网络服务技术。

IPSec是Internet工程任务组IETF定义的一套安全标准,包括一系列安全协议,为IP数据包传输提供安全保障。Linux 虚拟地址空间为0到4G,划分为内核空间和用户空间两部分。内核空间包括最高的1G字节,而用户空间包括较低的3G字节。

基于Linux 的IPSec VPN由内核IPSEC服务模块和用户空间IPSec管理软件组成。内核IPSec模块在内核提供IP数据包的地址验证、数据完整性校验,数据机密性保护等业务,用户空间IPSec管理软件执行IKE密钥协商,密钥配置等业务。其中IKE密钥协商用于产生通信双方可用于加解密的工作密钥。

Netlink是Linux提供的一种消息通信机制,用于内核空间和用户空间之间的信息传输。本文提出了一种基于Netlink消息通信机制的IPSec VPN的实现方案。本方案重点是设计用户空间IPSec管理软件,实现安全策略管理配置等功能,内核模块采用Linux内核原生IPSec服务模块。

2 Netlink机制对IPSEC的支持

内核的 IPSEC 处理逻辑中包含SAD 和 SPD 两个策略数据库,其中 SAD 中包含了所有有效的用于保护通信的安全关联(SA),SPD中包含了使用的安全策略(SP)。所有数据包在进行IPSEC处理时都要查询SAD和SPD,根据查询到的策略来执行相应的安全处理。每个IP数据包的处理都需要SP和SA结合起来使用。内核在处理IP数据包时,如果应用于该IP数据包的安全策略不完整,则通过Netlink向应用层发送SAD和SPD的管理请求消息。

Linux内核空间和用户空间使用一种特殊的套接字Netlink Socket实现双向通信。Linux内核中xfrm_user.c文件实现了针对IPSec的Netlink通信模块,主要是对SAD和SPD的策略管理。xfrm.h文件中定义了14种SAD和SPD的策略管理消息类型,包括新增、删除、修改、查询SA和SP,清除所有SA、SP等。

3 IPSEC-VPN数据包处理流程

基于Netlink的IPSec VPN的IP数据包处理流程如图1所示。

IPSec管理软件初始化,读取解析网络地址配置文件,分析需要建立IPSec VPN的IP地址,端口号等信息。通过IPSec管理软件内的Netlink消息通信模块用户端(以下简称Netlink用户端)发送“新建SP”消息到内核,Netlink消息通信模块内核端(以下简称Netlink内核端)接收消息并解析出配置信息,调用内核SPD数据库管理接口将新的SP注入到SPD数据库。

在内核层,当有IP数据包到来时,判断合法性,并根据该包的目的地址、源地址、端口等信息检索SPD,根据检索到的SP对IP数据包进行安全策略处理。SPD中对于数据包的处理策略包括“应用”“绕过”“丢包”。判断安全策略的行为是“丢弃”,终止对IP数据包的外出处理,包被丢弃;如果行为是“绕过”,做透明处理,不应用安全处理。如果安全策略的行为是“应用”,则进入第三步。

根据SAD建立dst_entry链表。sk_buff是Linux操作系统网络部分的一个重要数据结构,在整个网络传输中作为数据载体。dst_entry是sk_buff中的重要组成部分,链表记录了应用于该IP数据包的路由,dst_entry中的成员函数Output指明了数据包的具体协议处理函数。内核IPSEC模块根据SP查詢对应SA,如存在,则根据SA建立dst_entry链表。如果没有,则进行第四步,协商并建立SA。

内核通过Netlink内核端向应用层发送“请求SA”消息,消息包括需要协商的对端IP地址等。Netlink用户端接收到消息并解析为“请求SA”类型以后,发起IKE密钥协商,IKE成功以后,向内核发送“新建SA”消息,消息包括IP地址,SPI,所采取的保护算法,加密参数等。内核接收解析消息,调用内核SAD数据库管理接口将新的SA注入到SAD数据库。随后根据SA建立dst_entry链表。

内核调用Output成员函数进行IP数据包的安全协议处理。处理完成后,将数据包放回协议栈进行后续的处理。

4 IPSec管理软件设计与实现

在前文对于Linux内核IP数据包处理流程分析的基础上,本文设计了用户友好的IPSec管理软件。用户空间IPSec管理软件结构框图如图2所示,由功能模块组成:主程序模块、IKE密钥协商模块、策略管理模块、策略配置模块、日志记录模块、Netlink通信模块。

4.1 主线程模块

(1)IPSec策略初始化:读取并解析网络地址配置信息,根据地址规划配置SP到内核SPD数据库,并将配置的SP状态信息告知策略管理模块。地址配置信息包括VPN的IP地址,受IPSEC保护的应用服务器IP地址,IPSec处理模式等,其中处理模式包括“传输模式”和“隧道模式”两种。

(2)提供用户友好界面以及IPSec VPN的各项操作指令,包括IPSEC启动、配置、重启、查询等。

(3)提供面向用户的操作接口,包括静态协商、策略管理等。

4.2 IKE密钥协商模块

支持静态和动态两种模式IKE协商。静态模式下,用户通过本软件手动触发IKE协商功能,动态模式下,IPSec管理软件在接收到内核的“请求SA”消息以后才会触发IKE协商。IKE协商模块接收协商请求并执行,成功后将SA配置信息告知策略管理模块,并调用策略配置模块配置SA到内核SAD数据库。

4.3 策略配置模块

根据需要配置的SA和SP的具体参数,并根据内核xfrm.h定义的14种消息格式将请求封装成“策略配置消息”,通过Netlink通信模块发送到内核。

4.4 Netlink通信模块

(1)Netlink通信初始化:创建套接字,指明PF_Netlink 协议簇、Netlink_XFRM 协议。

(2)接收到“策略配置消息”,进一步封装成内核Netlink消息格式,并发送到内核。

(3)接收并解析来自Netlink内核端的Netlink消息,根据消息内容具体处理。例如接收到“请求SA”消息,则触发IKE模块发起协商。

4.5 策略管理模塊

(1)在本地维护一个安全策略数据库,记录已存在的SA和SP,提供面向用户的策略查询接口。

(2)提供面向用户的安全策略管理接口,用户可以手动对策略进行增删改查等操作,模块接收到用户请求后,首先通过Netlink通信模块发送“策略配置消息”到内核,更新内核的数据库,然后在本地更新数据库,实现应用层和内核层的策略信息同步。

4.6 日志模块

(1)记录运行日志,包括用户操作过的所有指令。

(2)协商信息,包括协商对端的IP地址,协商成功记录等。

5 结束语

本文提出的实现方案为IPSec VPN提供了灵活方便的IKE密钥协商,安全策略管理,数据包安全处理机制,目前已经在Linux3.1操作系统上应用,经测试运行稳定,符合预期要求。在基于Linux操作系统的项目开发中,用户空间和内核空间的通信研究具有重要意义,本文提出的实现方案可以为同类软件开发提供思路。

参考文献

[1] 高海英,薛元星,辛阳.VPN技术[M].北京:机械工业出版社,2004.

[2] 余青霓.Linux防火墙[M].北京:人民邮电出版社,2000。

[3] 高月松,钱晶.基于Netfilter框架的IPSec VPN网关实现[J].泰州职业技术学院学报,2009(3):9-10.

[4] 章晓明,杜春燕,陆建德.Netlink 消息通信机制的研究和在 IPsec VPN 中的应用[J].微电子学与计算机,2007, 24(2): 135-138

[5] 周莉.Linux 2.6 IPsec 分析与 VPN 网关的研究与实现[D].苏州大学,2005.6.

作者简介:

黄超(1987-),男,硕士研究生;主要研究方向和关注领域:计算机网络、信息安全。

赵建平 (1977-),男,硕士研究生;主要研究方向和关注领域:嵌入式系统、信息安全。

韦勇钢(1983-),男,本科学士;主要研究方向和关注领域:移动通信信息、物联网安全。