• iptables命令


    iptables命令主要涉及三张表(常用的是两张表)和五条链。

    下图是iptables命令执行流程。这个流程很重要,等看完iptables命令用法后再来回顾这个流程图就会很好地理解iptables这个命令。

    (图片来自网络)


    表: filter/nat
    链: INPUT/FORWARD/PREROUING/POSTROUTING

    iptables [-t 要操作的表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配到以后的动作]

    操作命令: (-A -I -D -R -P -F)
    查看命令: (-[vnx]L)

    -A <链名>
    APPEND,追加一条规则放到最后
    eg. iptables -t filter -A INPUT -j DROP

    -I <链名> [规则号码]
    INSERT, 插入一条规则
    eg. iptables -I INPUT -j DROP
    在filter表的INPUT链插入一条规则(第1条)
    eg. iptables -I INPUT 3 -j DROP
    在filter表的INPUT链里插入一条规则(第3条)

    iptables默认操作的表是filter表
    规则号码可以不填,默认是1,确保规则号码<= 已有规则数 + 1

    -D <链名> <规则号码|具体规则内容>
    DELETE 删除一条规则
    eg. iptables -D INPUT 3
    按号码删除INPUT链中的第三条规则
    eg. iptables -D INPUT -s 192.168.0.1 -j DROP
    按内容删除INPUT链中内容为"-s 192.168.0.1 -j DROP"的规则

    -R <链名> <规则号码> <具体规则内容>
    REPLACE,替换一条规则
    eg. iptables -R INPUT 3 -j ACCEPT
    确保规则号码<=已有规则数

    -P <链名> <动作>
    POLICY,设置某个链的默认规则

    eg. iptables -P INPUT DROP
    设置filter表INPUT链的默认规则是DROP

    当数据包没有被规则列表里的任何规则匹配到的时候,按此默认规则处理。动作前面不能加-j,这也是唯一一种匹配动作前面不加-j的情况

    -F [链名]
    FLUSH, 清楚规则
    eg. iptables -F INPUT
    清空filter表INPUT链中的所有规则

    iptables -t nat -F PREROUTING
    清空nat表PREROUTING链中的所有规则

    -F仅仅清空链中的规则,并不影响-P设置的默认规则
    -P设置DROP后,使用-F一定要小心!!!
    如果不写链名,默认清空所有链里的所有规则

    -L [链名]
    LIST, 列出规则
    v: 显示详细信息,包括每条规则的匹配报数量和匹配字节数
    x: 在v的基础上,禁止自动换算成(K、M)
    n: 只显示IP地址和端口号码,不显示域名和服务器

    eg. iptables -L
    错略列出filter表所有链及所有规则
    eg. iptables -t nat -vnL
    用详细的方式列出nat表所有链的所有规则,只显示IP地址和端口号
    eg. iptables -t nat -vxnL PREROUTING
    用详细方式列出nat表PREROUTING链的所有规则以及详细数字,不自动换算


    匹配条件
    流入、流出接口(-i -o)
    来源、目的地址(-s -d)
    协议类型 (-p)
    来源、目的端口(--sport --dport)


    -i <匹配数据进入的网络接口>
    例如: -i eth0
    匹配是否从网络接口eth0进来

    -o <匹配数据流出的网络接口>
    -o eth0
    -s <匹配来源地址>
    可以是IP、NET、DOMAIN,可以为空
    eg. -s 192.168.0.1
    匹配来自192.168.0.1的数据包

    eg. -s 192.168.1.0/24
    匹配来自192.168.1.0/24网络的数据包

    -d <匹配目的的地址>
    -d 202.106.0.20 匹配去往202.106.0.20的数据包
    -d 202.106.0.0/16 匹配去往202.106.0.0/16的数据包
    -d www.qq.com 匹配去往域名www.qq.com的数据包


    -p <匹配协议类型>
    可以是TCP、UDP、ICMP等,也可为空
    eg. -p tcp
    匹配tcp数据包
    eg. -p udp
    匹配udp数据包
    eg. -p icmp
    匹配icmp数据包

    --sport <匹配源端口>
    eg. --sport 1000
    匹配源端口是1000的数据包
    eg. --sport 1000:3000
    匹配源端口是1000-3000的数据包(包含两端的端口)
    eg. --sport :3000
    匹配3000以下的端口,含3000
    eg. --sport 1000:
    匹配1000以上的数据包

    --dport <匹配目的端口>
    用法和--sport相同

    注意: --sport和--dport必须配合和-p参数使用

    匹配条件的例子:
    iptables -t filter -A INPUT -s 192.168.0.1 -d www.qq.com -p tcp --dport 80

    动作处理方式
    ACCEPT
    DROP
    SNAT
    DNAT
    MASQUERADE


    -j ACCEPT
    通过,允许数据包通过本链而不拦截它

    例如:
    iptables -A INPUT -j ACCEPT
    允许所有访问本机IP的数据包通过

    -j DROP
    丢弃,阻止数据包通过本链而丢弃它

    iptables -A FORWARD -s 192.168.80.39 -j DROP
    阻止来源地址为192.168.80.39的数据包"通过"本机

    -j DNAT --to IP[-IP][:端口-端口]
    (nat表的PREROUTING链)
    eg. iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
    把从eth0进来要访问TCP/80的数据包目的地址改为192.168.0.1

    eg. iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 81 -j DNAT --to 192.168.0.2:80
    将访问本地的eth0数据包路中目的端口是81的数据包路由到192.168.0.2的80端口

    eg. iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.168.0.10

    -j SNAT --to IP[-IP] [:端口-端口]
    (nat表的POSTROUTING)
    源地址转换,SNAT支持转换为单IP,也支持转换到IP地址池(一组连续的IP地址)
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
    将内网192.168.0.0/24的源地址修改为 1.1.1.1,用于NAT


    -j MASQUERADE
    动态源地址转换(动态IP的情况下使用)
    eg. iptables -t nat -A POSTROTING -s 192.168.0.0/24 -j MASQUERRADE
    将源地址是192.168.0.0/24的数据包进行地址伪装


    附件模块
    a. 按包状态匹配(state)
    b. 按来源MAC匹配(mac)
    c. 按包速率匹配(limit)
    d. 多端口匹配(multiport)


    按包状态匹配
    -m state --state <状态>
    状态:NEW、RELATED、ESTABLISHED、INVALID
    NEW: 有别于tcp的syn
    ESTABLISHED:连接态
    RELATED: 衍生态
    INVALID:不能识别属于哪个链接或没有任何状态

    eg. iptables -A INPUT -m state --state RELATED, ESTABLISHED -j ACCEPT

    按照mac地址匹配
    -m mac --mac-source <MAC>

    eg. iptables -A FORWARD -m mac --mac-source 10:89:10:00:ae:90 -j DROP

    报文经过路由后,数据包中原有的mac信息被替换,所以在路由后的iptables中中使用mac模块是没有意义的

    按照速率匹配数据包
    -m limit --limit 匹配速率 [--burst 缓冲数量]
    用一定的速率去匹配数据包
    eg. iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT

    按照端口一次匹配多个端口
    -m multiport <--sports|--dports|--ports> 端口[,端口,...,端口n]
    eg. iptables -A INPUT -p tpc -m multiport --dports 21,22,25,80,110 -j ACCEPT
    多端口匹配命令也要和-p一起使用,指定协议



    使用总则
    所有链名必须大写
    INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
    所有表名必须小写
    filter/nat/mangle
    所有动作必须大写
    ACCEPT/DROP/SNAT/DNAT/MASQUERADE
    所有匹配必须小写
    -s/-d/-m <module_name>/-p

    表:
    filter:过滤的时候使用
    nat: 用于做NAT的时候使用

    链:
    INPUT: 位于filter表,用于匹配目的IP是本机的数据包
    FORWARD: 位于filter表,匹配穿过本机的数据包,与nat表关系很密切
    PREROUTING: 位于nat表,用于修改目的地址(DNAT)
    POSTROUTING:位于nat表,用于修改源地址(SNAT)

    iptables在规则链中检查的时候,如果匹配到具体的规则,则执行规则定义的动作,然后就放弃其他的规则检查。如果没有匹配到具体的规则,就会使用默认定义的规则(预设规则)。

    规则链是有顺序的!

  • 相关阅读:
    Lesson 61-62 Are Relatives Important to You?
    Lesson 59-60 Househusband
    Lesson 57-58 Cosmetic Surgery
    Lesson 55-56 TV Commercials
    Blash
    高维宇宙
    巴卡尔
    完美标号
    小A点菜(luogu 1164)简单DP
    聪明的质监员(qc)
  • 原文地址:https://www.cnblogs.com/sliverdang/p/iptables_cmd.html
Copyright © 2020-2023  润新知