Netfilter

在linux操作系统中,Netfilter组件是集成在linux内核中扩展各种网络服务的结构化底层框架,在内核级提供防火墙功能。内核中选取五个位置放了五个hook(勾子) function(INPUTOUTPUTFORWARDPREROUTINGPOSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则。

iptables 1 概念
Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  • 网络地址转换(Network Address Translate)
  • 数据包内容修改
  • 以及数据包过滤的防火墙功能

iptables

我们知道iptables是按照规则来办事的,我们就来说说规则(rules),规则其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址目的地址传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

根据上图,报文的流向:
到本机某进程的报文:PREROUTING --> INPUT
由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING

内核中数据包的传输过程:

(1)当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去

(2)如果数据包就是进入本机的,数据包就会到达INPUT链。经INPUT链检查后,数据包被发往本地进程。本地进程进行相应处理后发送响应数据包,数据包经过OUTPUT链,然后到达POSTROUTING链输出;如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

表的概念

我们知道,防火墙的作用就在于对经过的报文匹配"规则",然后执行对应的"动作",所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了"",所以,我们把每一个"关卡"想象成如下图中的模样 :
iptables 1 概念
每个"链"上都放置了一串规则,但是这些规则有些很相似,为了方便管理,我们把相同类型的规则存储于同一张表,而iptables已经为我们定义了4种表,每种表对应了不同的功能:

功能 内核模块
filter表 负责过滤功能,防火墙 iptables_filter
nat表 network address translation,网络地址转换功能 iptable_nat
mangle表 拆解报文,做出修改,并重新封装 的功能 iptable_mangle
raw表 关闭nat表上启用的连接追踪机制 iptable_raw

每个"链"中的规则都存在于哪些"表"中?:

规则 可以出现的表
PREROUTING raw表,mangle表,nat表
INPUT mangle表,filter表,(centos7中还有nat表,centos6中没有
OUTPUT raw表,mangle表,nat表,filter表
FORWARD mangle表,filter表
POSTROUTING mangle表,nat表

这个表格是什么意思呢?它的意思是说,prerouting"链"只拥有nat表、raw表和mangle表所对应的功能,所以,prerouting中的规则只能存放于nat表、raw表和mangle表中

换个维度来看上个表:

可以存储的规则
raw PREROUTING,OUTPUT
mangle PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有
filter INPUT,FORWARD,OUTPUT

iptables 1 概念

表的顺序

iptables为我们定义了4张"表",当他们处于同一条"链"时,执行的优先级如下。
优先级次序(由高而低):
raw --> mangle --> nat --> filter
iptables 1 概念

匹配条件

匹配条件分为基本匹配条件与扩展匹配条件
基本匹配条件:
源地址Source IP,目标地址 Destination IP
上述内容都可以作为基本匹配条件。
扩展匹配条件:
除了上述的条件可以用于匹配,还有很多其他的条件可以用于匹配,这些条件泛称为扩展条件,这些扩展条件其实也是netfilter中的一部分,只是以模块的形式存在,如果想要使用这些条件,则需要依赖对应的扩展模块。
源端口Source Port, 目标端口Destination Port
上述内容都可以作为扩展匹配条件

匹配规则

  • ACCEPT:允许数据包通过。
  • DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
  • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
  • DNAT:目标地址转换。
  • REDIRECT:在本机做端口映射。

参考:
http://www.zsythink.net/archives/1199/ iptalbes
https://blog.csdn.net/beanewself/article/details/78317626

相关文章: