防火墙是工做在主机或网络边缘,可以对其所匹配到的报文根据事先定义好的规则做出相应处理的组件,能够是软件,也能够是硬件,还能软硬结合实现。服务器
早期在
openBSD
中经过内核中的ipfw
实现简单的数据报过滤功能、后来在Linux 2.2内核
中使用ipchains
来取代,意为链、后来在Linux 2.4内核
中被iptables
所取代,意为表。网络
事实上
Linux 2.6
实现防火墙是经过内核中的netfilter
框架完成的,iptables
其实不止指的是一个在用户空间的应用程序,其实仍是内核中的一个存放特定规则的模块,因此iptables
的全称应该为netfilter/iptables
。架构
网络防火墙通常都设置在整个网络的边缘,才能对全部出入的数据报进行分析和进行相应的处理,做为一个主机防火墙应该在数据报文出入主机时在
TCP/IP协议栈
的特定位置对数据报文进行拦截并执行对应动做,那么在netfilter
架构中分别有五个位置能够做为防火墙的拦截点,咱们称它们为hook function
(钩子函数)。并发
数据报文进入TCP/IP协议栈路由选择前会被
PREROUTING
“钩”住,分析其数据包对其相应操做,注意
:PREROUTING
链不能对数据包进行过滤,PREROUTING
链是整个netfilter
框架中的第一关框架
经过
PREROUTING
后进行路由选择若是数据包是进入本机内部,则转发到INPUT
链,INPUT
链可以经过实现定义好的规则对数据包进行筛选若是被匹配则执行相应动做,INPUT
链能够对数据包进行过滤,INPUT
链是数据报文进入用户空间的必经之路ide
经过
PREROUTING
后进行路由选择若是数据包只是经过本机进行转发,则转发到FORWARD
链,FORWARD
链可以经过事先定义好的规则对数据包进行匹配检查并执行相应动做,INPUT
链能够对数据包进行过滤,正是有了FORWARD
链iptables
才可以做为一个网络防火墙运行在网络边缘对进出网络的数据报文进行过滤函数
数据包从用户空间的进程经过路由选择特定的网卡接口后转到
OUTPUT
链,OUTPUT
链可以经过实现定义好的规则对数据报文进行匹配检查并执行相应动做,OUTPUT
链能够对数据包进行过滤高并发
数据包从
OUTPUT
或FORWARD
转发而来,到达netfilter
框架中的最后一关,分析数据包并执行对应动做,和POSTROUTING
同样不能对数据包进行过滤spa
iptables
之因此被称为iptables
是其过滤数据包的规则是经过四张表的来定义code
整个
iptables
最关键的表,实现数据包的过滤,能够由INPUT,FORWARD,OUTPUT
这三个可以实现过滤功能的链组成
学过网络的同窗应该都知道
NAT(Network Address Translation)网络地址转换
,正是应为有了这项技术才使得咱们现今还可以有IPv4
可使用,在iptables
中也能够实现NAT
的相关功能, 例如SNAT, DNAT, MASQUERADE
等功能,nat表能够由PREROUTING, FORWARD, POSTROUTING
组成
mangle
能够对匹配到的报文的数据报进行拆解,作出修改,从新封装等操做,通常咱们用的不多,五个链都能实现mangle
的功能
raw
关闭NAT
的链接追踪机制,防止在高并发的访问下服务器的内存溢出致使故障,可由PREROUTING,OUTPUT
实现
实现哪些功能: 判断添加在哪张表上
报文的流经路径: 判断添加在哪一个链上
1.同类规则(访问同一程序),匹配范围小的放在上面
2.不一样类的规则(访问不一样应用), 匹配到报文频率高的放上面
3.将那些可由一条规则描述的多个规则合并成一个
4.设置默认策略
本文只对
iptables
进行原理方面的简单介绍,做者水平不高,若是发现错误还望海涵并及时通知我,在这里不胜感激。 做者:AnyISalIn 感谢:MageEdu