利用netfilter构建用户态防火墙

利用netfilter构建用户态防火墙

ID:19891284

大小:925.00 KB

页数:22页

时间:2018-10-07

利用netfilter构建用户态防火墙_第1页
利用netfilter构建用户态防火墙_第2页
利用netfilter构建用户态防火墙_第3页
利用netfilter构建用户态防火墙_第4页
利用netfilter构建用户态防火墙_第5页
资源描述:

《利用netfilter构建用户态防火墙》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、防火墙II——利用netfilter构建用户级防火墙2012-12课程内容Netfilter概述Netfilter工作机制利用netfilter构建用户级防火墙原理Libipq工作流程与相关函数实验题目Netfilter概述Netfilter更准确地讲是Linux内核中,一个包过滤框架,默认地,它在这个框架上实现了包过滤、状态检测、网络地址转换和包标记等多种功能,因为它设计的开放性,任何有内核开发经验的开发人员,也可以很容易地利用它提供接口,在内核的数据链路层、网络层,实现自己的功能模块。Netfilter工作机制Netfilter的五种操作NF_DROP丢弃该报文,释放所有与该报

2、文相关的资源;NF_ACCEPT接受该报文,并继续处理;NF_STOLEN该报文已经被HOOK函数接管,协议栈无须继续处理;NF_QUEUE将该报文传递到用户态去做进一步的处理;NF_REPEAT再次调用本HOOK函数。利用netfilter构建防火墙在内核中注册自己的钩子函数;利用IP_QUEUE实现内核与用户层之间的数据包交换,实现用户态防火墙利用netfilter构建用户态防火墙机制当HOOK处理函数返回NF_QUEUE值时,内核协议栈将通过LinuxNetLink通信机制把当前报文传递到用户态,由用户态的防火墙程序进行处理。这样,只要能够在相应的HOOK点上返回NF_QUE

3、UE值,就可以安心地在用户态使用自己的程序来过滤报文了,这个功能可以由iptables实现。Libipq简介Libipq是NetFilter框架的重要组成部分。任何时候在任何NetFilter规则链中,数据报都可以被排队转发到用户空间去。用户进程能对数据报进行任何处理。处理结束以后,用户进程可以将该数据报重新注入内核或者设置一个对数据报的目标动作。开发流程设置过滤环境编写应用程序设置过滤环境加载过滤需要的内核模块#modprobeiptable_filter#modprobeip_queue设置过滤规则iptables-AOUTPUT-picmp-jQUEUEIptables-AO

4、UTPUT–ptcp–jQUEUELibipq程序框架初始化ipq_create_handle()设置包复制规则ipq_set_mode()读取包数据ipq_read()包处理ipq_set_verdict()}销毁ipq_destroy_handle()包过滤处理循环while(1){分析包ipq_message_type()ipq_get_packet()Libipq接口函数(1)建立ipq的handle: structipq_handle*ipq_create_handle(u_int32_tflags,u_int32_tprotocol);flags:基本上没用,通常设为0

5、;protocol:制定想获取协议的队列,PF_INET为IPV4队列,PF_INET6为IPV6队列成功:返回一个不为空的指针;失败:返回一个NULL指针元数据structnlmsghdr{__u32nlmsg_len;/*Lengthofmessageincludingheader*/__u16nlmsg_type;/*Messagecontent*/__u16nlmsg_flags;/*Additionalflags*/__u32nlmsg_seq;/*Sequencenumber*/__u32nlmsg_pid;/*SendingprocessPID*/};Libipq接口

6、函数(2)设置IPQ的拷贝模式:用户空间来设置ip_queue的接收数据模式的.intipq_set_mode(conststructipq_handle*h,u_int8_tmode,size_tlen)h:是通过ipq_create_handle()获得的句柄指针;mode:设定拷贝模式,IPQ_COPY_META和IPQ_COPY_PACKET。当为IPQ_COPY_META时,内核将在其后的报文传递中只传递“报文的元数据”;当为IPQ_COPY_PACKET时,内核将同时传递“报文的元数据”和报文本身len:请求拷贝的报文长度成功:返回一个非0的正数;失败:返回-1;Lib

7、ipq接口函数(3)从内核中的packetqueue中读取数据包,将其拷贝到buf指定的缓冲区ssize_tipq_read(conststructipq_handle*h,unsignedchar*buf,size_tlen,inttimeout);h:ipq_create_handle创建的句柄;buf:存放数据包的缓冲区;len:拷贝的字节数;timeout:超时时限,0表示函数直到指定的数据读到缓冲区里接触阻塞,负数,表示函数马上接触阻塞。成功:返回一个大于0

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。