Netfilter的数据包过滤器iptables

一、iptables简介

iptables是一款基于Netfilter的Linux防火墙的管理工具,可实现完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

二、iptables的基本概念

2.1、iptables的规则表

  • 表(tables):提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理;
  • 链(chains):数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则;
  • 规则(rules):当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件,如果满足规则,系统就会根据该条规则所定义的方法处理该数据包,如果不满足规则,继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包;

2.2、iptables的规则链

  • PREROUTING链:数据进入网卡,首先会进入PREROUTING链,内核依据数据包的目的IP判断是否需要传送出去;
  • FORWARD链:数据包需要转发,并且内核允许转发,则该数据包经过该链,进入POSTROUTING链
  • INPUT链:数据包目的为本机,进入INPUT链,本机的所有进程均可访问到该数据包;
  • OUTPUT链:本机的进程发送数据包至OUTPUT链
  • POSTROUTING链:数据包经过该链;

2.3、iptables的规则表与规则链的关系

iptables中的数据包路线

2.3.1、规则表过滤数据包的优先顺序及介绍:

REHL4中是三张表五个链,在REHL5成了四张表五个链。

  • Raw表

    • :OUTPUT、PREROUTING;
    • 作用:决定数据包是否被状态跟踪机制处理;
    • 内核模块:iptable_raw;
  • Mangle表

    • :PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD;
    • 作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS;
    • 内核模块:iptable_mangle;
  • Nat表

    • :PREROUTING、POSTROUTING、OUTPUT;
    • 作用:用于网络地址转换(IP、端口);
    • 内核模块:iptable_nat;
  • Filter表

    • :INPUT、FORWARD、OUTPUT;
    • 作用:主要用于过滤数据包;
    • 内核模块:iptables_filter;

2.3.2、规则链之间的优先顺序(分三种情况):

  • 第一种情况:入站数据流向
    • PREROUTING链:从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等);
    • INPUT链:数据包目标为本地,内核将其传给INPUT链进行处理(是否允许通过等),通过以后再交给系统上层的应用程序进行响应;
  • 第二种情况:转发数据流向
    • PREROUTING链:从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等);
    • FORWARD链:数据包目标为其他外部地址,内核将其传递给FORWARD链进行处理(是否转发或拦截);
    • POSTROUTING链:之后交给POSTROUTING规则链(是否修改数据包的地址等)进行处理;
  • 第三种情况:出站数据流向
    • OUTPUT链:防火墙本机向外部地址发送的数据包,首先被OUTPUT规则链处理,之后进行路由选择;
    • POSTROUTING链:路由选择后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理;

三、iptables的使用

Author: bugwz
Link: https://bugwz.com/2019/01/01/iptables/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.