Linux防火墙iptables之概念篇(图文并茂)(二)
链与表的关系
首先要知道,某些链并不是万能的,它可能不具备你需要的功能,所以这个时候,必须要了解每个链上的rule与每个表的对应关系。
如下图,来看看filter表支持哪些链?
上图的意思其实就是说 filler表 所具备的功能可以被应用的链被限定为input foward output。
综上所述,我们可以总结一下表链之间的关系:
Filter 可以被应用的链为 INPUT、FORWARD、OUTPUT。
Nat 可以被应用的链为OUTPUT、PREROUTING、POSTROUTING
Mangle 可以被用应用在所有链:INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING。
Raw 可以被应用的链为OUTPUT、PREROUTING
如下图:
为了更好的理解,换个思路在理解一下对应关系,哪些链的rule可以被哪些表调用?
INPUT 可以调用的表:mangle、filter
OUTPUT 可以调用的表:raw、mangle、nat、filter
PREROUTING 可以调用的表:raw、mangle、nat
FORWARD 可以调用的表:mangle、filter。
POSTROUTING 可以调用的表:mangle、nat
如下图:
其实我们还需要注意一点,因为数据包经过一个”链”的时候,会将当前链的所有规则都匹配一遍,但是匹配时总归要有顺序,我们应该一条一条的去匹配,而且我们说过,相同功能类型的规则会汇聚在一张”表”中,那么,哪些”表”中的规则会放在”链”的最前面执行呢,这时候就需要有一个优先级的问题,我们还拿prerouting”链”做图示。
另外需要注意的是,数据报文经过链的时候,会顺序匹配所有rule,那么这里就会涉及到优先级的问题,哪些表的rule会先于链被执行?到底谁先被执行?
请看下图:
如上所述,PREROUTING链可以被调用的是这三张表,其优先级是 raw --> mangle --> nat。
但是我们知道iptables的表是四张,当他们同时被应用在一个链的时候,优先级如下图:
但是,如上述所言,某些链的rule不能被应用到某些表,所以,你要知道,当前能被四表调用的链只有OUTPUT链。
为了便于管理,可以在表中自定义链,把自己需要的rule放在这个自定义链中,但是要注意的是,这个链不能被表直接调用,而是在某个默认链将这个链引用,也就是在五链之一中的某个链中配置成动作才会生效。
iptables工作流程
下图是数据包通过iptables的流程:
上图描述的工作流程:
根据路由匹配发送给服务进程的数据包
- 数据包由客户端发送到网卡,然后由网卡传入内核态中的prerouting链,在raw、mangle、nat表 由上到下的顺序对rule进行匹配,对数据包处理完成后,经过路由判断,确定发送目标地址为本机的服务进程,进入input链,在mangle、nat、filter表 由上到下的顺序对rule进行匹配,然后对数据包进行处理后,交由用户空间的服务进程对数据包进行处理。
- 当数据包在用户空间的服务进程处理完成后,由本机作为源地址根据路由判断将数据包经由output链对raw、mangle、nat、filter由上到下的顺序对rule进行匹配,对数据包进行处理,送由postrouting链,在mangle、nat表由上到下的顺序对rule进行匹配,根据匹配rule对数据包进行最后的封装处理,离开内核空间,经由网卡,返回给客户端。
根据路由匹配发送给其他服务器的数据包
- 数据包由客户端发送到网卡,然后传入内核态中的prerouting链,在raw、mangle、nat表 由上到下的顺序对rule进行匹配,对数据包处理完成后,经过路由判断,如果不是发送本机的服务进程的数据包,则由forward链,在mangle、filter链由上到下的顺序对rule进行匹配,对数据包进行处理。
- 当forwanrd链对数据包处理完成后,送由postrouting链,在mangle、nat表由上到下的顺序对rule进行匹配,对数据包进行最后封装处理,离开内核空间,经由网卡,发送给其他服务器。
当把上述图以及流程理解透彻了,这个时候,你对iptables的工作流程已经完全掌握了,在后续的实践操作中可以灵活的应用各种rule了。
什么是rule?
在上述中四表五链中提的rule的时候,都是简单的一带而过,现在我们来详细的说下什么是rule,rule其实就是根据既定条件匹配每个链经过的数据报文,当匹配到对应的rule以后,则由匹配的rule配置好的相关动作来处理对应的操作。
其实简单来讲,就如上诉所言iptables每条链都是一个检查站,每个通过检查站的数据报文都要在此处经过rule规则处理一遍,如果匹配,则对数据报文进行对应的操作。比如:此时rule配置中对80端口开放了通行规则,而没有对443开放,这个时候俩个带有标记的数据报文在进入检查站的时候,80会匹配对应的规则而被放行,进入到目标地址,经过数据的拆包、封装等处理之后返回给客户端。而443不在放行规则内,则会被丢弃。这里的80、443是rule当中的一种条件,而放行、拒绝则是rule匹配之后对应的动作,也就是说,条件+动作组成了相应的规则。
匹配条件
匹配条件分为基本匹配条件与扩展匹配条件。
1.基本匹配条件
源地址 Source IP
目标地址 Destination IP
2.扩展匹配条件:
除了基本匹配条件之外,还有名词为扩展匹配条件,这些属于netfilter中的一部分,只是以模块形式存在,如果想使用对应的扩展匹配条件,需要依赖对应的扩展模块。
源地址 Source IP:Port
目标地址 Destination IP:Port
处理动作
处理动作在iptables中名词为target,动作分为基本动作和扩展动作。
ACCEPT 允许数据包通过。
DROP 直接丢弃数据包,不返回任何回应信息,只对超时时间才有回应信息。
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT 对源地址做出转换,用于内网用户用同一个公网地址上网。
MASQUERADE 是SNAT的一种特殊形式,适用于动态的IP上。
DNAT 目标地址转换。
REDIRECT 在本机端口转发、映射。
LOG 只是记录对应的数据包传递过程的日志,不对数据报文做任何动作,用于审计与DEBUG。
- 本文对iptables中四表五链的对应关系、工作流程通过图文的形式做了详细讲解,也对相关名词做了简要的描述,读完的同学,对iptables的概念基本了解清楚了,下一篇 Linux防火墙iptables之Kubernetes篇 中,会引入Kubernetes作为案例使大家对iptables有更为详细深入的理解。
- 本文提及到内核态到用户态进程之间切换涉及到的知识点,并没有深入讲解,后面会单独出一个对内核以图文方式由浅入深讲解的文章,敬请期待。
在基于DevOps思想对自动化运维改革的大道上,一直砥砺前行,从未停歇。
欢迎大家关注我的公众号ID:k8stech
文章转自公众号:Kubernetes技术栈