iptables 是 Linux 上常用的防火墙软件 netfilter 项目的一部分,所以要讲清楚 iptables,我们先理一理什么是防火墙? 简单来说,防火墙是一种网络隔离工具,部署于主机或者网络的边缘,目标是对于进出主机或者本地网络的网络报文根据事先定义好的规则做匹配检测,规则匹配成功则对相应的网络报文做定义好的处理(允许,拒绝,转发,丢弃等)。防火墙根据其管理的范围来分可以将其划分为主机防火墙和网络防火墙;根据其工作机制来区分又可分为包过滤型防火墙(netfilter)和代理服务器(Proxy)。我们接下来在这篇笔记中主要说说包过滤型防火墙(netfilter)。 包过滤型防火墙主要依赖于 Linux 内核软件 netfilter,它是一个 Linux 内核“安全框架”,而 iptables 是内核软件 netfilter 的配置工具,工作于用户空间。iptables/netfilter 组合就是 Linux 平台下的过滤型防火墙,并且这个防火墙软件是免费的,可以用来替代商业防火墙软件,来完成网络数据包的过滤、修改、重定向以及网络地址转换(nat)等功能。 在有些 Linux 发行版上,我们可以使用 systemctl start iptables 来启动 iptables 服务,但需要指出的是,iptables 并不是也不依赖于守护进程,它只是利用 Linux 内核提供的功能。 其中规则可以包括匹配数据报文的源地址、目的地址、传输层协议(TCP/UDP/ICMP/..)以及应用层协议(HTTP/FTP/SMTP/..)等,处理逻辑就是根据规则所定义的方法来处理这些数据包,如放行(accept),拒绝(reject)返回拒绝信息,丢弃(drop)即抛弃数据包,不返回任何信息 等。 在数据包经过网络协议栈的不同位置时做相应的由 iptables 配置好的处理逻辑。 netfilter 中的五个钩子(这里也称为五个关卡)分别为:PRE_ROUTING/INPUT/FORWARD/OUTPUT/POST_ROUTING,网络数据包的流向图如下图所示: 上面提到的这些处于网络协议栈的“关卡”,在 iptables 的术语里叫做“链(chain)”,内置的链包括上面提到的5个: 一般的场景里面,数据包的流向基本是: iptables 默认有五条链(chain),分别对应上面提到的五个关卡:PRE_ROUTING/INPUT/FORWARD/OUTPUT/POST_ROUTING,这五个关卡分别由 netfilter 的五个钩子函数来触发。但是,为什么叫做“链”呢? 我们知道,iptables/netfilter 防火墙对经过的数据包进行“规则”匹配,然后执行相应的“处理”。当报文经过某一个关卡时,这个关卡上的“规则”不止一条,很多条规则会按照顺序逐条匹配,将在此关卡的所有规则组织称“链”就很适合,对于经过相应关卡的网络数据包按照顺序逐条匹配“规则”。 另外一个问题是,每一条“链”上的一串规则里面有些功能是相似的,比如,A 类规则都是对 IP 或者端口进行过滤,B 类规则都是修改报文,我们考虑能否将这些功能相似的规则放到一起,这样管理 iptables 规则会更方便。iptables 把具有相同功能的规则集合叫做“表”,并且定一个四种表: Linux 网络管理员所定义的所有 iptables “规则”都存在于这四张表中。 但是,需要注意的是,并不是所有的“链”都具有所有类型的“规则”,也就是说,某个特定表中的“规则”注定不能应用到某些“链”中,比如,用作地址转换功能的 nat 表里面的“规则”据不能存在于 FORWARD “链”中。下面,我们就详细的列举 iptables 的“链表”关系: 我们先说一下,每个“链”都拥有哪些功能的规则: 在实际使用 iptables 配置规则时,我们往往是以“表”为入口制定“规则”,所以我们将“链表”关系转化成“表链”关系: 还需要注意的一点是,因为数据包经过一个关卡的时候,会将“链”中所有的“规则”都按照顺序逐条匹配,为相同功能的“规则”属于同一个“表”。那么,哪些“表”中的规则会放到“链”的最前面执行呢?这时候就涉及一个优先级的问题。 iptables 为我们提供了四张“表”,当它们处于同一条“链”的时候,它们的执行优先级关系如下: 实际上,网络管理员还可以使用 iptables 创建自定义的“链”,将针对某个应用层序所设置的规则放到这个自定义“链”中,但是自定义的“链”不能直接使用,只能被某个默认的“链”当作处理动作 action 去调用。可以这样说,自定义链是“短”链,这些“短”链并不能直接使用,而是需要和 iptables上 的内置链一起配合,被内置链“引用”。 有了前面的介绍我们可以总结出如下图所示的数据包在经过过滤型防火墙的流程图: 前面我们提到过,iptables 规则由两部分组成:报文的匹配条件和匹配到之后的处理动作。 同时,网络管理员还可以使用 iptables 创建自定义的链,附加到 iptables 的内置的五个链。 对于每一条“链”上其“规则”的匹配顺序,排列好检查顺序能有效的提高性能,因此隐含一定的法则: 同时,也一定要注意,在远程连接主机配置防火墙时注意: https://morven.life/posts/iptables-wiki/什么是防火墙
包过滤型防火墙
iptables 服务 可以理解成机器重启后,自动应用防火墙规则。如果无此项服务,需要手动保存规则,并重启后重新手动导入规则。

PRE_ROUTING 关卡时,要进行一次路由选择,当目标地址为本机地址时,数据进入 INPUT,非本地的目标地址进入 FORWARD(需要本机内核支持 IP_FORWARD),所以目标地址转换通常在这个关卡进行INPUT 经过路由之后送往本地的数据包经过此关卡,所以过滤 INPUT 包在此点关卡进行
iptables 的四表五链

链
表
PreRouting
raw, mangle, nat
Forward
mangle, filter
Input
mangle, filter, nat
Output
raw, mangle, filter, nat
PostRouting
mangle, nat
表
链
raw
PreRouting, Output
mangle
PreRouting, Forward, Input, Output, PostRouting
filter
Forward, Input, Output
nat
PreRouting, Input, Output, PostRouting
raw -> mangle -> nat -> filter
数据包经过过滤型防火墙的流程

iptables规则
设置 iptables 规则时需要考量的要点:
原文