Linux ip6tables-save命令介绍
ip6tables-save命令是用来将ip6tables表的内容以一种容易解析的格式输出到标准输出或者指定的文件中。ip6tables是Linux内核中的IPv6包过滤规则表,它可以用来设置、维护和检查防火墙规则。ip6tables-save命令可以用来备份或恢复ip6tables表的配置,也可以用来查看当前的ip6tables表的状态。
Linux ip6tables-save命令适用的Linux版本
ip6tables-save命令适用于所有支持ip6tables的Linux版本,包括Debian、Ubuntu、CentOS、Fedora、RHEL等。如果某些Linux版本没有安装ip6tables,可以使用以下命令进行安装:
- Debian/Ubuntu:
sudo apt install iptables
- CentOS/RHEL/Fedora:
sudo yum install iptables
- CentOS 8/Rocky Linux/AlmaLinux:
sudo dnf install iptables
Linux ip6tables-save命令的基本语法
ip6tables-save命令的基本语法格式如下:
ip6tables-save [ -M modprobe] [ -c ] [ -t table] [ -f filename ]
-M modprobe
或--modprobe modprobe_program
:指定modprobe程序的路径。默认情况下,ip6tables-save会检查/proc/sys/kernel/modprobe来确定可执行文件的路径。-c
或--counters
:在输出文件中包含所有数据包和字节计数器的当前值。-t table
或--table tablename
:只输出指定的表的内容。如果内核支持自动加载模块,会尝试加载相应的表的模块,如果没有已经加载的话。如果不指定,输出包含所有可用的表。-f filename
或--file filename
:指定输出文件的名称。如果不指定,ip6tables-save会输出到标准输出。
Linux ip6tables-save命令的常用选项或参数说明
ip6tables-save命令的常用选项或参数有以下几个:
选项或参数 | 说明 |
---|---|
-c | 包含计数器的值 |
-t filter | 只输出filter表的内容 |
-t mangle | 只输出mangle表的内容 |
-t nat | 只输出nat表的内容 |
-t raw | 只输出raw表的内容 |
-t security | 只输出security表的内容 |
如果有什么常见技巧或高级技巧可以建立一个二级标题然后讲解下。例如:
Linux ip6tables-save命令的高级技巧
- 可以使用管道符(|)将ip6tables-save的输出重定向到其他命令,如grep、sed、awk等,进行过滤、替换或分析。
- 可以使用重定向符(>)将ip6tables-save的输出保存到文件中,作为备份或恢复的依据。
- 可以使用ip6tables-restore命令将ip6tables-save的输出作为输入,恢复ip6tables表的配置。
Linux ip6tables-save命令的实例
实例1:查看当前的ip6tables表的内容
使用ip6tables-save命令不带任何参数,可以查看当前的ip6tables表的内容,包括filter、mangle、nat、raw和security表。输出的格式为:
# Generated by ip6tables-save v1.8.7 on Tue Dec 26 15:03:14 2023
*表名
:链名 [数据包计数器:字节计数器]
规则
COMMIT
# Completed on Tue Dec 26 15:03:14 2023
具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save
# Generated by ip6tables-save v1.8.7 on Tue Dec 26 15:03:14 2023
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
...
实例2:只查看filter表的内容
使用ip6tables-save命令带上-t filter参数,可以只查看filter表的内容,不输出其他表的内容。filter表是默认的ip6tables表,用来过滤数据包。输出的格式与实例1相同,只是只有filter表的部分。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save -t filter
实例3:只查看mangle表的内容
使用ip6tables-save命令带上-t mangle参数,可以只查看mangle表的内容,不输出其他表的内容。mangle表是用来对数据包进行特殊的修改,如改变TTL、TOS等。输出的格式与实例1相同,只是只有mangle表的部分。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save -t mangle
# Generated by ip6tables-save v1.8.7 on Tue Dec 26 15:03:14 2023
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Tue Dec 26 15:03:14 2023
实例4:只查看nat表的内容
使用ip6tables-save命令带上-t nat参数,可以只查看nat表的内容,不输出其他表的内容。nat表是用来进行网络地址转换,如SNAT、DNAT等。输出的格式与实例1相同,只是只有nat表的部分。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save -t nat
# Generated by ip6tables-save v1.8.7 on Tue Dec 26 15:03:14 2023
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Tue Dec 26 15:03:14 2023
实例5:只查看raw表的内容
使用ip6tables-save命令带上-t raw参数,可以只查看raw表的内容,不输出其他表的内容。raw表是用来在连接跟踪之前处理数据包,如设置NOTRACK标记等。输出的格式与实例1相同,只是只有raw表的部分。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save -t raw
# Generated by ip6tables-save v1.8.7 on Tue Dec 26 15:03:14 2023
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Tue Dec 26 15:03:14 2023
实例6:只查看security表的内容
使用ip6tables-save命令带上-t security参数,可以只查看security表的内容,不输出其他表的内容。security表是用来设置SELinux安全上下文,如SECMARK等。输出的格式与实例1相同,只是只有security表的部分。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save -t security
# Generated by ip6tables-save v1.8.7 on Tue Dec 26 15:03:14 2023
*security
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Tue Dec 26 15:03:14 2023
实例7:将ip6tables表的内容保存到文件中
使用ip6tables-save命令带上-f filename参数,可以将ip6tables表的内容保存到指定的文件中,而不是输出到标准输出。这样可以方便地备份或恢复ip6tables表的配置。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save -f ip6tables.bak
[linux@bashcommandnotfound.cn ~]$ ls -l ip6tables.bak
-rw-r--r--. 1 root root 1000 Dec 26 15:03 ip6tables.bak
实例8:将ip6tables表的内容输出到标准错误中
使用ip6tables-save命令不带任何参数,可以将ip6tables表的内容输出到标准输出中。如果想要将ip6tables表的内容输出到标准错误中,可以使用重定向符(>&)将标准输出重定向到标准错误。这样可以方便地与其他命令进行组合或分离。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save >&2
# Generated by ip6tables-save v1.8.7 on Tue Dec 26 15:03:14 2023
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Tue Dec 26 15:03:14 2023
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Tue Dec 26 15:03:14 2023
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Tue Dec 26 15:03:14 2023
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Tue Dec 26 15:03:14 2023
*security
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Tue Dec 26 15:03:14 2023
实例9:将ip6tables表的内容过滤后输出
使用ip6tables-save命令不带任何参数,可以将ip6tables表的内容输出到标准输出中。如果想要对输出的内容进行过滤,可以使用管道符(|)将ip6tables-save的输出重定向到其他命令,如grep、sed、awk等。这样可以方便地查找或修改输出的内容。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save | grep ACCEPT
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
实例10:将ip6tables表的内容替换后输出
使用ip6tables-save命令不带任何参数,可以将ip6tables表的内容输出到标准输出中。如果想要对输出的内容进行替换,可以使用管道符(|)将ip6tables-save的输出重定向到其他命令,如sed、awk等。这样可以方便地修改输出的内容。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save | sed 's/ACCEPT/DROP/g'
# Generated by ip6tables-save v1.8.7 on Tue Dec 26 15:03:14 2023
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
...
实例11:将ip6tables表的内容包含计数器的值输出
使用ip6tables-save命令带上-c参数,可以将ip6tables表的内容包含当前的数据包和字节计数器的值输出到标准输出中。这样可以方便地查看或分析每条规则的匹配情况。输出的格式与实例1相同,只是每个链和规则后面会有计数器的值。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save -c
# Generated by ip6tables-save v1.8.7 on Tue Dec 26 15:03:14 2023
*filter
:INPUT ACCEPT [100:2000]
:FORWARD ACCEPT [200:4000]
:OUTPUT ACCEPT [300:6000]
-A INPUT -i lo -j ACCEPT [50:1000]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT [40:800]
-A INPUT -p icmpv6 -j ACCEPT [10:200]
...
# Completed on Tue Dec 26 15:03:14 2023
实例12:将ip6tables表的内容包含计数器的值保存到文件中
使用ip6tables-save命令带上-c和-f filename参数,可以将ip6tables表的内容包含当前的数据包和字节计数器的值保存到指定的文件中,而不是输出到标准输出。这样可以方便地备份或恢复ip6tables表的配置,并保留计数器的值。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save -c -f ip6tables.bak
[linux@bashcommandnotfound.cn ~]$ ls -l ip6tables.bak
-rw-r--r--. 1 root root 2000 Dec 26 15:03 ip6tables.bak
实例13:将ip6tables表的内容恢复到ip6tables中
使用ip6tables-save命令不带任何参数,可以将ip6tables表的内容输出到标准输出中。如果想要将输出的内容恢复到ip6tables中,可以使用ip6tables-restore命令将ip6tables-save的输出作为输入。这样可以方便地恢复ip6tables表的配置。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save | ip6tables-restore
[linux@bashcommandnotfound.cn ~]$ ip6tables -L -n -v
Chain INPUT (policy ACCEPT 100 packets, 2000 bytes)
pkts bytes target prot opt in out source destination
50 1000 ACCEPT all lo * ::/0 ::/0
...
250 5000 ACCEPT all * * ::/0 ::/0 state NEW,RELATED,ESTABLISHED
实例14:将ip6tables表的内容恢复到ip6tables中并保留计数器的值
使用ip6tables-save命令带上-c参数,可以将ip6tables表的内容包含当前的数据包和字节计数器的值输出到标准输出中。如果想要将输出的内容恢复到ip6tables中并保留计数器的值,可以使用ip6tables-restore命令带上-c参数将ip6tables-save的输出作为输入。这样可以方便地恢复ip6tables表的配置,并保留计数器的值。具体的实例操作如下:
[linux@bashcommandnotfound.cn ~]$ ip6tables-save -c | ip6tables-restore -c
[linux@bashcommandnotfound.cn ~]$ ip6tables -L -n -v
Chain INPUT (policy ACCEPT 100 packets, 2000 bytes)
pkts bytes target prot opt in out source destination
50 1000 ACCEPT all lo * ::/0 ::/0
...
Linux ip6tables-save命令的注意事项
- ip6tables-save命令需要root权限或者sudo权限才能执行,否则会报错
ip6tables-save v1.8.7: can't initialize ip6tables table
filter': Permission denied (you must be root)` - ip6tables-save命令只能保存当前的ip6tables表的内容,如果重启系统或者清空ip6tables表,保存的内容会失效。如果想要永久保存ip6tables表的配置,可以使用iptables-persistent或者netfilter-persistent等工具。
- ip6tables-save命令只能保存IPv6的包过滤规则,如果想要保存IPv4的包过滤规则,可以使用iptables-save命令。
- 如果执行ip6tables-save命令时提示
bash: ip6tables-save: command not found
,说明没有安装ip6tables,可以参考上文的安装方法。
评论区