免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6724 | 回复: 10
打印 上一主题 下一主题

iptables的mac匹配原理? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-18 12:06 |只看该作者 |倒序浏览
我们知道,iptables一般只过滤网络层和传输层的内容,那-mac -source-mac匹配模块的原理是什么?问了很多人,都说不清楚,由于对网络协议栈内部的东西没有时间研究,不知道哥德巴赫斑竹和独孤前辈能不能给出解释啊?即mac模块为什么只能匹配源地址,iptables的mac模块是如何获得mac地址而进行匹配的?

论坛徽章:
0
2 [报告]
发表于 2011-04-18 12:17 |只看该作者
这个有什么不清楚的呀?skb中包含了mac,把它拿来与用户设定的值相比即可……

论坛徽章:
0
3 [报告]
发表于 2011-04-18 19:53 |只看该作者
我重温了skb_buff结构,谢谢独孤前辈。但mac模块为什么只能匹配源mac,目的mac为什么不能匹配呢?

论坛徽章:
0
4 [报告]
发表于 2011-04-18 20:40 |只看该作者
在iptables的hook点NF_IP_PRE_ROUTING 上数据报文的目的mac就是本机接口的mac, 匹配这个mac没什么意义吧!。 在NF_IP_FORWARD,NF_IP_LOCAL_OUT,NF_IP_POST_ROUTING,这些hook点上还取不到报文的目的mac。
iptables mac 模块是用来做ip和mac地址绑定的,匹配目的mac意义不大吧!

论坛徽章:
0
5 [报告]
发表于 2011-04-19 09:17 |只看该作者
不能匹备的目的很简单,目的mac是在离开网络层,进入链路层时加上的……你可以在二层过滤,因为这个时候已经有目的mac了,以达到你想要的。ebtables可能是你想要的。

评分

参与人数 1可用积分 +6 收起 理由
Godbach + 6 感谢分享

查看全部评分

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2011-04-19 10:08 |只看该作者
但mac模块为什么只能匹配源mac,目的mac为什么不能匹配呢?

建议了解一下数据包的发送和处理流程吧。
发出去的包,在网络层时还没有 MAC 头部呢。

论坛徽章:
0
7 [报告]
发表于 2011-04-21 11:09 |只看该作者
谢谢各位大侠的指导,最近在研究snort和netfilter的联动,于是开始读snort和netfilter源码,但进展不大。推荐一本很经典的书<linux防火墙>(拉什著,这个是2009年出来的,不是以前那本linux防火墙3),再次谢谢大家的帮助,等我把实验搞出来后也写个读书笔记啊。

论坛徽章:
0
8 [报告]
发表于 2011-04-21 11:24 |只看该作者
这是我的snort与netfilter的两个方案,不知道行不行。
方案一
通过第三章对snort、snort_inline、netlink和netfilter的比较分析,我们知道snort_inline工作在用户态,netfilter工作在内核态,因此会很自然地提出这样一种方案,如图所示,我们在netfilter的filter表的钩子点NF_IP_FORWARD以及NF_IP_LOCAL_IN上把经过的数据包交给内核的ip_queue模块,ip_queue模块利用Netlink机制再把该数据包传递到用户态的snort_inline,snort_inline对该数据包进行规则检测,如果匹配且匹配结果是snort_inline新增的三个动作(即drop/sdrop/reject),那么snort_inline通过ipq_set_verdict函数(定义在<libipq.h>中,man 3 ipt_set_verdict)将匹配结果和修改后的数据包(如果数据包没有在snort_inline修改,则不须传回)传回netfilter,netfilter根据匹配结果进行相应处理。我们可以用一个式子来表示这种方案:网桥+防火墙+snort_inline+ip_queue。

这种方案最大的优点是原理比较清晰简单,可操作性强,但也存在如下一些问题:
        制约snort的各种问题都有可能成为这种方案的问题。例如尽管Snort检测规则库包含的检测类型比较齐全,但其中依然有很多规则因为各种因素设计不合理(如冗余、冲突等等),有的甚至是错误的,这主要是snort本身存在的问题,因此规则库的优化是一个研究的话题。
        大量数据包在内核空间和用户空间往返处理,势必会导致时空开销增加。
        因为这种方案以桥模式串接在网络中,很容易导致网络瓶颈。我们可以利用零拷贝技术和硬件加速技术等来改善这个不足。

方案二
针对第一种方案的不足,我们可以把入侵检测的大部分功能(因为入侵检测规则并不能一一转化到iptables规则)有效地融合到Netfilter框架中,使防火墙具备入侵检测的功能。通过深入研究iptables表、链、规则的相互关系,我们可以新建一些自定义链,如FWSNORT_INPUT FWSNORT_OUTPUT FWSNORT_FORWARD,在这个链中可以添加经过fwsnort转换成的iptables规则,然后在INPUT、OUTPUT、FORWARD链中的一开始的位置建立跳转规则,将所有数据包分别发送至相应的FWSNORT链。当需要开启防火墙的入侵检测功能时,只需运行fwsnort.sh这样一个脚本,它就可以把经过INPUT、OUTPUT、FORWARD的数据包发送到相应的FWSNORT链。

论坛徽章:
0
9 [报告]
发表于 2011-04-21 11:52 |只看该作者
方案二,规则多了,累……现在snort有一万多条特征库。不要说10000条,估计就是精简到1000条加入内核,netfilter也累呀……

问问楼主方案三吧,把snort移到内核中去,嘿嘿

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
10 [报告]
发表于 2011-04-21 11:53 |只看该作者
嗯,可以考虑把snort 移植到内核中
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP