1 RFC文档IKE实现求
2 实现总体思想
IKE作守护进程运行负责处理户理配置命令协商实体交互IKE数报处理核SADB交互整系统功划分成模块:IKE理模块IKE验证模块消息处理模块中消息处理模块消息源分子模块:网络消息处理模块核消息处理模块状态消息处理模块户命令处理模块模块协商数进行享设计IKE状态库模块够提供统接口实现查询更新删添加等操作IKE作应层协议实现应层需核SADB进行SA消息传递提供接口方案中实现PF_KEY协议作核IKE守护进程接口
左图描述系统基框架
中户理接口整IPSEC网关配置子界面提供户友理配置监视界面
UDP500表示IKE守护进程利UDP协议500端口进行网络通信
21 模块功简介绍
◆ 理模块负责处理户命令调应处理函数分析运行数返回户理接口
◆ 消息服务器模块负责监控消息队列中事件调注册处理函数消息队列分理消息网络消息核消息SA状态消息
◆ IKE验证模块负责验证IKE协议载荷数构造响应请求数报文
◆ IKE状态库记录IKE运行期间需协商信息前SA信息
22 模块交互关系
◆ 理模块消息处理模块
理模块够理员某命令传递消息处理模块理消息处理子模块通信机制利AF_UNIX socket协议簇系统创建时运行文件然理模块理消息子模块创建 AF_UNIX socket int sock socket(AF_UNIX SOCK_STREAM 0)理模块socket发送理消息理消息处理子模块监听socket
◆ 消息处理模块IKE验证模块
网络消息处理模块分析提取数组织成msg_digest数结构然数作参数调IKE验证模块进行处理IKE验证模块返回继处理标志构建响应载荷失败代码添加msg_digest结构中
数结构(概念结构):
struct msg_digest {
原始数包
消息达接口
发送者ip址
发送者端口号
IKE载荷
加密标志
包应协商象状态
前状态象
响应报文载荷
验证失败原
}
3 模块实现
31 理模块实现
311 设计思想
理模块提供系统运行状态状态设置服务提供系统需种初始参数包括身远程安全网关身份信息密钥信息协商策略协商时机包括必防火墙策略设置信息增强安全性模块设计够进行实时监控实时反映系统运行状态时响应网命令
配置文件记录系统初始运行参数记录静态般固定信息日志文件记录系统运行事件包括策略更改状态更改网络异常事件
理模块层提供命令接口直接动态装载更改协商信息启动协商删SA模块命令数参数传递消息处理模块具体执行
312 具体实现
3121 功接口
1 载入重载协商通道参数启动关闭协商通道
2 sa更新删添加
3 静态配置文件修改
4 数统计状态显示检查日志
3122 安全考虑
配置文件中配置信息身份密钥信息采shadow加密方式
32 消息服务器模块
321 设计思想
系统运行期间理模块发送理消息核发出SA请求更新消息网络传协商消息外系统身网络拥塞产生超时消息设置SA生命期更新消息模块设计成服务器模式种消息类型设置条消息队列模块轮询条消息队列果消息调应消息处理函数处理
322 具体实现
3221 理消息处理模块
Admsg_handle接收理模块消息消息进行完整性检查根消息类型调应处理函数例 terminate_connection终止协商initiate_connection启动协商等等
3222 核消息处理模块
核响应消息处理分两种:步异步
步消息调函数核发送pfkey消息阻塞该进程监听核响应消息例程序完成阶段2 sa协商核发送安装sa消息然等核响应消息果时该pfkey socket接口消息读返回否直阻塞监听该socket接口核处理响应消息发送已开pfkey socket 接口接收响应消息时根进程号pfkey消息号确定否消息果进程号进程号核进程号0消息类型SADB_ACQUIRE丢弃条消息果符合两条件检查pfkey消息号果消息号处理否排队异步消息队列pfkey_iq_head时果pfkey socket接口直消息读直阻塞进程直等响应消息然没消息立刻返回
异步消息两种情况进程发送核迟迟没处理致延误发送响应二核动发出消息例请求SASA期
模块监听消息达时取出消息根消息类型调应消息分析处理函数检查完整性合法性然根SA类型调响应函数
3223 网络消息处理模块
网络消息处理模块充服务器充客户端角色监听UDP/500端口时服务器作协商响应者服务器生成socket间协商通信发出协商请求时作协商发起者充客户端
模块功IKE载荷数封装成UDP报接收UDP500数报剥离出IKE载荷
3224 超时事件处理模块
网络消息处理模块外发送UDP报时防止报文丢失超时事件队列中注册事件设置超时时间达超时事件处理模块调注册超时处理函数重发丢弃直重发次数达事件清需报文达时网络消息处理模块会注册超时事件队列中清
生成sa象期事件样注册超时队列中软期硬期达调注册处理函数重协商删sa
33 IKE验证模块
331 设计思想
根IKE协议RFC文档种模式协商程固定消息条数条消息容作明确规定差认证方式载荷加密/解密方式样协商程中接收消息划分协商状态种状态应状态迁移函数协商程中条消息调时状态应迁移函数进行分析处理验证通跃迁状态状态迁移函数定义址统放状态迁移函数表中启动ike时状态迁移函数入口址写张索引表中样需某条消息进行处理时时协商状态作索引找状态函数入口址然根认证方式找正确状态迁移函数进行处理
迁移函数里协议规定载荷数进行验证验证通构建响应载荷果认证出现错误根安全性级决定否peer发送通知载荷构建通知载荷中阶段1时isakmp sa没建立起通知载荷明文发送没hash载荷
阶段2状态处理函数中果sa已建立起通pfkey接口核安装该sa
332 具体实现
stf_status State_Transfer_Function(struct msg_digest *md)
参数md网络消息处理函数提取出IKE协商交换载荷返回值类型stf_status指示网络消息处理模块继处理
STF_IGNORE 忽略
STF_NO_REPLY *成功没响应报文发送*
STF_UNPEND_QUICK * 阶段1协商成功没响应消息协商阶段2协商 *
STF_REPLY *成功需发送响应报文*
STF_REPLY_UNPEND_QUICK * 响应阶段1成功协商阶段2协商*
STF_INTERNAL_ERROR * 抛弃接收报文相关协商失败 *
STF_FAIL * 某方验证失败抛弃协商建立数结构发送通知载荷*
34 IKE状态库
341 设计思想
IKE开始协商时需知道必协商策略密钥信息协商网关身份数等必数协商期间需记录协商象状态协商象存放协商SA协商信息IKE动重协商监视SA状态数统组织理提供统接口便模块享
342 具体实现
然称库需复杂操作数结构通指针组织成链表形式查找更新删添加应链表操作系统两条全局变量链表分connectionsstates
Connection :记录条协商通道信息集合作ike策略库
名字:标识条connection
策略:策略中包含isakmp 认证策略包括ipsec 验证加密策略sa时策略掩码位指示Pluto16位整形数值记录定义实现策略没预留出策略位置考虑种策略分开样会增加太空间花销进行额外分类操作扩展Isakmp 策略:PSK DSS_sigRSA_sigRSA_encryptPRSA_encryptIPSEC策略:EncryptAuthenticatecompresstunnelpfs:PASS DROPON_HOLD
时间参数:包括isakmp SA存活期ipsec sa存活期 更新密钥时间间隔rekeymargin机更新参数refuzz更新密钥重试次数sa 剩余时间rekeymargin * ( 1 rnd)时进行更新中rnd0refuzz数防止协商双方时进行密钥更新产生冗余sa协商
协商两网关机信息:包括身份(IPaddrFQDNUSER@FQDN)机址路址子网址端口号等等
接口设备
协商sa序列号
连接类型:CK_TEMPLATE通配连接peer址anyaddr监听移动户核协商请求CK_PERMANENT般连接CK_INSTANCECK_TEMPLATE连接实例化CK_GOING_AWAY正删连接
信息(网关信息包括公钥身份根DNSsec)
state :记录协商sa状态属性值集合作ikeSA库
序列号:
附connection
加密/验证信息包括算法类型加密器/验证器oakley 组
AHESPIPCOMP 信息包括具体协议属性spi密钥
阶段2完美前oakley组
DOISituation 策略消息序列号已消息序列号DH值种密钥素材值
状态
应超时事件
connection结构连接connections链查找更新删添加链操作
4 面核接口实现
41 设计思想
通实现PF_KEY协议作核IKE守护进程接口PF_KEY新socket协议簇信密钥理程序操作系统核部密钥理进行通信里密钥理程序IKE守护进程核密钥理SADB概念模型:
PF_KEY协议簇socket操作类型socket操作差
int s socket(PF_KEY SOCK_RAW PF_KEY_V2)
IKE守护进程通socket接口发送接收信息核通信socket 操作socket样bind() connect() socketpair() accept() getpeername() getsockname() ioctl() and listen()
实现消息种类:
◆ SADB_ADD 核SADB增加SA
◆ SADB_DELETE 核SADB删SA
◆ SADB_GET 核SADB获取SA
◆ SADB_REGISTER IKE守护进程注册策提供服务协议类型AHESP
◆ SADB_EXPIRE 核发送IKE守护进程某SA期包括软硬期
42 具体实现
核部分
核启动时调ipsec_init()(ipsec_initc)pf_key接口调pfkey_init()(pfkey_v2c)函数注册服务SA类型:AHESPIPIP果配置IP_COMP注册首先建立全局变量结构结构然定义SA类型添加应pfkey_supported_list队列中然注册pfkeysocket操作集
struct supported_list *pfkey_supported_list[SADB_SATYPE_MAX+1]
种SA类型链表数组说明前核支持Sa类型
struct socket_list *pfkey_registered_sockets[SADB_SATYPE_MAX+1]
种SA类型链表数组说明前核中注册pfkey socket
struct socket_list *pfkey_open_sockets NULL
应pfkey接口进程开socket
struct sock *pfkey_sock_list NULL
应pfkey接口进程开socket应sock
IKE 部分
首先IKE启动时调初始化函数init_kernel()初始化pfkey接口创建PF_KEY SOCKET pfkeyfd socket(PF_KEY SOCK_RAW PF_KEY_V2)
IKE利socket接口核传递消息
接着调pfkey_register(void)注册协商SA类型
函数实现详细说明
略
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档