防火墙是工作在主机或网络边缘,能够对其所匹配到的报文根据事先定义好的规则作出相应处理的组件,可以是软件,也可以是硬件,还能软硬结合实现。
早期在
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链是数据报文进入用户空间的必经之路
通过
PREROUTING后进行路由选择如果数据包只是通过本机进行转发,则转发到FORWARD链,FORWARD链能够通过事先定义好的规则对数据包进行匹配检查并执行相应动作,INPUT链可以对数据包进行过滤,正是有了FORWARD链iptables才能够作为一个网络防火墙运行在网络边缘对进出网络的数据报文进行过滤
数据包从用户空间的进程通过路由选择特定的网卡接口后转到
OUTPUT链,OUTPUT链能够通过实现定义好的规则对数据报文进行匹配检查并执行相应动作,OUTPUT链可以对数据包进行过滤
数据包从
OUTPUT或FORWARD转发而来,到达netfilter框架中的最后一关,分析数据包并执行对应动作,和POSTROUTING一样不能对数据包进行过滤
iptables之所以被称为iptables是其过滤数据包的规则是通过四张表的来定义
整个
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
本文出自 “The AnyISalIn blog” 博客,请务必保留此出处http://anyisalin.blog.51cto.com/10917514/1758953
原文地址:http://anyisalin.blog.51cto.com/10917514/1758953