Iptables学习笔记1-基本概念
Iptables基础知识
-
Linux
防火墙:工作在网络层,主要对TCP/IP
数据包进行过滤和处理。基于内核Netfilter
模块实现,高效率。 -
Netfiter
:Linux
内核中实现包过滤防火墙的内部结构,一般不以程序或文件的形式存在,属于内核空间的防火墙管理体系。真正的防火墙。 -
Iptables
:这里指的是位于用户空间/sbin/iptables
命令,用来管理Linux
防火墙的规则。所以我们在Linux
查看
Iptables作用:为内核空间的 Netfilter
模块提供 TCP/IP
包管理规则,Netfilter
通过这些规则来对数据包进行相应的处理。
Iptables相关概念
个人觉得 Iptables
中重要的概念应该有3个,链、规则、表,但是好多文章都只写了链和表,关于规则的介绍不够详细。下面先对3个概念进行详细介绍。
一、链:
Iptables
中最重要的的概念,所有进出数据包都会经过相应的链,数据包每经过一条链,都会应用该链中对应的规则,规则的概念我们下面再说。按数据包的处理时机分为5条链,如下
-
prerouting
链:数据包路由之前,会经过此链;数据包进来之后必经的第一条链,所有的入流量都会经过prerouting
链。 -
postrouting
链:数据包路由之后,会经过此链;数据包出去之前必经的最后一条链,所有的出流量都会经过postrouting
链。 -
forward
链:需要将数据包转发给其它地址时,会经过此链。 -
input
链:当收到访问本机的数据包时,会经过此链。 -
output
链:当数据包从本机发出时,会经过此链。
Route
:上图 route
的意思就是查看该数据包是否是发给本机的,如果是,则不需要进行转发,直接进入 input
链;如果不是发给本机的数据包,则进入 forward
链(典型的DNAT场景)
二、规则:
在上面链的概念中我们提到,数据包每经过一条链,都会应用该链中对应的规则。那规则是什么呢?其实规则应该分为下面两个部分组成:
- 匹配条件:比如匹配数据包中源地址是
192.169.22.1
- 处理动作:符合匹配条件的包,应该怎么处理
匹配条件分为基本匹配条件和扩展匹配条件:
基本匹配条件:
-
-s
:源地址 -
-d
:目的地址
扩展匹配条件:
-
--sport
:源端口 -
--dport
:目的端口
处理动作也分为基本动作和扩展动作:
基本动作:
-
ACCEPT
:允许数据包通过 -
DROP
:直接丢弃数据包,并且不会给客户端任何提醒
扩展动作:
-
REJECT
:禁止数据包通过。和DROP
不同的是,默认会返回拒绝消息 -
SNAT
:源地址转换 -
DNAT
:目的地址转换 -
LOG
:在/var/log/message
中记录日志,然后将数据包交给下一条规则 -
REDIRECT
:本机做端口映射 -
MASQUERADE
:动态SNAT
,适用于出口地址会变化的情况
注意:不会直接将规则应用到链上,而是将表应用到链上
三、表:
上面说到,不会将规则直接应用到链上,而是应用的表。表其实就是多个规则的集合;按规则的类型我们可以把规则分为4类,每类对应一张表(内核已经分配好的,每张表又对应内核中的一个小模块),如下:
-
row
表:决定是否对数据包进行状态跟踪,对应内核iptable_raw
模块 -
mangle
表:用于对数据包的拆解、修改、标记、重新封装,对应内核iptable_mangle
模块 -
nat
表:对数据包进行地址、端口修改,到达NAT
效果,对应内核iptable_nat
模块 -
filter
表:对数据包进行过滤,如过滤地址、端口等,对应内核iptable_filter
模块
链和表为多对多关系。一条链可以应用多张表,一张表也可以用于多条链。对应关系如下:
将这张图和 Iptables流量流向图-链
结合起来,就得到下面的终极流量流向图。这里要细细的品!!
注意:当一条链中包含多张表时,规则匹配会根据表的优先级进行匹配,优先级如下:raw > mangle > nat > filter
小结
此篇文章主要对 Iptables
中涉及到的概念进行了介绍:
- 链:
prerouting
、postrouting
、forward
、input
、output
- 规则:
匹配条件
+处理动作
- 表:
raw > mangle > nat > filter
后面会以 SNAT
和 DNAT
举例来展开;以及一些扩展模块介绍;自定义链介绍。