ubuntu系统关闭防火墙命令 ubuntu防火墙设置( 二 )


5种默认规则链防火墙的作用就在于对经过的报文匹配”规则”,然后执行对应的”动作” 。所以,当报文经过这些关卡(HOOK—或者说是钓鱼台)的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了”链” 。所以,每个经过这个”关卡”的报文,都要将这条”链”上的所有规则匹配一遍(满足其中条规规则,则跳出这个规则链匹配,否则匹配到链上的最后一条规则),如果有符合条件的规则,则执行规则对应的动作 。
iptables涉及5种默认规则链,从应用时间点的角度理解这些链:

  • INPUT链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则 。
  • OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则 。
  • FORWARD链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则 。
  • PREROUTING链:在对数据包作路由选择之前,应用此链中的规则,如DNAT 。
  • POSTROUTING链:在对数据包作路由选择之后,应用此链中的规则,如SNAT 。
iptables的四张表我们在每个”链”上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对IP或者端口的过滤,B类规则是修改报文,那么这个时候,我们把具有相同功能的规则的集合叫做”表” 。从而使不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能,而我们定义的规则也都逃脱不了这4种功能的范围
  • filter表
主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG) 。filter 表对应的内核模块为iptable_filter,包含三个规则链:
INPUT链:INPUT针对那些目的地是本地的包FORWARD链:FORWARD过滤所有不是本地产生的并且目的地不是本地(即本机只是负责转发)的包OUTPUT链:OUTPUT是用来过滤所有本地生成的包
  • nat表
主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT) 。属于一个流的包(因为包的大小限制导致数据可能会被分成多个数据包)只会经过这个表一次 。如果第一个包被允许做NAT或masqueraded,那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通过这个表 。表对应的内核模块为 iptable_nat,包含三个链:
PREROUTING链:作用是在包刚刚到达防火墙时改变它的目的地址OUTPUT链:改变本地产生的包的目的地址POSTROUTING链:在包就要离开防火墙之前改变其源地址
  • mangle表
主要用于修改数据包的ToS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛 。包含五个规则链——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD 。
  • raw表
是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理 。在匹配数据包时,raw表的规则要优先于其他表 。包含两条规则链——OUTPUT、PREROUTING
iptables中数据包和4种被跟踪连接的4种不同状态:
  • NEW:该包想要开始一个连接(重新连接或将连接重定向)
  • RELATED:该包是属于某个已经建立的连接所建立的新连接 。例如:FTP的数据传输连接就是控制连接所 RELATED出来的连接 。–icmp-type 0 ( ping 应答) 就是–icmp-type 8 (ping 请求)所RELATED出来的 。
  • ESTABLISHED :只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包 。
  • INVALID:数据包不能被识别属于哪个连接或没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据 。
链和表的关系
  • PREROUTING 的规则可以存在于:raw表,mangle表,nat表 。
  • INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有) 。
  • FORWARD 的规则可以存在于:mangle表,filter表 。
  • OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表 。
  • POSTROUTING 的规则可以存在于:mangle表,nat表 。
规则根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理