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

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

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

目 录CONTENT

文章目录

Linux ip6tables命令教程:如何配置IPv6防火墙(附实例教程和注意事项)

Linux ip6tables命令介绍

ip6tables命令是iptables命令的IPv6版本,它用于设置、维护和检查Linux内核中的IPv6包过滤规则表。每个表包含一些内置的链和一些用户自定义的链。每个链是一个规则列表,可以匹配一组包。ip6tables命令可以用于实现防火墙、NAT和流量统计等功能。ip6tables命令的全称是IPv6 packet filter administration,它是一个命令行工具,需要root权限才能执行。

Linux ip6tables命令适用的Linux版本

ip6tables命令适用于所有支持IPv6的Linux版本,但是不同的Linux发行版可能有不同的安装和配置方法。例如,在Debian/Ubuntu系统中,可以使用apt-get命令来安装iptables包,该包包含了ip6tables命令:

[linux@bashcommandnotfound.cn ~]$ sudo apt-get update && sudo apt-get install iptables

在CentOS/RHEL系统中,由于默认使用firewalld作为前端配置工具,需要先移除firewalld,然后安装iptables-services包,该包也包含了ip6tables命令:

[linux@bashcommandnotfound.cn ~]$ sudo yum remove firewalld # remove
[linux@bashcommandnotfound.cn ~]$ sudo yum install iptables-services # install
[linux@bashcommandnotfound.cn ~]$ sudo systemctl start iptables # start v4
[linux@bashcommandnotfound.cn ~]$ sudo systemctl start ip6tables # start v6

Linux ip6tables命令的基本语法

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

ip6tables [-t table] COMMAND chain rule-specification [options]

其中,-t选项用于指定要操作的表,如果不指定,默认为filter表。COMMAND是要执行的操作,例如添加、删除、替换、列出、刷新、零计数器等。chain是要操作的链,例如INPUT、OUTPUT、FORWARD等。rule-specification是要匹配的规则,包括源地址、目的地址、协议、端口、状态、模块等。options是一些额外的选项,例如-v表示详细输出,-n表示不解析主机名和服务名等。

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

ip6tables命令的常用选项或参数说明如下表所示:

选项/参数说明
-A, --append chain rule-specification在指定的链的末尾添加一条规则
-D, --delete chain rule-specification删除指定的链中匹配的规则
-R, --replace chain rulenum rule-specification替换指定的链中指定序号的规则
-I, --insert chain [rulenum] rule-specification在指定的链的开头或指定序号处插入一条规则
-L, --list [chain]列出指定的链或所有链的规则
-F, --flush [chain]清空指定的链或所有链的规则
-Z, --zero [chain]清零指定的链或所有链的计数器
-N, --new-chain chain创建一个新的用户自定义的链
-X, --delete-chain [chain]删除一个用户自定义的链
-P, --policy chain target设置指定的链的默认策略
-E, --rename-chain old-chain new-chain重命名一个用户自定义的链
-s, --source address[/mask]匹配源地址或网络
-d, --destination address[/mask]匹配目的地址或网络
-i, --in-interface name匹配输入接口的名称
-o, --out-interface name匹配输出接口的名称
-p, --protocol protocol匹配协议,如tcp, udp, icmp等
-m, --match match扩展匹配模块,如state, limit, multiport等
-j, --jump target指定匹配后的动作,如ACCEPT, DROP, REJECT, LOG等
-v, --verbose详细输出模式
-n, --numeric数字输出模式,不解析主机名和服务名
-t, --table table指定要操作的表,如filter, nat, mangle等
-h, --help显示帮助信息

Linux ip6tables命令的实例

下面给出一些常见的ip6tables命令的实例,以及相应的解释和输出。

实例1:查看filter表的规则

命令:

[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -t filter -L -n -v

解释:使用-t选项指定filter表,使用-L选项列出所有链的规则,使用-n选项不解析主机名和服务名,使用-v选项详细输出。

输出:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

实例2:允许本地回环接口的通信

命令:

[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A INPUT -i lo -j ACCEPT
[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A OUTPUT -o lo -j ACCEPT

解释:使用-A选项在INPUT链和OUTPUT链的末尾添加规则,使用-i选项和-o选项分别匹配输入接口和输出接口为lo(本地回环接口),使用-j选项指定动作为ACCEPT(接受包)。

输出:无

实例3:拒绝来自特定地址的访问

命令:

[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A INPUT -s 2001:db8::1 -j REJECT

解释:使用-A选项在INPUT链的末尾添加规则,使用-s选项匹配源地址为2001:db8::1(一个示例IPv6地址),使用-j选项指定动作为REJECT(拒绝包,并向源地址发送一个错误报文)。

输出:无

实例4:允许特定端口的访问

命令:

[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A INPUT -p udp --dport 53 -j ACCEPT

解释:使用-A选项在INPUT链的末尾添加规则,使用-p选项匹配协议为tcp或udp,使用--dport选项或-m multiport --dports选项匹配目的端口,分别允许22(SSH)、80和443(HTTP和HTTPS)、53(DNS)端口的访问,使用-j选项指定动作为ACCEPT。

实例5:记录被拒绝的包

命令:

[linux@bashcommandnotfound.cn ~]$ ip6tables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "IP6Tables-Dropped: " --log-level 4
ip6tables -A INPUT -j DROP

好的,我将继续讲解ip6tables命令,并生成一个适合网站发布的教程文章。下面是后续的实例和注意事项。

实例6:限制每个主机的连接数

命令:

[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A INPUT -p tcp --syn -m connlimit --connlimit-above 10 -j REJECT

解释:使用-A选项在INPUT链的末尾添加规则,使用-p选项匹配协议为tcp,使用--syn选项匹配TCP SYN包,使用-m connlimit --connlimit-above 10选项匹配每个主机的连接数超过10的情况,使用-j选项指定动作为REJECT(拒绝包,并向源地址发送一个错误报文)。

输出:无

实例7:限制每秒的连接数

命令:

[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A INPUT -p tcp --syn -j DROP

解释:使用-A选项在INPUT链的末尾添加规则,使用-p选项匹配协议为tcp,使用--syn选项匹配TCP SYN包,使用-m limit --limit 1/s选项匹配每秒的连接数不超过1的情况,使用-j选项指定动作为ACCEPT(接受包)。然后再添加一条规则,匹配所有的TCP SYN包,并使用-j选项指定动作为DROP(丢弃包)。

输出:无

实例8:记录并拒绝来自特定端口的访问

命令:

[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A INPUT -p tcp --dport 23 -j LOG --log-prefix "TELNET "
[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -A INPUT -p tcp --dport 23 -j REJECT

解释:使用-A选项在INPUT链的末尾添加规则,使用-p选项匹配协议为tcp,使用--dport选项匹配目的端口为23(TELNET),使用-j选项指定动作为LOG(记录包),使用--log-prefix选项指定日志的前缀为"TELNET "。然后再添加一条规则,匹配相同的条件,并使用-j选项指定动作为REJECT(拒绝包,并向源地址发送一个错误报文)。

输出:无

实例9:实现端口转发

命令:

[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

解释:使用-t选项指定nat表,使用-A选项在PREROUTING链的末尾添加规则,使用-p选项匹配协议为tcp,使用--dport选项匹配目的端口为80(HTTP),使用-j选项指定动作为REDIRECT(重定向包),使用--to-port选项指定重定向的端口为8080。

输出:无

实例10:实现IPv6到IPv4的NAT

命令:

[linux@bashcommandnotfound.cn ~]$ sudo ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

解释:使用-t选项指定nat表,使用-A选项在POSTROUTING链的末尾添加规则,使用-o选项匹配输出接口为eth0,使用-j选项指定动作为MASQUERADE(伪装包,使用输出接口的IPv4地址作为源地址)。

输出:无

Linux ip6tables命令的注意事项

  • ip6tables命令需要root权限才能执行,否则会提示Permission denied。
  • ip6tables命令的规则是按顺序匹配的,如果有多条规则匹配同一个包,只有第一条规则会生效,后面的规则会被忽略。因此,建议将更具体的规则放在前面,将更通用的规则放在后面。
  • ip6tables命令的规则是暂时的,如果重启系统或者重启服务,规则会丢失。要使规则永久生效,需要保存规则到文件,并在启动时加载规则。不同的Linux发行版可能有不同的保存和加载方法,例如,在Debian/Ubuntu系统中,可以使用iptables-save和iptables-restore命令,或者使用iptables-persistent包。在CentOS/RHEL系统中,可以使用service iptables save和service iptables restart命令,或者使用iptables-config文件。
  • 如果执行ip6tables命令时出现bash: ip6tables: command not found的错误,说明没有安装iptables包,需要先安装iptables包,然后再执行ip6tables命令。

Linux ip6tables命令的相关命令

0

评论区