Linux命令:ip6tables

ip6tables 命令

基本介绍

ip6tables 是 Linux 系统中用于配置 IPv6 数据包过滤规则的工具,是 netfilter 框架的 IPv6 用户空间接口。它与 iptables 类似,但专门处理 IPv6 协议,允许系统管理员设置规则来过滤、转发和修改 IPv6 数据包。

资料合集:https://pan.quark.cn/s/6fe3007c3e95https://pan.quark.cn/s/561de99256a5https://pan.quark.cn/s/985f55b13d94https://pan.quark.cn/s/d0fb20abd19a

语法

复制代码
ip6tables [-t table] [-A|-D|-I|-R|-L|-F|-Z|-N|-X|-P] [链名] [规则] [-j 动作]

表(Table)

ip6tables 支持多个表,每个表包含不同的链:

表名 功能 包含的链
filter 数据包过滤(默认表) INPUT, OUTPUT, FORWARD
nat 网络地址转换 PREROUTING, POSTROUTING, OUTPUT
mangle 数据包修改 PREROUTING, POSTROUTING, INPUT, OUTPUT, FORWARD
raw 连接追踪之前处理 PREROUTING, OUTPUT
security SELinux 安全规则 INPUT, OUTPUT, FORWARD

链(Chain)

链是规则的容器,数据包按照链的顺序依次匹配规则:

filter 表的链

  • INPUT:进入本地系统的数据包
  • OUTPUT:从本地系统发出的数据包
  • FORWARD:经过系统转发的数据包

nat 表的链

  • PREROUTING:数据包到达后、路由决策前
  • POSTROUTING:数据包路由后、发送前
  • OUTPUT:本地生成的数据包

命令选项

链管理命令

  • -N <chain>:创建新链
  • -X [<chain>]:删除指定链(默认删除所有空用户定义链)
  • -P <chain> <policy>:设置链的默认策略(ACCEPT/DROP/REJECT)
  • -E <old-chain> <new-chain>:重命名链

规则管理命令

  • -A <chain>:在链末尾追加规则
  • -I <chain> [num]:在链指定位置插入规则(默认开头)
  • -D <chain> [num]:删除链中指定位置的规则
  • -R <chain> <num>:替换链中指定位置的规则
  • -F [<chain>]:清空链中的所有规则(默认清空所有链)
  • -Z [<chain>]:重置链的计数器

查看命令

  • -L [<chain>]:列出链中的规则
  • -S [<chain>]:以 ip6tables-save 格式显示规则
  • -v:详细输出(配合 -L 使用)
  • -n:数字格式显示地址和端口
  • -x:显示精确的计数器值

规则匹配选项

基本匹配
  • -p <protocol>:匹配协议(tcp/udp/icmpv6/all)
  • -s <source>:匹配源 IPv6 地址
  • -d <destination>:匹配目标 IPv6 地址
  • -i <interface>:匹配进入的网络接口
  • -o <interface>:匹配输出的网络接口
TCP 扩展匹配
  • --sport <port>:匹配源端口
  • --dport <port>:匹配目标端口
  • --tcp-flags <mask> <comp>:匹配 TCP 标志位
  • --syn:匹配 TCP SYN 包
UDP 扩展匹配
  • --sport <port>:匹配源端口
  • --dport <port>:匹配目标端口
ICMPv6 扩展匹配
  • --icmpv6-type <type>:匹配 ICMPv6 类型

目标动作(Jump)

动作 说明
ACCEPT 允许数据包通过
DROP 丢弃数据包(不发送响应)
REJECT 拒绝数据包(发送拒绝响应)
LOG 记录日志(继续匹配后续规则)
DNAT 目标地址转换
SNAT 源地址转换
MASQUERADE 动态源地址转换(用于动态 IP)
REDIRECT 重定向到本地端口
RETURN 返回调用链继续匹配
<user-chain> 跳转到用户定义链

使用示例

1. 查看当前规则

bash 复制代码
ip6tables -L                    # 查看 filter 表所有规则
ip6tables -L -v                 # 详细输出
ip6tables -L -n                 # 数字格式显示
ip6tables -t nat -L             # 查看 nat 表规则

2. 设置默认策略

bash 复制代码
ip6tables -P INPUT DROP         # 拒绝所有进入的数据包
ip6tables -P FORWARD DROP       # 拒绝所有转发的数据包
ip6tables -P OUTPUT ACCEPT      # 允许所有出站数据包

3. 允许回环接口

bash 复制代码
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT

4. 允许已建立的连接

bash 复制代码
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

5. 允许 SSH 连接

bash 复制代码
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT

6. 允许 HTTP 和 HTTPS

bash 复制代码
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT

7. 允许 ICMPv6

bash 复制代码
ip6tables -A INPUT -p icmpv6 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 -j ACCEPT

8. 拒绝特定 IPv6 地址

bash 复制代码
ip6tables -A INPUT -s 2001:db8::1 -j DROP

9. 配置端口转发

bash 复制代码
ip6tables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination [2001:db8::100]:8080
ip6tables -t nat -A POSTROUTING -j MASQUERADE

10. 配置源地址转换(SNAT)

bash 复制代码
ip6tables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 2001:db8::1

11. 记录日志

bash 复制代码
ip6tables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "IPv6 HTTP: "

12. 删除规则

bash 复制代码
ip6tables -D INPUT 1            # 删除 INPUT 链的第一条规则

13. 清空所有规则

bash 复制代码
ip6tables -F                    # 清空 filter 表
ip6tables -t nat -F             # 清空 nat 表

14. 保存和恢复规则

bash 复制代码
ip6tables-save > /etc/iptables/rules.v6    # 保存规则
ip6tables-restore < /etc/iptables/rules.v6 # 恢复规则

典型 IPv6 防火墙配置示例

基本服务器防火墙

bash 复制代码
# 设置默认策略
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT

# 允许回环接口
ip6tables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许 SSH
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许 HTTP/HTTPS
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许 ICMPv6(必要的 IPv6 协议)
ip6tables -A INPUT -p icmpv6 -j ACCEPT

保存和恢复规则

Debian/Ubuntu

bash 复制代码
# 保存规则
ip6tables-save > /etc/iptables/rules.v6

# 开机自动加载(已在 /etc/network/if-pre-up.d/iptables 配置)

CentOS/RHEL

bash 复制代码
# 保存规则
service ip6tables save

# 或使用
ip6tables-save > /etc/sysconfig/ip6tables

IPv6 特有注意事项

ICMPv6 的重要性

IPv6 协议高度依赖 ICMPv6,以下 ICMPv6 类型对于正常运行至关重要:

  • Neighbor Discovery (ND):用于地址解析和邻居发现
  • Router Advertisement (RA):路由器通告
  • Path MTU Discovery:路径 MTU 发现
  • Multicast Listener Discovery (MLD):组播监听发现

推荐的 ICMPv6 规则

bash 复制代码
# 允许所有 ICMPv6 消息(推荐)
ip6tables -A INPUT -p icmpv6 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 -j ACCEPT
ip6tables -A FORWARD -p icmpv6 -j ACCEPT

相关命令

  • iptables:IPv4 防火墙工具
  • ip6tables-save:保存 ip6tables 规则
  • ip6tables-restore:恢复 ip6tables 规则
  • ip:现代网络配置工具
  • ss:查看套接字统计信息

注意事项

  1. 权限要求 :所有 ip6tables 命令需要 root 权限
  2. 规则顺序:规则按照添加顺序匹配,一旦匹配成功就执行相应动作
  3. 默认策略:建议将默认策略设置为 DROP,然后显式允许需要的流量
  4. ICMPv6:不要完全阻止 ICMPv6,这会破坏 IPv6 网络功能
  5. 规则持久化:重启后规则会丢失,需要保存到配置文件
  6. 内核模块 :确保加载了必要的内核模块(如 ip6_tables, ip6table_nat 等)

总结

ip6tables 是 Linux 系统中配置 IPv6 防火墙的核心工具。它提供了与 iptables 类似的接口,但专门处理 IPv6 协议。在配置 IPv6 防火墙时,需要特别注意 ICMPv6 的重要性,因为 IPv6 协议比 IPv4 更加依赖 ICMP。通过合理配置 ip6tables 规则,可以实现对 IPv6 流量的精确控制和安全防护。

相关推荐
数字化顾问1 小时前
(122页PPT)企业数字化IT架构蓝图规划设计方案(附下载方式)
java·运维·架构
ITyunwei09871 小时前
灾难恢复与业务连续性:如何确保天灾人祸下,业务也能“屹立不倒”?
运维·服务器
Promise微笑1 小时前
2026电缆故障定位仪:缆故障定位仪精准选型与高效避坑指南
运维·人工智能·重构
爱喝水的鱼丶1 小时前
SAP-ABAP:新手入门篇——从0到1写出你的第一个ABAP Hello World程序并完成调试运行
运维·服务器·数据库·学习·sap·abap
学术小李2 小时前
VSCode上传文件到服务器
服务器·vscode·sftp·数据上传
hweiyu002 小时前
Linux命令:nmtui
linux
MY_TEUCK2 小时前
【2026最新Linux虚拟机安装】Linux 虚拟机安装VMware 17 + CentOS 7
linux·运维·centos
Rust研习社2 小时前
Ubuntu 全面拥抱 Rust 后,我意识到 Rust 社区要变了
linux·服务器·开发语言·后端·ubuntu·rust
Shingmc32 小时前
【Linux】传输层协议TCP
linux·网络·tcp/ip