跳转至

规则查询

规则查询

指定表查看

查看 filter 表中的规则

iptables -t filter -L
  • -t 选项,指定要操作的表,当没有使用 -t 选项指定表时,默认为操作 filter 表
  • -L 选项,查看 -t 选项对应的表的规则

例如

> iptables -t filter -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
CILIUM_INPUT  all  --  anywhere             anywhere             /* cilium-feeder: CILIUM_INPUT */
KUBE-FIREWALL  all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
CILIUM_FORWARD  all  --  anywhere             anywhere             /* cilium-feeder: CILIUM_FORWARD */
DOCKER-USER  all  --  anywhere             anywhere
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
CILIUM_OUTPUT  all  --  anywhere             anywhere             /* cilium-feeder: CILIUM_OUTPUT */
KUBE-FIREWALL  all  --  anywhere             anywhere

INPUT 链、FORWARD 链、OUTPUT 链都拥有” 过滤” 的能力,所以,当要定义某条” 过滤” 的规则时,会在 filter 表中定义

同样的,查看其他表中的规则

iptables -t raw -L

iptables -t mangle -L

iptables -t nat -L

指定链查看

还可以只查看指定表中的指定链的规则,比如,只查看 filter 表中 INPUT 链的规则

iptables -t filter -L INPUT

查看结果为

> iptables -t filter -L INPUT

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
CILIUM_INPUT  all  --  anywhere             anywhere             /* cilium-feeder: CILIUM_INPUT */
KUBE-FIREWALL  all  --  anywhere             anywhere

展示详细信息

使用 -v 选项后,iptables 展示的信息更多

iptables -t filter -L INPUT -v

查看的结果为

> iptables -t filter -L INPUT -v

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
6995M 5039G CILIUM_INPUT  all  --  any    any     anywhere             anywhere             /* cilium-feeder: CILIUM_INPUT */
6945M 5035G KUBE-FIREWALL  all  --  any    any     anywhere             anywhere
  • pkts: 对应规则匹配到的报文的个数
  • bytes: 对应匹配到的报文包的大小总和
  • target: 规则对应的 target,往往表示规则对应的”动作”,即规则匹配成功后需要采取的措施
  • prot: 表示规则对应的协议,是否只针对某些协议应用此规则
  • opt: 表示规则对应的选项
  • in: 表示数据包由哪个接口(网卡)流入,即从哪个网卡来
  • out: 表示数据包将由哪个接口(网卡)流出,即到哪个网卡去
  • source: 表示规则对应的源头地址,可以是一个 IP,也可以是一个网段
  • destination: 表示规则对应的目标地址。可以是一个 IP,也可以是一个网段

表中的每个链的后面都有一个括号,括号里面有一些信息

  • policy 表示当前链的默认策略
  • policy ACCEPT 表示 INPUT 的链的默认动作为 ACCEPT,换句话说就是,默认接受通过 INPUT 关卡的所有请求,所以在配置 INPUT 链的具体规则时,应该将需要拒绝的请求配置到规则中;说白了就是” 黑名单” 机制,默认所有人都能通过,只有指定的人不能通过;当把 INPUT 链默认动作设置为接受 (ACCEPT),就表示所有人都能通过这个关卡,此时就应该在具体的规则中指定需要拒绝的请求,就表示只有指定的人不能通过这个关卡,这就是黑名单机制

  • packets 表示当前链(上例为 INPUT 链)默认策略匹配到的包的数量,0 packets 表示默认策略匹配到 0 个包

  • bytes 表示当前链默认策略匹配到的所有包的大小总和

可以把 packets 与 bytes 称作”计数器”,计数器记录了默认策略匹配到的报文数量与总大小,”计数器”只会在使用 -v 选项时,才会显示出来

当被匹配到的包达到一定数量时,计数器会自动将匹配到的包的大小转换为可读性较高的单位

如果想要查看精确的计数值,而不是经过可读性优化过的计数值,那么可以使用 -x 选项,表示显示精确的计数值

iptables -t filter -L INPUT -v -x

示例输出

> iptables -t filter -L INPUT -v -x

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination
6995106934 5039606444098 CILIUM_INPUT  all  --  any    any     anywhere             anywhere             /* cilium-feeder: CILIUM_INPUT */
6944919118 5035188550830 KUBE-FIREWALL  all  --  any    any     anywhere             anywhere

不使用名称解析

注意到源地址与目标地址都为 anywhere,iptables 默认进行了名称解析,但是在规则非常多的情况下如果进行名称解析,效率会比较低,所以,在没有此需求的情况下,可以使用 -n 选项,表示不对 IP 地址进行名称反解,直接显示 IP 地址

iptables -t filter -L INPUT -v -n

查看的结果为

> iptables -t filter -L INPUT -v -n

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
6995M 5040G CILIUM_INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* cilium-feeder: CILIUM_INPUT */
6945M 5035G KUBE-FIREWALL  all  --  *      *       0.0.0.0/0            0.0.0.0/0

如上所示,规则中的源地址与目标地址已经显示为 IP,而非转换后的名称

显示行号

使用 --line-numbers即可显示规则的编号

iptables -t filter -L INPUT -v -n --line-numbers

查看的结果为

> iptables -t filter -L INPUT -v -n --line-numbers

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1    6995M 5040G CILIUM_INPUT  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* cilium-feeder: CILIUM_INPUT */
2    6945M 5035G KUBE-FIREWALL  all  --  *      *       0.0.0.0/0            0.0.0.0/0

缩写成 --line 时,centos 中的 iptables 也可以识别