美文网首页
iptables详解

iptables详解

作者: 宏势 | 来源:发表于2023-08-23 14:55 被阅读0次

    iptables命令 是Linux上常用的防火墙软件,是netfilter项目的一部分

    一、iptables工作流程

    iptables 采用数据包过滤机制工作的,通过对请求的数据包头进行分析,并根据预先设定的规则进行匹配来决定如何处理数据包

    1.如果匹配上规则,数据包就不再向下匹配规则了
    2.如果没有匹配上规则,按照默认策略进行处理

    二、iptables四表五链

    五链

    • INPUT 链:处理输入数据包
    • OUTPUT链 :处理输出数据包
    • FORWARD链 :处理转发数据包
    • PREROUTING链 :用于目标地址转换(DNAT)
    • POSTOUTING链 :用于源地址转换(SNAT)

    四表

    • raw :高级功能,如:网址过滤,基本不用,只能2个链 PREROUTING ,OUTPUT
    • mangle :数据包修改(QOS),用于实现服务质量。5个链都可以
    • nat :地址转换,用于网关路由器。只能3个链PREROUTING ,OUTPUT ,POSTROUTING
    • filter :包过滤,用于防火墙规则, 只能3个链 INPUT ,FORWARD ,OUTPUT

    表优先级 raw > mangle > nat > filter

    三、iptables选项参数

    iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
    
    • 选项参数
      -A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则
      -I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
      -D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
      -R num:Replays替换/修改第几条规则
      -t, --table , table 必须是 raw, nat,filter,mangle 中的一个。不指定此选项,默认的是 filter 表。
      -p:指定要匹配的数据包协议类型,有tcp,udp和icmp
      -s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
      -d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
      -i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
      -o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
      --dport num 匹配目标端口号
      --sport num 匹配来源端口号
      -L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。
      -j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如ACCEPT,DROP,REDIRECT(重定向、映射、透明代理)SNAT源地址转换,DNAT目标地址转换,MASQUERADE IP伪装(NAT),用于ADSL, LOG日志记录,也可以是用户自定义的链

    • 链管理命令
      -P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
      -F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
      -N, --new-chain chain 用指定的名字创建一个新的链。
      -X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
      -E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。
      -Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。
      -h:显示帮助信息;

    规则查看

    iptables -nvL  #列出filter表上面所有规则
    iptables -nvL -t nat  --line-numbers  # 列出nat表的所有规则 且带编号
    iptables -nvL INPUT #列出filter表中INPUT链的规则
    

    规则添加

    #在filter表中INPUT链头部(第一行)插入规则
    iptables -I INPUT -p tcp --dport 80 -s  172.16.0.0/24   -j ACCEPT; 
    #在filter表中INPUT链头第二行插入规则
    iptables -I INPUT 2 -p tcp --dport 80 -s  172.16.0.0/24   -j ACCEPT; 
    #在filter表中INPUT链尾加规则
    iptables -A INPUT  -p tcp --dport 80 -s  172.16.0.0/24   -j ACCEPT; 
    

    规则删除

    #删除filter表IPUT链的第二条规则
    iptables -D INPUT 2
    #删除指定规则
    iptables -D INPUT  -p tcp --dport 80 -s  172.16.0.0/24   -j ACCEPT; 
    

    规则持久化

    cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯
    iptables-save > /etc/sysconfig/iptables
    cat /etc/sysconfig/iptables
    

    iptables 服务不启动默认也是生效的

    清理规则

    iptables -F  # 清空所有的防火墙规则
    iptables -F INPUT  # 清空指定链 INPUT 上面的所有规则
    iptables -X  # 删除用户自定义的空链
    iptables -X INPUT  # 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。# 如果没有指定链名,则会删除该表中所有非内置的链。
    iptables -Z  # 清空计数
    
    

    四、自定义链

    自定义链是为了将iptables规则进行分类管理

    #新增自定义链
    iptables -N TEST
    #删除定义链
    iptables -X TEST
    

    相关文章

      网友评论

          本文标题:iptables详解

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