仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 543|回复: 8
打印 上一主题 下一主题

[其他Linux] 来谈谈:平安基本:复杂剖析Linux体系防火墙框架

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:18:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
由于在linux中,用户权限很大,做任何事情都很自由,所以,你往往需要知道你做的每一步在干什么。
Linux体系中的Netfilter供应了一个笼统、通用化的框架,该框架界说的一个子功效的完成就是包过滤子体系,框架包括以下五部分:
1.为每种收集协定(IPv4、IPv6等)界说一套钩子函数(IPv4界说了5个钩子函数),这些钩子函数在数据报流过协定栈的几个关头点被挪用。在这几个点中,协定栈将把数据报及钩子函数标号作为参数挪用Netfilter框架。
2.内核的任何模块能够对每种协定的一个或多个钩子举行注册,完成挂接,如许当某个数据包被传送给Netfilter框架时,内核能检测是不是有任何模块对该协定和钩子函数举行了注册。若注册了,则挪用该模块的注册时利用的回调函数,如许这些模块就无机会反省(大概还会修正)该数据包、抛弃该数据包及唆使Netfilter将该数据包传进用户空间的行列。
3.那些列队的数据包是被传送给用户空间的异步地举行处置。一个用户历程能反省数据包,修正数据包,乃至能够从头将该数据包经由过程分开内核的统一个钩子函数中注进到内核中。
4.任安在IP层要被丢弃的IP数据包在真正丢弃之前都要举行反省。比方同意模块反省IP-Spoofed包(被路由丢弃)。
5.IP层的五个HOOK点的地位以下所示:
(1)NF_IP_PRE_ROUTING:方才进进收集层的数据包经由过程此点(方才举行完版本号,校验和等检测),源地点转换在此点举行;IP_Input.c中IP_Rcv挪用;
(2)NF_IP_LOCAL_IN:经路由查找后,送往本机的经由过程此反省点,INPUT包过滤在此点举行,IP_local_deliver中挪用;
(3)NF_IP_FORWARD:要转发的包经由过程此检测点,FORWORD包过滤在此点举行;
(4)NF_IP_POST_ROUTING:一切即刻便要经由过程收集设备进来的包经由过程此检测点,内置的目标地点转换功效(包含地点假装)在此点举行;
(5)NF_IP_LOCAL_OUT:本机历程收回的包经由过程此检测点,OUTPUT包过滤在此点举行。
这些点是已在内核中界说好的,内核模块可以注册在这些HOOK点举行的处置,可以使用nf_register_hook函数指定。在数据报经由这些钩子函数时被挪用,从而模块能够修正这些数据报,并向Netfilter前往以下值:
NF_ACCEPT持续一般传输数据报
NF_DROP抛弃该数据报,不再传输
NF_STOLEN模块接受该数据报,不要持续传输该数据报
NF_QUEUE对该数据报举行列队(一般用于将数据报给用户空间的历程举行处置)
NF_REPEAT再次挪用该钩子函数
一个基于Netfilter框架的、称为IPtables的数据报选择体系在Linux2.4内核中被使用,实在它就是IPchains的后继工具,但却有更强的可扩大性。内核模块能够注册一个新的划定规矩表(table),并请求数据报流经指定的划定规矩表。这类数据报选择用于完成数据报过滤(filter表),收集地点转换(Nat表)及数据报处置(Mangle表)。Linux2.4内核供应的这三种数据报处置功效都基于Netfilter的钩子函数和IP表。它们是自力的模块,互相之间是自力的。它们都完善的集成到由Netfileter供应的框架中。
包过滤
Filter表格不会对数据报举行修正,而只对数据报举行过滤。IPtables优于IPchains的一个方面就是它更加玲珑和疾速。它是经由过程钩子函数NF_IP_LOCAL_IN、NF_IP_FORWARD及NF_IP_LOCAL_OUT接进Netfilter框架的。因而关于任何一个数报只要一个中央对其举行过滤。这绝对IPchains来讲是一个伟大的改善,由于在IPchains中一个被转发的数据报会遍历三条链。
NAT
NAT表格监听三个Netfilter钩子函数:NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING及NF_IP_LOCAL_OUT。NF_IP_PRE_ROUTING完成对必要转发的数据报的源地点举行地点转换而NF_IP_POST_ROUTING则对必要转发的数据包的目标地点举行地点转换。关于当地数据报的目标地点的转换则由NF_IP_LOCAL_OUT来完成。NAT表格分歧于filter表格,由于只要新毗连的第一个数据报将遍历表格,而随后的数据报将依据第一个数据报的了局举行一样的转换处置。NAT表格被用在源NAT、目标NAT,假装(其是源NAT的一个惯例)及通明代办署理(其是目标NAT的一个惯例)。
数据报处置(PacketMangling)
Mangle表格在NF_IP_PRE_ROUTING和NF_IP_LOCAL_OUT钩子中举行注册。利用mangle表,能够完成对数据报的修正或给数据报附上一些带外数据。以后mangle表撑持修正TOS位及设置skb的nfmard字段。
源码剖析
假如我们想到场本人的代码,便要用nf_register_hook函数,其函数原型为:
intnf_register_hook(structnf_hook_ops*reg) 
structnf_hook_ops 
{ 
structlist_headlist; 
/*Userfillsinfromheredown.*/ 
nf_hookfn*hook; 
intpf; 
inthooknum; 
/*Hooksareorderedinascendingpriority.*/ 
intpriority; 
};
我们的事情即是天生一个structnf_hook_ops布局的实例,并用nf_register_hook将其HOOK上。个中list项我们总要初始化为{NULL,NULL};因为一样平常在IP层事情,pf老是PF_INET;hooknum就是我们选择的HOOK点;一个HOOK点大概挂多个处置函数,谁先谁后,便要看优先级,即priority的指定了。Netfilter_IPv4.h顶用一个列举范例指定了内置的处置函数的优先级:
enumnf_IP_hook_priorities{ 
NF_IP_PRI_FIRST=INT_MIN, 
NF_IP_PRI_CONNTRACK=-200, 
NF_IP_PRI_MANGLE=-150, 
NF_IP_PRI_NAT_DST=-100, 
NF_IP_PRI_FILTER=0, 
NF_IP_PRI_NAT_SRC=100, 
NF_IP_PRI_LAST=INT_MAX, 
};
Hook是供应的处置函数,也就是我们的次要事情,其原型为:
unsignedintnf_hookfn(unsignedinthooknum, 
structsk_buff**skb, 
conststructnet_device*in, 
conststructnet_device*out, 
int(*okfn)(structsk_buff*));
它的五个参数将由NFHOOK宏传出来。nf_register_hook依据reg中注册的协定簇范例和优先级在nf_hooks中找到响应的地位并拔出到此表中。_hooks[NPROTO][NF_MAX_HOOKS]在Netfilter初始化时(Netfilter_init/Netfilter.c,而它在sock_init时挪用)已初始为一个空表。
比方IPtable在初始化时(init/IPtable_filter.c)挪用nf_register_hook注册他的hook函数。
staticstructnf_hook_opsIPt_ops[] 
={{{NULL,NULL},IPt_hook,PF_INET,NF_IP_LOCAL_IN,NF_IP_PRI_FILTER}, 
{{NULL,NULL},IPt_hook,PF_INET,NF_IP_FORWARD,NF_IP_PRI_FILTER}, 
{{NULL,NULL},IPt_local_out_hook,PF_INET,NF_IP_LOCAL_OUT, 
NF_IP_PRI_FILTER} 
};
 
mangle在init/IPtable_mangle.c中注册它本人的hook函数。 
staticstructnf_hook_opsIPt_ops[] 
={{{NULL,NULL},IPt_hook,PF_INET,NF_IP_PRE_ROUTING,NF_IP_PRI_MANGLE}, 
{{NULL,NULL},IPt_local_out_hook,PF_INET,NF_IP_LOCAL_OUT, 
{NF_IP_PRI_MANGLE} 
};
NAT在init/IP_nat_standalone.c中注册它本人的hook函数
/*包过滤前,变动目标地点*/
staticstructnf_hook_opsIP_nat_in_ops

</p>
无论图形界面发展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。
活着的死人 该用户已被删除
沙发
发表于 2015-1-18 12:51:38 | 只看该作者
编程学习及开发,Linux是免费,开源的操作系统,并且可开发工具相当多,如果您支持自由软件,一定要同广大热爱自由软件人士一同为其不懈努力。
只想知道 该用户已被删除
板凳
发表于 2015-1-22 13:14:26 | 只看该作者
选择一些适于初学者的Linux社区。
老尸 该用户已被删除
地板
发表于 2015-1-31 07:17:57 | 只看该作者
其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。
爱飞 该用户已被删除
5#
发表于 2015-2-6 18:25:32 | 只看该作者
其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。
深爱那片海 该用户已被删除
6#
发表于 2015-2-18 02:24:06 | 只看该作者
学习Linux应具备的。[书籍+网络资源]
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-6 00:57:06 | 只看该作者
虽然大家都比较喜欢漂亮的mm,但是在学 linux 的过程中,还是要多和“男人”接触一下:P 遇到问题的时候,出来看说和上网查之外,就是要多用 linux 下的 man 命令找找帮助。
变相怪杰 该用户已被删除
8#
发表于 2015-3-12 18:15:56 | 只看该作者
Windows?是图形界面的,Linux类似以前的?DOS,是文本界面的,如果你运行了图形界面程序X-WINDOWS后,Linux?也能显示图形界面,也有开始菜单、桌面、图标等。
再见西城 该用户已被删除
9#
发表于 2015-3-20 01:41:51 | 只看该作者
工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于Linux的书籍有很多不过精品的不多。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-26 11:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表