美文网首页
基础知识Iptables

基础知识Iptables

作者: 后知不觉1 | 来源:发表于2021-11-25 16:01 被阅读0次

    一、iptables的四表五链

    链是放在表中的,总共有四个表,每个表有不同的优化级:raw>mangle >nat> filter

    1、四表

    1.1、raw表

    是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理,一般在高并发时有可能会用到,来设置一些连接不跟踪状态,防止ip_conntrack文件被撑爆
    很少用

    1.2、mangle表

    主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,可以实现分流功能
    很少用

    1.3、nat表

    主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT),一般在作为网关服务器上会用到,搭建过openvpn的话,肯定会用到。

    1.4、filter表

    主要用于对数据包进行过滤,有DROP、ACCEPT、REJECT、LOG等,默认的规则是添加到filter表

    2、五链

    当数据包到达这些位置的时候会调用这些函数,在这些位置上我们可以对数据包的内容进行修改,达到控制的目的,这5个挂载点分别是PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。也就是我们常说的五条链。
    每个表中都有对应的链,因此有个优先级,会以高优先级为准

    链名 说明
    PREROUTING链 对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
    INPUT链 进来的数据包应用此规则链中的策略
    FORWARD链 转发数据包时应用此规则链中的策略
    OUTPUT链 外出的数据包应用此规则链中的策略
    POSTROUTING链 对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

    二、iptables数据流生命

    image.png

    三、iptbales说明

    3.1 命令行配置格式

    iptables [-t 表名] 管理选项 [链名] [匹配条件] [ -j 控制类型]

    • 不指定表名时,默认指filter表
    • 不指定链名时,默认指表内的所有链
    • 除非设置链的默认策略,否则必须指定匹配条件
    • 选项、链名、控制类型使用大写字母,其余均为小写
      image.png
    3.1.1、控制类型
    专有名词 作用
    ACCEPT 允许数据通过
    DROP 直接丢弃数据包,不会给出回应信息
    REJECT 拒绝数据包通过,给出回应信息
    SNAT 修改数据包源地址
    DNAT 修改数据包目的地址
    MASQUERADE 伪装为一个非固定公网IP地址
    LOG /var/log/messages 文件中记录日志信息然后将包传递给下一条规则。只是一种辅助动作,并不会真正处理数据包
    3.1.2、 常用管理选项
    • -A ∶ 在指定链的末尾追加 (–append)一条新的规则
    • -I ∶ 在指定链的开头插入(–insert)一条新的规则, 未指定序号时默认作为第一条规则
    • -R ∶ 修改、替换(–replace)指定链中的某一条规则,可指定规则序号或具体内容
    • -P ∶设置指定链的默认策略(–policy)
    • -D ∶ 删除 (–delete)指定链中的某一条规则, 可指定规则序号或具体内容
    • -F ∶ 清空(–flush)指定链中的所有规则,若未指定链名,则清空表中的所有链
    • -L∶列出 (–list)指定链中所有的规则,若未指定链名,则列出表中的所有链
    • -n ∶ 使用数字形式(–numeric)显示输出结果,如显示 IP 地址而不是主机名
    • -v ∶ 显示详细信息,包括每条规则的匹配包数量和匹配字节数
    • --line-numbers∶ 查看规则时,显示规则的序号
    3.1.3、匹配条件
    • -p :指定要匹配的数据包协议类型
    • -s :指定要匹配的数据包源 IP 地址
    • -d : 指定要匹配的数据包的目的 IP 地址
    • -i :指定数据包进入本机的网络接口
    • -o :指定数据包离开本机的网路接口
    • -sport :指定源端口号
    • --dport :指定目的端口号

    四、iptables命令详解

    1、查看
        iptables -nL    #默认查看filter表规则
        iptables -nL -t filter  #查看指定表 filter表规则
        iptables -nL  --line-numbers  # 列出filter表规则并带上id
    
    1、添加

    命令格式
    iptables [-t 表名 ] [-A |-I |-R] <链名><控制类型>

        iptables -A INPUT -p22 ACCEPT   #在filter表追加一条规则
        iptables -I INPUT 1 -p22 ACCEPT   #filter表id为1的插入一条规则id 为1
    
    2、删除

    命令格式
    iptables [-t 表名 ] -D <链名><控制类型> 或者 iptables [-t 表名 ] -D <链名> [id]

        #先列出iptables的id
        iptables -nL  --line-numbers  
        iptables -D INPUT  xxx  # 删除filter表下INPUT链id为xxx的规则
        #也可以根据条件删除
        iptables -t filter -D INPUT -p icmp -j REJECT    #删除filter表下INPUT链上拒绝icmp协议的规则
    
    4、设置默认规则

    命令格式 iptlables [-t 表名 ] -P <链名><控制类型>
    一般不会设置

         iptables -P INPUT DROP             #设置filter 表,INPUT 链默认控制类型为 DROP
         iptables -P FORWARD DROP           #设置 filter 表,foreword 链默认类型为 DROP
    
    5、清空规则

    iptables [-t 表名] -F [链名]

          iptables -F   # 删除默认表filter 的所有链规则
           iptables -F INPUT #删除默认表filter的INPUT链规则
    

    五、 SNAT 和 DNAT

    在vpn搭建过程中要替换掉虚拟ip的网段,就要用到SNAT,因为安全组中会校验ip,所以这个是关键
    条件

    • 局域网各主机已正确设置IP地址、子网掩码、默认网关地址(一般情况下都设置好了,无需处理)

    • Linux网关开启IP路由转发

         vim /etc/sysctl.conf
         net.ipv4.ip_forward = 1   #将此行写入配置文件,开启ipv4转发
         sysctl -p     #读取修改后的配置
      

    demo

     iptables -t nat -A POSTROUTING -s 192.168.23.0/24 -o ens33 -j SNAT --to 12.0.0.1  #将入口为网段ip为  192.168.23.0/24 转发到ens33网卡并替换ip为12.0.0.1  
     iptables -t nat -A POSTROUTING -s 192.168.23.0/24 -o ens33 -j MASQUERADE  #将入口网段192.168.23.0/24转发到ens33网卡并随机伪装ip,这个在vpn 搭建过程中无法使用
    

    相关文章

      网友评论

          本文标题:基础知识Iptables

          本文链接:https://www.haomeiwen.com/subject/tnsntrtx.html