首页 ALG在netfilter中的实现

ALG在netfilter中的实现

举报
开通vip

ALG在netfilter中的实现ALG在netfilter中的实现droplet@kernelchina.orgwww.kernelchina.org目录 algoverview netfilteralgimplementation ftp sipwww.kernelchina.org什么是ALG ALG:applicationlevelgateway 一种在安全设备里面分析和修改应用层协议内容的技术www.kernelchina.orgALG的用途 创建动态连接 有些应用层协议在协议交互过程中需要创建动态连接,动态连接的参数通过协议内容传递。连...

ALG在netfilter中的实现
ALG在netfilter中的实现droplet@kernelchina.orgwww.kernelchina.org目录 algoverview netfilteralgimplementation ftp sipwww.kernelchina.org什么是ALG ALG:applicationlevelgateway 一种在安全设备里面分析和修改应用层 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 内容的技术www.kernelchina.orgALG的用途 创建动态连接 有些应用层协议在协议交互过程中需要创建动态连接,动态连接的参数通过协议内容传递。连接可以分为控制连接和数据连接。一般来说,包含动态连接参数的连接叫做控制连接;不包含动态连接参数的连接叫做数据连接。由于在配置安全设备的过滤策略时,无法预知动态连接的地址和端口,所以需要ALG技术来帮助动态连接穿越安全设备。 修改协议内容 如果在安全设备上启用了地址转换(NAT)功能,那些在协议内容中传递动态连接参数的应用协议就有可能无法工作(协议内容中的地址有可能是私有地址,或者是需要映射到私有地址的公开地址)。ALG技术可以修改协议内容中的地址或端口,进而帮助这些应用协议正确穿越安全设备。 www.kernelchina.orgALG的实现 关键字匹配 在协议内容里查找地址或端口的关键字。 协议解析 解析协议内容,生成相应的数据结构。www.kernelchina.orgALG的要点 什么时候创建动态连接? 根据协议内容判断何时需要创建动态连接。需要注意动态连接的参数。 什么时候修改协议内容? 开启地址转换功能时才需要修改协议内容。不仅要修改地址,而且可能需要修改端口。 如何修改协议内容? 协议内容中的地址和端口是如何表示的?是字符串还是数字(十进制还是十六进制)。协议中的相关项是否需要修改(比如数据长度)。校验和是否需要重新计算?是否需要分配一个新的数据包。www.kernelchina.orgALG的图示原始控制连接新建数据连接新建控制连接新的控制连接还可以创建新的控制连接或数据连接新的数据连接传输数据,不需要关心应用层协议内容www.kernelchina.orgnetfilterALG conntrack conntrack是管理连接的模块。每个连接都可以与一个ip_conntrack_helper关联。ip_conntrack_helper是netfilter中用来分析应用层协议的数据结构。 nat nat是完成地址转换功能的模块。每个连接都可以与一个ip_nat_helper关联。ip_nat_helper是netfilter中用来修改应用层协议的数据结构。www.kernelchina.orgip_conntrack_helper 成员变量 说明 flags IP_CT_HELPER_F_REUSE_EXPECT:动态连接达到最大数后,是否允许创建新的动态连接 max_expected 相关连接可以创建的最大动态连接数 timeout 相关连接创建的动态连接的超时时间 tuple 连接与helper关联的参数 mask 掩码 help 分析应用层协议创建动态连接的函数www.kernelchina.orgip_nat_helper 成员变量 说明 flags IP_NAT_HELPER_F_ALWAYS:如果没有与连接关联的动态连接,是否调用help函数IP_NAT_HELPER_F_STANDALONE:helper是独立的,没有与之相关的ip_conntrack_helper tuple 连接与helper关联的参数 mask 掩码 help 分析、修改应用层协议的函数 expect 为新连接创建地址转换结构的函数www.kernelchina.orgip_conntrack_expectip_conntrackip_conntrack_expectip_conntrackip_conntrack_expect原始控制连接与expect没有关联新建动态连接与expect有关联www.kernelchina.org调用 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 ip_conntrack->helper->helpip_conntrack.nat->helper->helpip_conntrack->helper->helpip_conntrack.nat->helper->expectip_conntrack_expect->expectfnip_conntrack.nat->helper->help原始控制连接调用流程新建动态连接调用流程子连接的helper父连接的helperwww.kernelchina.orgip_conntrack_helper调用点NF_IP_PRE_ROUTINGNF_IP_LOCAL_INNF_IP_LOCAL_OUTNF_IP_FORWARDNF_IP_POST_ROUTINGROUTEROUTE链路层传输层网络层www.kernelchina.orgip_nat_helper调用点NF_IP_PRE_ROUTINGNF_IP_LOCAL_INNF_IP_LOCAL_OUTNF_IP_FORWARDNF_IP_POST_ROUTINGROUTEROUTE链路层传输层网络层www.kernelchina.org重要函数 ip_conntrack_expect_related 把expect与conntrack关联起来 ip_conntrack_change_expect 修改expect的参数 ip_conntrack_unexpect_related 解除expect与conntrack的关联关系www.kernelchina.org源转换的地址变化OSRCODSTRSRCRDST转换前 OSRC=RDST;ODST=RSRC转换后 OSRC!=RDST;ODST=RSRC注:O(ORIGINAL);R(REPLY);SRC(SOURCE);DST(DESTINATION)www.kernelchina.org目的转换的地址变化OSRCODSTRSRCRDST转换前 OSRC=RDST;ODST=RSRC转换后 OSRC=RDST;ODST!=RSRC注:O(ORIGINAL);R(REPLY);SRC(SOURCE);DST(DESTINATION)www.kernelchina.org地址转换与发送方向注1:ORIGINAL是连接的ORIGINAL方向;REPLY是连接的REPLY方向。注2:OUT,发出方向;IN,进入方向www.kernelchina.org注意事项 ip_conntrack_helper与ip_nat_helper之间如何传递参数? ip_conntrack_helper->help分析应用层协议,可以把分析结果保存在ip_conntrack_expect.help中。这样可以避免在ip_nat_helper->help中再次分析应用层协议。 IP_NAT_HELPER_F_ALWAYS的作用? 一般情况下,只有连接有与之关联的expect才会调用ip_nat_helper->help,有几个expect就会调用几次。如果有这个标记,那么,即使连接没有与之关联的expect,ip_nat_helper->help依然会被调用。 连接中与应用层协议相关的结构? 连接中,与应用层协议相关的结构是ip_conntrack.help。www.kernelchina.orgftp协议概览 面向命令行的协议,命令行以\r\n结束。 控制连接,目的端口默认是21。 控制连接传输命令,数据连接传输数据。 创建数据连接的命令有两种 PORT:主动方式,数据连接由服务器发起。 PASV:被动方式,数据连接由客户端发起。www.kernelchina.orgftp协议过程客户端服务端客户端服务端控制连接数据连接在控制连接上传输port或pasv命令,创建数据连接www.kernelchina.orgPORT分析客户端服务端1:客户端向服务端发送PORT命令2:服务端向客户端发起数据连接防火墙上创建一个服务端到客户端的expect,expect的源端口未知。如果启用了NAT,需要修改PORT字串中的地址和端口,同时更新expect中的目的地址和端口。www.kernelchina.orgPASV分析客户端服务端1:客户端向服务端发送PASV命令2:服务端向客户端发送连接参数3:客户端向服务端发起数据连接防火墙上创建一个客户端到服务端的expect,expect的源端口未知。如果启用了NAT,需要修改227字串中的地址和端口,同时更新expect中的目的地址和端口。www.kernelchina.org不转换注1:消息编号请参考前面的PORT和PASV命令的时序图。注2:没有注释的项代表既不创建连接,也不修改地址。www.kernelchina.org源转换www.kernelchina.org目的转换www.kernelchina.org协议匹配方法 PORT字串 PORTh1,h2,h3,h4,p1,p2 227字串 227EnteringPassiveMode(h1,h2,h3,h4,p1,p2)www.kernelchina.org注意事项 数据连接地址与控制连接地址不一致的问题 port或227字串中的地址可能与控制连接的地址不一致(可以是其他主机的地址),这样会导致潜在的漏洞出现。www.kernelchina.orgsip协议概览 采用与http类似的格式 当前版本是2.0 基于UDP或TCP 默认端口是5060www.kernelchina.orgsip协议元素www.kernelchina.org代理模式www.kernelchina.org重定向模式www.kernelchina.org1:REGISTER2:200OK3:REGISTER4:200OKSIPSERVER注册www.kernelchina.org呼叫1:INVITESDPA2:INVITESDPA3:180Ringing4:180Ringing5:200OKSDPB6:200OKSDPB7:ACK8:INFO9:200OK10:INFO11:200OKSIPSERVER双向数据流www.kernelchina.org挂断1:BYE2:200OKSIPSERVERwww.kernelchina.orgsip消息格式消息头消息体sip消息分为请求和应答两种。请求消息以请求命令开头;应答消息以状态码开头。在消息头里包含对消息体的描述。消息体是可选的。它的内容在消息头中有描述。比如sdp消息。www.kernelchina.org请求消息举例REGISTERsip:172.16.1.6SIP/2.0Via:SIP/2.0/UDP172.16.1.10Max-Forwards:70From:<sip:bb@172.16.1.6>;epid=82042903F996B1To:<sip:bb@172.16.1.6>Call-ID:1222589643@172.16.1.10CSeq:1REGISTERUser-Agent:PolycomVSX3000Release7.0.1-27Jul20041:54Contact:<sip:172.16.1.10>Content-Length:0www.kernelchina.org应答消息举例SIP/2.0200OKVia:SIP/2.0/UDP172.16.1.10Server:Applico-MMS/3.2.22To:<sip:bb@172.16.1.6>;tag=1434379463257From:<sip:bb@172.16.1.6>Call-ID:1222589643@172.16.1.10CSeq:1REGISTERContact:<sip:172.16.1.10>;expires=3600Content-Length:0www.kernelchina.orgsdp举例v=0o=mhandley28908445262890842807INIP4126.16.64.4s=SDPSeminari=ASeminaronthesessiondescriptionprotocolc=INIP4224.2.17.12/127t=28733974962873404696a=recvonlym=audio49170RTP/AVP0m=video51372RTP/AVP31m=application32416udpwbwww.kernelchina.orgsip字段 REQUESTURI:请求地址或帐号 FROM:源帐号 TO:目的帐号 CONTACT:主机监听地址和端口 VIA:应答回复地址和端口www.kernelchina.orgROUTE:请求发送路由RECORD-ROUTE:应答发送路由CALL-ID:主机上用来标识会话的ID,与FROM和TO一起组成一个CALL-LEG(Dialog),唯一确定一个会话。sdp字段 o:发送消息的地址 c:本机监听地址 m:本机音频、视频监听端口www.kernelchina.org不转换(1)SIPSERVERwww.kernelchina.org����FIREWALL��注册过程注1:消息编号参见前面的注册,呼叫,挂断的时序图。注2:没有注释的消息,表示不需要创建连接,也不需要修改内容。注3:*表示无法确定消息的发送方向(sip的每个消息都有可能在一个新连接中发送) 消息编号 发送方向 创建连接 修改内容 1 OUT contact,via 2 * 3 OUT contact,via 4 *www.kernelchina.org呼叫过程 消息编号 发送方向 创建连接 修改内容 1 OUT via 2 OUT via 3 * via 4 * via 5 * via 6 * via 7 8 9 10 11www.kernelchina.org挂断过程 消息编号 发送方向 创建连接 修改内容 1 2www.kernelchina.org不转换(2)SIPSERVERwww.kernelchina.org����FIREWALL��注册过程 消息编号 发送方向 创建连接 修改内容 1 2 3 OUT contact,via 4 *www.kernelchina.org呼叫过程 消息编号 发送方向 创建连接 修改内容 1 2 OUT via,m 3 * via 4 5 * via,m 6 7 * via 8 * via 9 * via 10 * via 11 * viawww.kernelchina.org挂断过程 消息编号 发送方向 创建连接 修改内容 1 * via 2 *www.kernelchina.org源转换(1)SIPSERVERFIREWALL上配置PhoneA,PhoneB通过源转换访问SIPSERVER。PhoneA,PhoneB的地址是私网地址,SIPSERVER的地址是公网地址。www.kernelchina.org����FIREWALL��注册过程注1:消息编号参见前面的注册,呼叫,挂断的时序图。注2:没有注释的消息,表示不需要创建连接,也不需要修改内容。 消息编号 发送方向 创建连接 修改内容 1 OUT contact,via contact,via 2 IN 3 OUT contact,via contact,via 4 INwww.kernelchina.org呼叫过程 消息编号 发送方向 创建连接 修改内容 1 OUT via via 2 IN via 3 OUT via via 4 IN via 5 OUT via via 6 IN via 7 8 9 10 11www.kernelchina.org挂断过程 消息编号 发送方向 创建连接 修改内容 1 2www.kernelchina.org源转换(2)SIPSERVERFIREWALL上配置PhoneB通过源转换访问SIPSERVER。PhoneB的地址是私网地址,PhoneA,SIPSERVER的地址是公网地址。www.kernelchina.org����FIREWALL��注册过程 消息编号 发送方向 创建连接 修改内容 1 2 3 OUT contact,via contact,via 4 IN contactwww.kernelchina.org呼叫过程 消息编号 发送方向 创建连接 修改内容 1 2 IN via 3 OUT via contact,via 4 5 OUT via,m contact,via,o,c 6 7 IN via 8 IN via 9 OUT via contact,via 10 OUT via contact,via 11 IN viawww.kernelchina.org挂断过程 消息编号 发送方向 创建连接 修改内容 1 IN via 2 OUTwww.kernelchina.org目的转换(1)SIPSERVERFIREWALL上配置PhoneA,PhoneB通过目的转换访问SIPSERVER。PhoneA,PhoneB的地址是公网地址,SIPSERVER的地址是私网地址。www.kernelchina.org����FIREWALL��注册过程 消息编号 发送方向 创建连接 修改内容 1 IN contact,via uri,from,to 2 OUT from,to 3 IN contact,via uri,from,to 4 OUT from,towww.kernelchina.org呼叫过程 消息编号 发送方向 创建连接 修改内容 1 IN via uri,from,to 2 OUT via via,from,to 3 IN via from,to 4 OUT via via,from,to 5 IN via from,to 6 OUT via via,from,to 7 8 9 10 11www.kernelchina.org挂断过程 消息编号 发送方向 创建连接 修改内容 1 2www.kernelchina.org目的转换(2)SIPSERVERFIREWALL上配置PhoneB通过目的转换访问SIPSERVER。PhoneB的地址是公网地址,PhoneA,SIPSERVER的地址是私网地址。www.kernelchina.org����FIREWALL��注册过程 消息编号 发送方向 创建连接 修改内容 1 2 3 IN contact,via uri,from,to 4 OUT from,towww.kernelchina.org呼叫过程 消息编号 发送方向 创建连接 修改内容 1 2 OUT via,m uri,from,to,contact,via,o,c 3 IN from,to 4 5 IN via,m from,to 6 7 OUT via uri,from,to,contact,via 8 OUT via uri,from,to,contact,via 9 IN via from,to 10 IN via uri,from,to 11 OUT via from,towww.kernelchina.org挂断过程 消息编号 发送方向 创建连接 修改内容 1 OUT via uri,from,to,contact,via 2 IN via from,towww.kernelchina.org不转换 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf :创建连接注:!=代表不等于;=代表等于;*代表在同一网络 REQUEST RESPONSE IN OUT IN OUT URI FROM TO CONTACT !=RDST OSRC* !=RDST OSRC* VIA =RDST =OSRC =RDST =OSRC O C M !=RDST OSRC* !=RDST OSRC*www.kernelchina.org源转换总结:创建连接注:!=代表不等于;=代表等于;*代表在同一网络 REQUEST RESPONSE IN OUT IN OUT URI FROM TO CONTACT !=RDST OSRC* !=RDST OSRC* VIA =RDST =OSRC =RDST =OSRC O C M !=RDST OSRC* !=RDST OSRC*www.kernelchina.org源转换总结:修改内容 REQUEST RESPONSE IN OUT IN OUT 条件 修改 条件 修改 条件 修改 条件 修改 URI =RDST OSRC =OSRC RDST FROM =RDST OSRC =OSRC RDST =RDST OSRC OSRC RDST TO =RDST OSRC =OSRC RDST =RDST OSRC OSRC RDST CONTACT =RDST OSRC OSRC* RDST =RDST OSRC OSRC* RDST VIA =RDST OSRC =OSRC RDST =RDST OSRC =OSRC RDST O =RDST OSRC =OSRC RDST =RDST OSRC =OSRC RDST C =RDST OSRC =OSRC RDST =RDST OSRC =OSRC RDST M =RDST OSRC =OSRC RDST =RDST OSRC =OSRC RDSTwww.kernelchina.org目的转换总结:创建连接 REQUEST RESPONSE IN OUT IN OUT URI FROM TO CONTACT !ODST RSRC* !ODST RSRC* VIA =ODST =RSRC =ODST =ODST O C M =ODST =RSRC =ODST =RSRCwww.kernelchina.org目的转换总结:修改内容 REQUEST RESPONSE IN OUT IN OUT 条件 修改 条件 修改 条件 修改 条件 修改 URI =ODST RSRC =RSRC ODST FROM =ODST RSRC =RSRC ODST =ODST RSRC =RSRC ODST TO =ODST RSRC =RSRC ODST =ODST RSRC =RSRC ODST CONTACT =ODST RSRC RSRC* ODST =ODST RSRC RSRC* ODST VIA =ODST RSRC =RSRC ODST =ODST RSRC =RSRC ODST O =ODST RSRC =RSRC ODST =ODST RSRC =RSRC ODST C =ODST RSRC =RSRC ODST =ODST RSRC =RSRC ODST M =ODST RSRC =RSRC ODST =ODST RSRC =RSRC ODSTwww.kernelchina.org注意事项(1) 每一个消息都有可能在一个新连接中传输,不同的协议实现,创建的连接不同 from,to,call-id组成一个CALL-LEG,其中call-id是本地使用的参数,所以不需要修改 如果是服务器转发的消息,不能简单地用地址是否相等来判断是否需要修改地址,而是要判断它们的地址是否来自同一网络 如果通话双方在安全设备的同一侧,需要特殊处理以避免不必要的转换www.kernelchina.org注意事项(2) 连续的注册包,修改contact的地址和端口时需要保持一致,否则会在服务器上出现多个注册 不需要为contact创建多个连接,只要注册时创建就可以了,但是以后每次改contact的地址和端口时,需要和第一次保持一致www.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgROUTE:请求发送路由RECORD-ROUTE:应答发送路由CALL-ID:主机上用来标识会话的ID,与FROM和TO一起组成一个CALL-LEG(Dialog),唯一确定一个会话。www.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.orgwww.kernelchina.org
本文档为【ALG在netfilter中的实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥11.9 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
峰行天下
暂无简介~
格式:ppt
大小:1MB
软件:PowerPoint
页数:0
分类:
上传时间:2019-01-07
浏览量:9