ip6tables 命令
基本介绍
ip6tables 是 Linux 系统中用于配置 IPv6 数据包过滤规则的工具,是 netfilter 框架的 IPv6 用户空间接口。它与 iptables 类似,但专门处理 IPv6 协议,允许系统管理员设置规则来过滤、转发和修改 IPv6 数据包。
资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://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:查看套接字统计信息
注意事项
- 权限要求 :所有
ip6tables命令需要 root 权限 - 规则顺序:规则按照添加顺序匹配,一旦匹配成功就执行相应动作
- 默认策略:建议将默认策略设置为 DROP,然后显式允许需要的流量
- ICMPv6:不要完全阻止 ICMPv6,这会破坏 IPv6 网络功能
- 规则持久化:重启后规则会丢失,需要保存到配置文件
- 内核模块 :确保加载了必要的内核模块(如
ip6_tables,ip6table_nat等)
总结
ip6tables 是 Linux 系统中配置 IPv6 防火墙的核心工具。它提供了与 iptables 类似的接口,但专门处理 IPv6 协议。在配置 IPv6 防火墙时,需要特别注意 ICMPv6 的重要性,因为 IPv6 协议比 IPv4 更加依赖 ICMP。通过合理配置 ip6tables 规则,可以实现对 IPv6 流量的精确控制和安全防护。