侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux iptstate命令教程:如何实时监控iptables的连接状态(附实例详解和注意事项)

Linux iptstate命令介绍

iptstate是一个用来显示iptables状态信息的命令,它可以实时地监控iptables的连接跟踪表,以及各种规则的命中情况。iptstate的全称是IP Tables State,它是基于ncurses库的一个文本界面程序,可以在终端中运行。iptstate可以帮助用户了解iptables的工作原理,以及检查iptables的配置是否正确。

Linux iptstate命令适用的Linux版本

iptstate命令适用于大多数Linux发行版,但是它需要安装iptables和ncurses两个软件包。如果你的系统没有安装这两个软件包,你可以使用以下命令来安装:

  • 对于基于Debian的系统(如Ubuntu),使用apt-get命令:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get update
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install iptables ncurses-bin
  • 对于基于Red Hat的系统(如CentOS),使用yum或dnf命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum update
[linux@bashcommandnotfound.cn ~]$ sudo yum install iptables ncurses

或者

[linux@bashcommandnotfound.cn ~]$ sudo dnf update
[linux@bashcommandnotfound.cn ~]$ sudo dnf install iptables ncurses
  • 对于基于Arch的系统(如Manjaro),使用pacman命令:
[linux@bashcommandnotfound.cn ~]$ sudo pacman -Syu
[linux@bashcommandnotfound.cn ~]$ sudo pacman -S iptables ncurses

Linux iptstate命令的基本语法

iptstate命令的基本语法格式如下:

iptstate [options]

其中,options是可选的参数,用来指定显示的信息和格式。如果不指定任何参数,iptstate会显示默认的状态信息,包括源地址、目的地址、协议、状态、TTL等。

Linux iptstate命令的常用选项或参数说明

iptstate命令有很多选项或参数,可以用来控制显示的内容和方式。以下是一些常用的选项或参数:

选项或参数说明
-h, --help显示帮助信息
-v, --version显示版本信息
-1, --once只显示一次状态信息,不刷新
-t, --top显示最活跃的连接,按照字节或包的数量排序
-b, --byt按照字节的数量排序
-p, --pkt按照包的数量排序
-s, --src指定源地址或范围,只显示匹配的连接
-d, --dst指定目的地址或范围,只显示匹配的连接
-P, --proto指定协议,只显示匹配的连接
-S, --state指定状态,只显示匹配的连接
-f, --filter指定过滤规则,只显示匹配的连接
-n, --numeric不解析主机名和端口名,只显示数字
-r, --reverse反转排序顺序
-R, --rate显示连接的速率,单位为bps或pps
-T, --timeout指定刷新间隔,单位为秒
-w, --watch指定监视的链,只显示该链的连接
-W, --wide显示完整的地址和端口,不截断
-z, --zero清零计数器

Linux iptstate命令的实例

以下是一些iptstate命令的实例,可以帮助你更好地理解和使用这个命令。

实例1:显示默认的状态信息

如果不指定任何参数,iptstate会显示默认的状态信息,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
...

这里可以看到,每一行表示一个连接,包括源地址、目的地址、协议、状态、TTL和过期时间等信息。这些信息会不断地刷新,以反映当前的连接状态。

实例2:显示最活跃的连接

如果想要显示最活跃的连接,可以使用-t或--top选项,这样iptstate会按照字节或包的数量排序,只显示前10个连接,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -t
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  1.2M
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  1.1M
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  1.0M
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  900K
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  800K
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  700K
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  600K
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  500K
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  400K
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  300K

这里可以看到,每一行的最后一列显示了该连接的字节数量,单位为K或M。如果想要按照包的数量排序,可以使用-p或--pkt选项,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -t -p
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100
...

实例3:指定源地址或目的地址

如果想要只显示某个源地址或目的地址的连接,可以使用-s或--src选项,或者-d或--dst选项,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -s 192.168.1.100
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
...

或者

[linux@bashcommandnotfound.cn ~]$ iptstate -d 172.217.24.14
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
...

这里可以看到,只显示了源地址为192.168.1.100或目的地址为172.217.24.14的连接。如果想要指定一个地址范围,可以使用CIDR表示法,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -s 192.168.1.0/24
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
...

这里可以看到,只显示了源地址为192.168.1.0/24的连接,即192.168.1.0到192.168.1.255的地址。

实例4:指定协议或状态

如果想要只显示某个协议或状态的连接,可以使用-P或--proto选项,或者-S或--state选项,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -P tcp
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
...

或者

[linux@bashcommandnotfound.cn ~]$ iptstate -S ESTABLISHED
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
...

这里可以看到,只显示了协议为tcp或状态为ESTABLISHED的连接。如果想要指定多个协议或状态,可以使用逗号分隔,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -P tcp,udp
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   8.8.8.8        udp   NEW          64   00:00:29
...

或者

[linux@bashcommandnotfound.cn ~]$ iptstate -S ESTABLISHED,NEW
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   8.8.8.8        udp   NEW          64   00:00:29
...

这里可以看到,只显示了协议为tcp或udp,或状态为ESTABLISHED或NEW的连接。

实例5:指定过滤规则

如果想要只显示符合某个过滤规则的连接,可以使用-f或--filter选项,这样iptstate会使用iptables的语法来解析过滤规则,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -f "-s 192.168.1.0/24 -d 172.217.24.14 -p tcp --dport 80"
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
...

这里可以看到,只显示了源地址为192.168.1.0/24,目的地址为172.217.24.14,协议为tcp,目的端口为80的连接。这个过滤规则相当于使用-s,-d,-P和--dport选项的组合,但是更灵活和强大。

实例6:显示连接的速率

如果想要显示连接的速率,可以使用-R或--rate选项,这样iptstate会在每一行的最后一列显示该连接的速率,单位为bps(字节每秒)或pps(包每秒),如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -R
Source IP       Destination IP Proto State       TTL  Expires  Rate
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  1.2M bps
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  1.1M bps
192.168.1.100   8.8.8.8        udp   NEW          64   00:00:29  100K bps
...

或者

[linux@bashcommandnotfound.cn ~]$ iptstate -R -p
Source IP       Destination IP Proto State       TTL  Expires  Rate
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  100 pps
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  90 pps
192.168.1.100   8.8.8.8        udp   NEW          64   00:00:29  10 pps
...

这里可以看到,每一行的最后一列显示了该连接的速率,单位为bps或pps。如果想要按照速率排序,可以使用-t或--top选项,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -t -R
Source IP       Destination IP Proto State       TTL  Expires  Rate
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  1.2M bps
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59  1.1M bps
192.168.1.100   8.8.8.8        udp   NEW          64   00:00:29  100K bps
...

或者

[linux@bashcommandnotfound.cn ~]$ iptstate -t -R -p

实例7:显示完整的地址和端口

如果想要显示完整的地址和端口,而不是截断的形式,可以使用-W或--wide选项,这样iptstate会显示完整的IPv6地址和端口,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -W
Source IP                      Destination IP                 Proto State       TTL  Expires
2001:db8:0:1::100              2607:f8b0:400a:800::200e       tcp   ESTABLISHED  64   00:01:59
2001:db8:0:1::101              2607:f8b0:400a:800::200e       tcp   ESTABLISHED  64   00:01:59
2001:db8:0:1::100              2001:4860:4860::8888           udp   NEW          64   00:00:29
...

这里可以看到,每一行显示了完整的IPv6地址和端口,而不是省略号。

实例8:清零计数器

如果想要清零计数器,可以使用-z或--zero选项,这样iptstate会清空所有连接的字节和包的数量,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -z
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   8.8.8.8        udp   NEW          64   00:00:29
...

这里可以看到,每一行的最后一列没有显示字节或包的数量,而是空白。这个选项可以用来重新开始计算连接的流量。

实例9:指定刷新间隔

如果想要指定刷新间隔,可以使用-T或--timeout选项,这样iptstate会按照指定的秒数刷新状态信息,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -T 5
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   8.8.8.8        udp   NEW          64   00:00:29
...

这里可以看到,iptstate会每隔5秒刷新一次状态信息,而不是默认的1秒。

实例10:指定监视的链

如果想要只显示某个链的连接,可以使用-w或--watch选项,这样iptstate会只显示指定的链的连接,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -w INPUT
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   8.8.8.8        udp   NEW          64   00:00:29
...

这里可以看到,只显示了INPUT链的连接,即进入本机的连接。如果想要显示多个链的连接,可以使用逗号分隔,如下所示:

[linux@bashcommandnotfound.cn ~]$ iptstate -w INPUT,OUTPUT
Source IP       Destination IP Proto State       TTL  Expires
192.168.1.100   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.101   172.217.24.14  tcp   ESTABLISHED  64   00:01:59
192.168.1.100   8.8.8.8        udp   NEW          64   00:00:29
...

这里可以看到,显示了INPUT和OUTPUT链的连接,即进入和出去本机的连接。

Linux iptstate命令的注意事项

使用iptstate命令时,有以下几点需要注意:

  • iptstate命令需要root权限或sudo权限才能运行,否则会提示Permission denied错误。
  • iptstate命令依赖于iptables的连接跟踪功能,如果iptables没有启用连接跟踪,或者连接跟踪表被清空,iptstate命令会显示No connections错误。
  • iptstate命令只能显示当前的连接状态,不能修改或删除连接,如果想要修改或删除连接,需要使用iptables命令。
  • iptstate命令只能显示IPv4和IPv6的连接,不能显示其他协议的连接,如ICMP或ARP。
  • 如果系统没有安装iptstate命令,会提示bash: iptstate: command not found错误,此时需要安装iptstate软件包。

Linux iptstate命令的相关命令

以下是一些与iptstate命令相关的命令,可以用来查看或修改iptables的配置和状态:

0

评论区