iptables/netfilter详解


一、前言

1.防火墙(Firewall)是隔离工具;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(识别条件)进行检测,
        对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件。
    
2.防火墙分类:
        硬件防火墙:在硬件级别能部分防火墙,另一部分功能基于软件实现;
        软件防火墙:应用软件处理逻辑运行通用硬件实现的防火墙;
        主机防火墙:服务范围为当前主机;
        网络防火墙:服务范围为局域网;
        
3.iptables/netfilter 包过滤型防火墙:

        软件实现的主机或网络防火墙

二、iptables 的历史以及工作原理

1.1 iptables的发展: ip fw --> ip chains --> ip tables
    iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。
    但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。
    当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。
    他们都是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。
    而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter(网络过滤器)

1.2 内核空间中选择了5个位置:
    1.内核空间中:从一个网络接口进来,到另一个网络接口去的
    2.数据包从内核流入用户空间的
    3.数据包从用户空间流出的
    4.进入/离开本机的外网接口
    5.进入/离开本机的内网接口
    
2. iptables的工作机制

2.1 iptables/netfilter软件:

    是实现主机或网络包过滤防火墙,其中iptables是位于用户空间的命令行程序,用于生成规则送往内核中的netfilter之上。
netfilter位于内核中tcp/ip协议栈上的一个防火墙框架framework;5个钩子函数。

2.2 netfilter:(hook function --> 钩子函数)

    1.prerouting    (路由前)
    2.input         (数据包流入口)
    3.forward        (转发关卡)
    4.output         (数据包出口)
    5.postrouting    (路由后)
    
2.3 iptables:(chain--> 链) 5

    1.PREROUTING    (路由前)
    2.INPUT            (数据包入口)
    3.FORWARD        (数据包转发)
    4.OUTPUT        (数据包出口)
    5.POSTROUTING    (路由后)
        
3.iptables防火墙策略    
        
3.1 tables:功能--> 表 4

    1.filter:过滤,防火墙。
    2.nat:network address translation(网络地址转发),用于修改报文的源地址或目标地址,甚至是端口。
    3.mangle:拆解报文,做出修改,并重新封装起来。
    4.raw:关闭nat表上启用的连接追踪机制。
    
优先级次序(由高而低):
                4.raw --> 3.mangle --> 2.nat --> 1.filter
  
3.2 功能<-->钩子<==>表<-->链 对应关系:

    4.raw:PREROUTING-->路由后,OUTPUT-->流出
    3.mangle:PREROUTING-->路由前,INPUT-->数据包入口,FORWARD-->转发,OUTPUT-->出口,POSTROUTING-->路由后
    2.nat:PREROUTING-->路由前,INPUT--数据包入口,OUTPUT-->出口,POSTRUTING-->路由后
    1.filter:INPUT-->数据包入口,FORWARD-->转发,OUTPUT--出口
            
3.3 报文流向:

    1.到本机某进程的报文:PREROUTING --> INPUT
    2.由本转发的报文:PREROUTING --> FORWARD --> POSTROUTING
    3.由本机某进程发出的:OUTPUT --> POSTROUTING   
        
3.4 规则的组成的部分:

    1.匹配条件
    2.网络层首部属性值 IP 首部数据包
    3.传输层首部属性值 TCP 首部数据包
    4.附加的条件
    5.处理动作
                
3.5 TCP/IP协议栈:

    1.数据链接层:物理到物理设备之间的通信;(MAC,Media Access Control)
    2.网络层:源主机到目标主机之间的通信 IP
    3.传输层:进程到进程之间的通信 TCP UDP
      
注意:
    1.CentOS 5/6:iptables命令编写规则;
    2.CentOS 7:firewalld;  使用需要关闭firewalld:systemctl disable firewalld.service
    3.规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的.
    
            
4. iptables规则写法

4.1 规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,就由规则后面指明的处理动作进行处理;
    匹配条件:
            基本匹配条件:简单检查IP、TCP、UDP等报文的某属性进行匹配的机制;                    
            扩展匹配条件:需要借助于扩展模块进行的匹配条件指定即为扩展匹配;
    处理动作:
            基本动作:ACCEPT,DROP, ...
            扩展动作:需要借助扩展模块进行的动作;
                
4.2 添加规则之时需要考量的问题:

    1.报文的流经路径,判断添加规则至哪个链上。
    2.确定要实现的功能,判断添加规则至哪个表上。
    3.要指定的匹配条件,以用于匹配目标报文。
          
三、iptables命令详解

3.1 iptables命令的使用格式:
    
    iptables [-t table] {-A|-C|-D} chain rule-specification
        
    ip6tables [-t table] {-A|-C|-D} chain rule-specification

    iptables [-t table] -I chain [rulenum] rule-specification

    iptables [-t table] -R chain rulenum rule-specification

    iptables [-t table] -D chain rulenum

    iptables [-t table] -S [chain [rulenum]]

    iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

    iptables [-t table] -N chain

    iptables [-t table] -X [chain]

    iptables [-t table] -P chain target

    iptables [-t table] -E old-chain-name new-chain-name

        rule-specification规则 = [matches...] [target]

        match匹配 = -m matchname [per-match-options]

        target目标 = -j targetname [per-target-options]
        
3.2 规则的编写格式:

    iptables [-t table] COMMAND chain [-m matchname [per-match-options]] [-j targetname [per-target-options]]
                    
1) -t table:
    
    默认为filter;其它可用的有raw, mangle, nat;
    
2) COMMAND:
    chain链:
    -P:policy ['p