iptables命令速查

iptables 命令速查


在实际操作 iptables 的过程中,是以作为操作入口的

iptables 指令基本格式(参考 man 文档)

  • 指令语法概览

    iptables [-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]
    
  • Target

    • ACCEPT means to let the packet through.
    • DROP means to drop the packet on the floor.
    • RETURN means stop traversing this chain and resume at the next rule in the previous (calling) chain. (有点像函数中的返回)
  • Table

    • -t, --table table

      filter  (default)
      nat
      mangle
      raw
      security      
      
    • 此选项指定命令应操作的数据包匹配表。如果没有指定,默认为 filter 表

  • 选项

    • 指令

      指令解析
      -A, --append chain rule-specification
      在 chain 的末尾添加一条或多条规则
      -C, --check chain rule-specification
      检查所选链中是否存在与规范匹配的规则。此命令使用与-D相同的逻辑来查找匹配的条目,但不更改现有iptables配置,并使用其退出代码来指示成功或失败。
      -D, --delete chain rule-specification
      -D, --delete chain rulenum
      从所选链中删除一个或多个规则。此命令有两个版本:可以将规则指定为链中的第几条(第一个规则从1开始)或要匹配的规则。
      -I, --insert chain [rulenum] rule-specification在所选链中的指定位置插入一个或多个规则。如果 rulenum 为1,则在链的开头插入一条或多条规则。默认头部插入。
      -R, --replace chain rulenum rule-specification替换链中第 rulenum 条规则
      -L, --list [chain]
      列出所选链中的所有规则,如果不指定 chain,则默认列出当前表所有 chain 中的规则,可以搭配 -t 表名,默认是 filter 表.它也经常与 -n 选项一起使用,以避免长时间反向DNS查找。
      -S, --list-rules [chain]
      打印所选链中的所有规则。如果未选择任何链,则所有链都将像 iptables save 一样打印。与其他所有 iptables 命令一样,可以用 -t 表名 指定的表(默认是 filter 表)。
      -F, --flush [chain]删除所选链中的所有规则(如果未给出任何链,则刷新表中的所有链)。这相当于逐个删除所有规则。
      -Z, --zero [chain [rulenum]]
      将所有链中的数据包和字节计数器归零,或仅将给定链或链中的给定规则归零。也可以搭配 -L,--list(list) 选项,以便在计数器被清除之前立即查看它们。
      -N, --new-chain chain按给定名称创建新的用户自定义链。新链的名称不能是已存在的名称。
      -X, --delete-chain [chain]
      删除指定的用户定义链。被删除的链不能被引用链。如果存在,则必须先删除或替换引用规则,然后才能删除链。链必须为空,即不包含任何规则。如果没有指定要删除的链名,它将尝试删除表中的每个非内置链。(内置链有:prerouting, input, output, forward, postrouting)
      -P, --policy chain target
      为链设置默认的 target(可用的是 DROP 和 ACCEPT),这个target 称作策略。所有不符合规则的包都被强制使用这个策略。只有内建的链才可以使用策略。但内建的链和用户自定义链都不能被作为策略使用,也就是说不能象这样使用:iptables -P INPUT allowed(或者是内建的链)
      -E, --rename-chain old-chain new-chain将用户指定的链重命名为用户提供的名称。这是装饰性的,对 table 的结构没有影响。
    • 参数,以下参数构成规则规范(在add、delete、insert、replace和append命令中使用)

      参数解析
      -4, --ipv4参考 man 文档
      -6, --ipv6参考 man 文档
      [!] -p, --protocol protocol
      规则或要检查的数据包的协议。指定的协议可以是tcp、udp、udplite、icmp、icmpv6、esp、ah、sctp、mh或特殊关键字“all”。也可以是 /etc/protocols 中定义的协议。协议前如果有 ! 表示,即反向匹配的意思。数字 0 或者是 all 表示所有协议(这也是默认值)
      [!] -s, --source address[/mask][,…]
      指定源地址,地址可以是网络名称、主机名、网络IP地址(带/mask)或普通IP地址。主机名规则被提交到内核前只会解析一次。请注意,指定任何要用远程查询(如DNS)解析的名称是一个非常糟糕的主意。mask指定,若为 24 等于是 255.255.255.0。地址前的 ! 符号表示非该地址。 --src 是该选项的别名。可以同时指定多个地址,但是规则最终会以 append 的方式展开,同理删除时(-D)也会删除多个规则
      [!] -d, --destination address[/mask][,…]指定目的地址,使用方式同 -s,别名是 --dst
      -m, --match match
      指定要使用的匹配项,即测试特定属性的扩展模块。匹配集构成了调用 target 的条件。匹配项将按照命令行上指定的顺序从头到尾进行评估,并以短路方式工作,即如果一个扩展产生 false,评估将停止。
      -j, --jump target
      这指定了规则的 target ;即,如果数据包与之匹配,该怎么办。target 可以是用户定义的链(此规则所在的链除外)、能立即决定数据包命运的特殊内置 target 之一,或扩展(请参阅 man)。如果在规则中省略了这个选项(并且没有使用 -g),那么匹配规则对数据包的命运没有影响,但是规则上的计数器将递增。
      -g, --goto chain-g 选项将规则重定向到一个用户自定义链中,与 -j 选项不同,从自定义链中返回时,是返回到调用 -g 选项上层的那一个 -j 链中
      [!] -i, --in-interface name
      接收数据包的接口的名称(仅适用于进入INPUT, FORWARD 和 PREROUTING 链的数据包)。若接口名称之前使用 !,其意义相反,若省略该参数,则可以匹配任何的接口。如果接口名后跟了 +操作符,表示通配所有以该名开头的网络接口
      [!] -o, --out-interface name
      将要发送数据包的接口的名称(对于进入了 FORWARD, OUTPUT 和 POSTROUTING 链的数据包),若接口名称之前使用 !,其意义相反,若省略该参数,则可以匹配任何的接口。如果接口名后跟了 +操作符,表示通配所有以该名开头的网络接口
      [!] -f, --fragment参考 man 文档
      -c, --set-counters packets bytes
      这个选项可以让我们在创建或者修改规则(INSERT, APPEND, REPLACE)的时候,设置字节或者报文的计数值。语法大致是这个样子的,--set-counters 20 4000,这个命令设置报文计数值为 20 而字节计数值为 4000.
    • 其他

      参数解析
      -v, --verbose
      这个选项主要和—list 一起使用。假如两个一起用的话,输出信息就包含接口地址/规则选项以及 TOS 的标记。 --list 命令还会列出字节和报文统计。其中计数器是以 K、M、G(这里用的是 10 的幂而不是 2 的幂)为单位的。如果想知道到底有多少个包、多少字节,还要用到选项-x,下面会介绍。如果 -v--append、--insert、--delete 或--replace 连用,iptables 会输出详细的信息告诉你规则是如何被解释的、是否正确地插入等等
      -w, --wait [seconds]
      等待 xtables 锁。为了防止程序的多个实例同时运行,将尝试在启动时获取独占锁。默认情况下,如果无法获得锁,程序将退出。此选项将使程序等待(无限期或(可选秒),直到可以获得独占锁
      -W, --wait-interval microseconds
      每次迭代等待的时间间隔(微秒级)。在运行对延迟敏感的应用程序时,等待 xtables 锁的时间过长可能是不可以接受。此选项将为每次迭代指定占用的时间量。默认间隔为1秒。此选项只能和 -w 合用
      -n, --numeric
      iptables 默认为我们进行了名称解析,但是在规则非常多的情况下如果进行名称解析,效率会比较低,所以,在没有此需求的情况下,我们可以使用-n选项,表示不对IP地址进行名称反解,直接显示IP地址
      -x, --exact
      使--list 输出中的计数器显示准确的数值,而不用 K、M、G 等估值。注意此选项只能和 --list 连用
      –line-numbers
      --line-number 命令和 —list 一起合用,他们用来控制输出数字。用了这个选项后,每一条规则都带有序号,这样我们就很方便的知道每条规则的位置。这条命令只能和 —list 合用
      –modprobe=command
      此选项告诉 iptables 探测并装载要使用的模块。这是非常有用的一个选项,万一 modprobe 命令不在搜索路径中,就要用到了。有了这个选项,在装载模块时,即使有一个需要用到的模块没装载上,iptables 也知道要去搜索。

常用指令

查看规则

  • 查看 raw 表中 OUTPUT 链 的规则

    iptables  -t raw -L OUTPUT -nv
    
    输出结果:
        Chain OUTPUT (policy ACCEPT 1566 packets, 185K bytes)
        pkts bytes target     prot opt in     out     source               destination  
        
        因为没有启用所以没有数据
    
  • 结果解析

    列名意义
    pkts对应规则匹配到的报文的个数。
    bytes对应匹配到的报文包的大小总和。
    target规则对应的target,往往表示规则对应的”动作”,即规则匹配成功后需要采取的措施。
    prot表示规则对应的协议,是否只针对某些协议应用此规则。
    opt表示规则对应的选项。
    in表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则。
    out表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则。
    source表示规则对应的源头地址,可以是一个IP,也可以是一个网段。
    destination表示规则对应的目标地址。可以是一个IP,也可以是一个网段。

删除已有规则

  • 删除默认 filter 表中的所有链中的规则
    iptables -F
    或
    iptables –flush
    

设置链的默认策略

  • 设置默认表中链的默认策略
    链的默认政策设置为”ACCEPT”(接受),若要将INPUT,FORWARD,OUTPUT链设置成”DROP”(拒绝),命令如下:
    
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP
    

精确增删改

增加

注意点:添加规则时,规则的顺序非常重要

  • 头部添加
    在指定表的指定链的首部添加一条规则,-I 选型表示在对应链的开头添加规则
    
    命令语法:iptables -t 表名 -I 链名 匹配条件 -j target ,示例:
        iptables -t filter -I INPUT -s 192.168.0.100 -j DROP    
    
  • 指定位置添加
    在指定表的指定链的指定位置添加一条规则
    
    命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作 ,示例:
        在第 3 条位置添加
        iptables -t filter -I INPUT 3 -s 192.168.0.100 -j REJECT    
    
  • 尾部添加
    在指定表的指定链的尾部添加一条规则,-A 选项表示在对应链的末尾添加规则,省略 -t 选项时,表示默认操作 filter 表中的规则
    
    命令语法:iptables -t 表名 -A 链名 匹配条件 -j target ,示例:
        iptables -t filter -A INPUT -s 192.168.0.100 -j ACCEPT    
    
删除

注意点:如果没有保存规则,删除规则时请慎重

  • 按照规则序号删除规则,删除指定表的指定链的指定规则,-D选项表示删除对应链中的规则。

    命令语法:iptables -t 表名 -D 链名 规则序号,示例:
        iptables -t filter -D INPUT 3    
        
    示例表示删除 filter 表中 INPUT 链中序号为3的规则。
    
  • 按照具体的匹配条件动作删除规则,删除指定表的指定链的指定规则。

    命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作,示例:
        iptables -t filter -D INPUT -s 192.168.1.100 -j DROP    
        
    示例表示删除 filter 表中 INPUT 链中源地址为 192.168.1.100 并且动作为 DROP 的规则。
    
  • 删除指定表指定链中的所有规则-F 选项表示清空对应链中的规则,执行时需三思。

    命令语法:iptables -t 表名 -F 链名,示例:
        iptables -t filter -F INPUT
    
  • 删除指定表中的所有规则,执行时需三思

    命令语法:iptables -t 表名 -F,示例:
        iptables -t filter -F
    
修改

注意点:如果使用 -R 选项修改规则中的动作,那么必须指明原规则中的原匹配条件,例如源 IP,目标 IP 等。

  • 修改指定表中指定链的指定规则-R 选项表示修改对应链中的规则,使用 -R 选项时要同时指定对应的链以及规则对应的序号
    并且规则中原本的匹配条件不可省略。

    命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作,示例:
        iptables -t filter -R INPUT 3 -s 192.168.1.100 -j ACCEPT
    
    上述示例表示修改 filter 表中 INPUT 链的第 3 条规则,将这条规则的动作修改为 ACCEPT, -s 192.168.1.100 为这条规则中原本的匹配条件,
    如果省略此匹配条件,修改后的规则中的源地址可能会变为 0.0.0.0/0。
    
  • 其他修改规则的方法:先通过编号删除规则,再在原编号位置添加一条规则。

  • 修改指定表指定链默认策略(默认动作),并非修改规则,可以使用如下命令

    命令语法:iptables -t 表名 -P 链名 动作,示例:
        iptables -t filter -P FORWARD ACCEPT    
        
    表示将 filter 表中 FORWARD 链的默认策略修改为 ACCEPT  
    

保存规则

方法一

  • CentOS6 中保存规则命令如下,表示将 iptables 规则保存至 /etc/sysconfig/iptables 文件中,如果对应的操作没有保存,那么当重启 iptables 服务以后

    service iptables save
    
  • CentOS7 中保存

     CentOS7 已经不再使用 init 风格的脚本启动服务,而是使用 unit 文件,所以,在 centos7 中已经不能再使用类似 service iptables start 
     这样的命令了,所以 service iptables save也无法执行,同时,在centos7中,使用firewall替代了原来的iptables service,不过不用担心,
     我们只要通过yum源安装iptables与iptables-services即可(iptables一般会被默认安装,但是iptables-services在centos7中一般不会被默认安装),
     在centos7中安装完iptables-services后,即可像centos6中一样,通过service iptables save命令保存规则了,规则同样保存在
     /etc/sysconfig/iptables文件中。
    
    此处给出 centos7 中配置 iptables-service 的步骤
    
    # 配置好 yum 源以后安装 iptables-service
        yum install -y iptables-services
        
    # 停止firewalld
        systemctl stop firewalld
        
    # 禁止firewalld自动启动
        systemctl disable firewalld
        
    # 启动iptables
        systemctl start iptables
        
    # 将iptables设置为开机自动启动,以后即可通过 iptables-service 控制 iptables 服务
       systemctl enable iptables
     
    上述配置过程只需一次,以后即可在 centos7 中愉快的使用 service iptables save 命令保存 iptables 规则了。
    

方法二

  • 保存

    iptables-save > /etc/sysconfig/iptables
    
  • 重载

    使用如下命令从指定的文件载入规则,注意:重载规则时,文件中的规则将会覆盖现有规则:
    
    iptables-restore < /etc/sysconfig/iptables
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值