Z.S.K.'s Records

iptables学习一(iptables介绍)

我们说linux系统下的大都指的是iptables,但事实是iptables只是一个用户层命令行工具,真正实现防火墙功能的是内核层的netfilter,我们可以不必区分这两者的区别,大多数情况下我们只对iptables进行操作,由iptables操作netfilter.

netfilet/iptables可做为主机防火墙,也可做为网络防火墙.

作用于主机防火墙则是针对单个主机的,网络防火墙则是针对该网络后的所有服务器集体,例如负载均衡、网关设备上

首先,盗用一张图,我们先看看数据包在主机里的流向(假设已开启iptables).

iptables2

数据包流向

  1. 一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去.
  2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链.数据包到了INPUT链后,任何进程都会收到它.根据数据包中的目的端口号来决定具体由哪个进程处理,本机上运行的程序可以发送数据包,这些数据包会经 过OUTPUT链,然后到达POSTROUTING链输出.
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD链,然后到达POSTROUTING链输出转发至其它主机
  4. 由本机出去的数据包经OUTPUT转到POSTROUTING

简言之:

**经过本机的数据包: PREROUTING —-> IPNUT —-> OUTPUT —-> POSTROUTING **

**经本机转发的数据包: PREROUTING —-> FORWARD —-> POSTROUTING **

**由本机出去的数据包: OUTPUT —-> POSTROUTING **

四表五链

那上面的那些红色标注的是什么呢,还有大家常说的四表五链又到底什么意思?

规则

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

总结之: 规则就是规定哪些数据可以通过/直接丢弃,哪些数据包需要转发,哪些数据包需要由本机处理,所有的规则一条一条按顺序去匹配直到匹配上,如果到最后一条规则执行完之后都匹配不上则使用默认规则.

要说清楚四表五链,再盗一张图

iptables1

上图中黄色方框框住的为四表

红色框住的为五链

四表

  1. filter(默认表)
    主要用于过滤数据包,该表根据系统管理员预定义的一组规则过滤符合条件的数据包.对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤.Filter表是默认的表,如果没有指定哪个表,iptables 就默认使用filter表来执行所有命令,filter表包含了INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)在filter表中只能允许对数据包进行接受,丢弃的操作,而无法对数据包进行更改.
  2. nat
    主要用于网络地址转换NAT,该表可以实现一对一,一对多,多对多等NAT工作,iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链(修改即将到来的数据包),POSTROUTING链(修改即将出去的数据包),OUTPUT链(修改路由之前本地生成的数据包).
  3. mangle
    主要用于对指定数据包进行更改,在内核版本2.4.18后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包).
  4. raw
    只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理.一但用户使用了RAW表,在 某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.

五链

  1. PREROUTING: 在对数据包作路由选择之前,应用此链中的规则.
  2. FORWARD: 当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则.
  3. INPUT: 当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则.
  4. OUTPUT: 当防火墙本机向外发送数据包(出站)时,应用此链中的规则.
  5. POSTROUTING: 在对数据包作路由选择之后,应用此链中的规则.

从上面两张图可以看出,四表五链当中,有些链只能存在于特定的表或者说有些表只能包含特定的链

一般情况 下,写iptables规则的时候都是以表为入口,这点很重要

PREROUTING 规则可以存在于: raw、mangle、nat

INPUT规则可以存在于: mangle、filter

FORWARD规则可以存在于: mangle、filter

OUTPUT规则可以存在于: raw、filter、mangle、nat

POSTROUTING规则可以存在于: mangle、nat

表中的规则可以被五链使用:

raw: PREROUTING、OUTPUT

mangle: PREROUTING 、INPUT、FORWARD、OUTPUT、POSTROUTING

nat: PREROUTING、OUTPUT、POSTROUTING

filter: INPUT、FORWARD、OUTPUT

再次盗用一张图

iptables1

动作

前面我们说了,规则是按顺序一条一条进行匹配直到匹配上,那数据包匹配上了之后如何操作呢?这就是动作.常用的动作有如下几个:

  1. DROP: 直接丢弃该数据包,且对端不会有任何提示,对端可能在超时时才会知道
  2. ACCEPT: 接受数据包
  3. REJECT: 拒绝该数据包,会在对端进行提示
  4. LOG: 记录该数据包然后把该数据包传递到下一规则链中

总结

  1. iptables是处于用户空间的命令行工具,真正实现功能的位于内核空间的netfilter.
  2. iptables有四表五链来实现数据包的流转.
  3. iptables中的数据包是按规则顺序一条一条匹配的,如果匹配上的话则执行相应的动作,如果到最后一条规则执行完之后都匹配不上,则使用默认规则.

参考文章:

转载请注明原作者: 周淑科(https://izsk.me)


 wechat
Scan Me To Read on Phone
I know you won't do this,but what if you did?