三大概念
内核:操作系统的内核,是极其重要的部分,主要用来执行系统资源的分配及调度。
Netfilter:Linux的源代码完全公开,程序设计师可以依据自己的需要,添加额外的功能在这种模式下诞生的。Netfilter就是Linux的第三代防火墙,在此之前,还有ipfwadm和ipchains两种防火墙,但是Netfilter功能更加出色,作为Linux的默认防火墙。
iptables:由于Netfilter需要的防火墙规则是存放在内存中的,管理人员需要一个规则编辑工具,通过这个工具对内存中的规则执行添加、删除和修改等操作,iptables就是这样一个工具。
Netfilter的工作位置
Netfilter存放规则的内存块,被分为四张表,分别是filter、nat、mangle和raw表。
filter:INPUT,FORWORD,OUTPUT
nat:PREROUTING,POSTROUTING,OUTPUT
mangle:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWORD
raw:PREROUTING,OUTPUT
filter:filter是Netfilter中最重要的机制,其任务是执行数据包的过滤操作,也就是起到防火墙的作用。
nat:nat是防火墙上一个不可或缺的重要机制,网络地址转换,使得不同网络之间可以更好的通信。
mangle:mangle是一个很特殊的机制,通过mangle机制可以来修改数据包经过防火墙内数据包的内容。
raw:负责加快数据包穿过防火墙机制的速度,可以提高防火墙的性能。
filter机制
数据包的类型主要有以下三种。
INPUT类型:网络上其他主机发送给本机进程的数据包。例如,访问本机httpd等服务的类型,对应INPUT链。
OUTPUT类型:本机进程所产生的数据包。例如,本机使用Firefox去访问网络上其他主机,对应OUTPUT链。
FORWARD类型:数据包对本机只是“路过”而已,比如路由器,对应的是FORWARD链。
nat机制
NAT的机制有很多种,有一对一、一对多、多对多和NAPT,不管是哪一种NAT,都是由SNAT及DNAT共同搭配出来的。
PREROUTING:当下发的规则是要修改“Destination IP时”,该规则将被放在PREROUTING链中,用于执行DNAT的任务。
POSTROUTING:该链的任务是修改数据包的“来源端IP”,用于执行SNAT的部分。
OUTPUT:该链主要作用于本机产生的数据包,用来执行DNAT的功能
mangle机制
当一个数据包“穿过”防火墙,我们可以通过mangle的机制来修改数据包的内容,修改的范围在于mangle机制里模块的支持程度。
修改IP包头的TTL值:每一种操作系统所生成的数据包的IP包头内的TTL值都不一样,可以根据需要自行修改。
修改IP包头的DSCP值或对数据包设置特征:网络应用中,可能会对某些特定通信协议有特殊的需求,例如,QoS就是对不同类型的协议数据包分配不同的带宽。QoS机制主要由两个不同的部分组成,其一是“数据包分类器”,其二是“带宽分配器”。
l通过IP包内DSCP值来分类
l使用mangle机制为数据包标示识别码
在Linux系统中,将数据包的状态分为四种,分别是ESTABLISHED、NEW、RELATED和INVALID
ESTABLISHED:主要数据包能够成功穿过防火墙,那么之后的所有数据包(包括反向的所有数据包),其状态都会是ESTABLISHED。
NEW:指的是每条连接中的第一个数据包,一般在高级防火墙中用到。
RELATED:被动产生的应答数据包,而且这个数据包不属于现在任何的连接。与协议无关,只要应答的数据包是因为本机送出的一个数据包而导致的另一条连接的产生,那么这个新连接的所有数据包都属于RELATED状态的数据包。
INVALID:状态不明的数据包,也就是不属于ESTABLISHED、NEW、RELATED状态的数据包。凡是INVALID状态的数据包皆可以视为“恶意”的数据包。所以需要将所有INVALID状态的数据包丢弃掉。
规则的匹配方式
iptables的匹配方式采用“first match”,即优先匹配。
当我们往防火墙添加规则时,这些规则都是按照“先后顺序”,一条一条的被放进链中,第一条加进来的规则,放在第一的位置,最后一条加进来的规则,则放在最后的位置。
当一个数据包进入INPUT链之后,从INPUT链的第一条规则逐一向下匹配,如果被第一条匹配中,就有此规则来执行允许或丢弃,不管后面规则的内容是什么。否则,依次向下匹配。如果都没有匹配中,则会执行链底端的默认规则。注意,每一条链的底部都会有一条默认规则。
iptables的规则语法可以分成两部分,其一是“基本语法”,其二是“高级语法”。
基本语法:就是有filter自己的模块,可以提供的简单匹配和过滤方式。
高级语法:就是filter本身模块无法提供,需要调用其它模块,以提供更加精确的匹配和过滤操作。
iptables –t filter –A INPUT –p icmp –j DROP 基本语法,将进来的ICMP数据包丢弃,filter表的模块可以完成。
iptables –t filter –A INPUT –m mac --mac—source 00:E0:18:00:7C:A4 –j DROP 高级语法,需要调用其它模块来匹配MAC地址,将其丢弃
iptables提供的数据包匹配方式多种多样,主要有接口、协议、端口、
源地址、目的地址等等,通过这些不同的数据包匹配方式,组成了防火墙的规则。
iptables –t filter –A FORWARD –i eth0 –o eth1 –j DROP 接口的匹配,从eth0进来eth1出去的数据包丢弃掉
iptables –t filter –A INPUT –p icmp --icmp-type 8 –j DROP 协议的匹配,禁止ICMP的ping包
iptables –t filter -A INPUT –p tcp --dport 21 –j ACCEPT 端口的匹配,允许FTP服务
iptables –t filter –A INPUT –p all –s 192.168.0.0/26 –j DROP 地址的匹配,禁止192.168.0.0/26这个网络的数据包访问操作
iptables的数据包匹配方式多种多样,不论是对于数据包的类型还是状态,或者标记,都可以作为匹配数据包的方法,正因为这些灵活多样的匹配方法,才有了防火墙的强大功能,所以防火墙的学习是一条很长的道路.