netfilter工作于 kernel的framework(框架)
iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables
iptable是工作在用户空间中,编写规则的工具,不能算是真正意义上的防火墙,它定义的规则需要送至工作于在内核空间中netfilter,并且通过实现netfilter实现防火墙功能。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)
作者在内核的tcp/ip协议栈上选择的参考点
prerouting: 进入本机后,路由功能发生之前
input:到达本机内部
output: 由本机发出
forward: 由本机转发
postrouting:路由功能发生之后(进入网卡发送队列之前),即将离开本机之前
这五个参考点又叫 hooks function: 钩子函数 也叫五个规则链 组成了netfilter框架;任何一个数据包要经由本主机,都将经过这五个链中某链;
链上的规则次序即为检查次序
(1). 过滤:firewall,
(2). 地址转换:NAT Server
(3). mangle:修改报文首部中的某些信息(能够实现将数据包的元数据拆开,在里面做标记/修改内容的。如防火墙标记,TTL)
(4). raw:关闭nat表上启用的连接追踪功能(对nat的功能的一些补充)
filter功能:input, forward, output
nat功能可:prerouting, output(很少用到), postrouting
mangle功能:prerouting,input, forward, output, postrouting
raw:prerouting,output #只能发生在nat功能的前半段
注意:规则的次序非常关键,而检查规则的时候,是按照从上往下的方式进行检查的。所以在编写规则的时候应该 :
1 。同类规则,匹配范围小的放上面;
2 。不同类规则,匹配报文几率较大的放上面;
防火墙是层层过滤的。实际按照规则的顺序从上到下,从前到后进行过滤的。(按照规则顺序依次匹配的)
如果匹配上规则,明确表明是阻止还是通过,数据包就不在向下匹配新规则了
如果规则中没有明确表明是阻止还是通过,也就是没有匹配规则,向下进行匹配直到 匹配默认规则得到明确的阻止还是通过。
通:默认门是关着的,必须要定义谁能进
堵:大门是洞开的,但是你必须有身份认证,否则不能进。
本文出自 “笨小孩” 博客,请务必保留此出处http://1066875821.blog.51cto.com/2375046/1650397
原文地址:http://1066875821.blog.51cto.com/2375046/1650397