《防火墙II――利用netfilter构建用户级防火墙》由会员分享,可在线阅读,更多相关《防火墙II――利用netfilter构建用户级防火墙(14页珍藏版)》请在金锄头文库上搜索。
1、四 川 大 学 计 算 机 学 院、软 件 学 院实 验 报 告 课程名称 信息安全产品开发实践 实验课时5实验项目防火墙II利用netfilter构建用户级防火墙实验时间2011年12月2号实验目的 1) 继续了解Linux下C语言程序开发的过程2) 了解什么是Netfilter3) 掌握 Netfilter工作机制 4) 知道利用netfilter构建用户级防火墙原理 5) 掌握Libipq工作流程与相关函数 实验环境 VMware5.0,RedHat Linux 9.0实验内容(算法、程序、步骤和方法) 试验题目:1. 设置iptables过滤规则为:所有从本机发出的icmp包全部到自己
2、编写的应用程序2. 编写应用程序,功能如下:1. 允许从本机出发,目的地址为win xp ip的icmp包;2. 丢弃其他任何icmp包;3. 当出现错误时,做错误处理,能够清理占用资源,退出程序。实验:一:Netfilter概述定义:Netfilter 更准确地讲是Linux 内核中,一个包过滤框架,默认地,它在这个框架上实现了包过滤、状态检测、网络地址转换和包标记等多种功能,因为它设计的开放性,任何有内核开发经验的开发人员,也可以很容易地利用它提供接口,在内核的数据链路层、网络层,实现自己的功能模块。工作机制:Netfilter的五种操作 二:Libipq简介 定义:Libipq是NetF
3、ilter框架的重要组成部分。任何时候在任何NetFilter规则链中,数据报都可以被排队转发到用户空间去。用户进程能对数据报进行任何处理。处理结束以后,用户进程可以将该数据报重新注入内核或者设置一个对数据报的目标动作。程序框架三:具体实现1.打开虚拟机,首先清空所有的防火墙规则2. 设置规则让我们发出的icmp协议的包都加入到ipv4的队列中3.程序目的是拦截所有的icmp包,只允许连接我们虚拟机主机的icmp包可以顺利通过,编写代码如下:4. 我们开始设置了将所有发出的icmp包都加入到队列中,因此所有的icmp包都会由网卡发出,所以,我们ping任何地址都应该是不通的5:搭建编译环境,并
4、设置过滤规则后,编译连接我们的程序6:我们执行程序,这时我们ping我们的主机应该是成功的从输出的结果可以看出程序正确的执行了。7:程序执行结果确实如我们所预料的,我们可以再ping一下别的主机看一下程序的执行结果结果仍旧是ping不通的综上就说明了我们的程序很好的实现了应有的功能。附源代码:一:test.c/test.c#include #include #include #include #include #include #define BUFSIZE 2048 static void die(struct ipq_handle *h)ipq_perror(passer);ipq_des
5、troy_handle(h);exit(1);int main(int argc, char *argv)int status;unsigned char bufBUFSIZE;struct ipq_handle *h;char *hostip = 192.168.1.100;char *recvip = NULL;struct iphdr *ipmsg;struct in_addr ipaddr;h = ipq_create_handle(0, PF_INET);if (!h)die(h);status = ipq_set_mode(h, IPQ_COPY_PACKET, BUFSIZE);
6、if (status 0)die(h);dostatus = ipq_read(h, buf, BUFSIZE, 0);if (status payload;ipaddr.s_addr = ipmsg-daddr;recvip = inet_ntoa(ipaddr);if(strcmp(hostip,recvip)=0)status = ipq_set_verdict(h, m-packet_id, NF_ACCEPT, 0, NULL);elsestatus = ipq_set_verdict(h, m-packet_id, NF_DROP, 0, NULL);if (status 0)di
7、e(h);break;default:fprintf(stderr, Unknown message type!n);break; while (1);ipq_destroy_handle(h);return 0;(接上)实验内容(算法、程序、步骤和方法)数据记录和计算 详细见上面结 论(结 果) 通过编写程序实现了预期防火墙应该实现的功能。 小 结 通过本实验,我掌握了:1) 进一步熟悉了Linux下C语言程序开发的过程;2) 对防火墙有了更深一步的了解3) 熟悉了怎么样通过程序实现防火墙的规则设置4) 了解了libipq的程序框架,知道了怎样将数据包由内核态交给我们的用户态程序处理目前我存
8、在的问题有:对Libipq接口函数掌握的不是很熟练。 指导老师评 议 成绩评定: 指导教师签名:实验报告说明 专业实验中心 实验名称 要用最简练的语言反映实验的内容。如验证某程序、定律、算法,可写成“验证”;分析。实验目的 目的要明确,要抓住重点,可以从理论和实践两个方面考虑。在理论上,验证定理、公式、算法,并使实验者获得深刻和系统的理解,在实践上,掌握使用实验设备的技能技巧和程序的调试方法。一般需说明是验证型实验还是设计型实验,是创新型实验还是综合型实验。实验环境 实验用的软硬件环境(配置)。实验内容(算法、程序、步骤和方法) 这是实验报告极其重要的内容。这部分要写明依据何种原理、定律算法、或操作方法进行实验,要写明经过哪几个步骤。还应该画出流程图(实验装置的结构示意图),再配以相应的文字说明,这样既可以节省许多文字说明,又能使实验报告简明扼要,清楚明白。数据记录和计算 指从实验中测出的数据以及计算结果。结论(结果) 即根据实验过程中所见到的现象和测得的数据,作出结论。小结 对本次实验的体会、思考和建议。备注或说明 可写上实验成功或失败的原因,实验后的心得体会、建议等。 注意: 实验报告将记入实验成绩; 每次实验开始时,交上一次的实验报告,否则将扣除此次实验成绩。