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