IPv6 容易被漏掉
很多环境只做了 IPv4 的防火墙策略,IPv6 一旦启用又没有规则,就等于全端口暴露。IPv6 的访问控制要与 IPv4 同等对待:先确认主机是否真的启用了 IPv6(有全局地址、有默认路由),再决定是给它配上同等策略,还是彻底禁用协议栈。
基本信息
| 适用平台 | Linux |
|---|---|
| 风险等级 | 高 |
| 基线要求 | IPv6 与 IPv4 策略同等 |
| 核查命令 | ip -6 addr、ip -6 route、ip6tables -L -n |
| 禁用参数 | net.ipv6.conf.all.disable_ipv6 |
| 注意 | firewalld 与 ufw 会自动双栈管理规则 |
典型使用场景
- 主机加固时检查只防了 IPv4 的漏项
- 云主机分配 IPv6 地址后的策略补齐
- 排查应用监听 :: 却被 IPv6 规则漏放行
- 确认无业务依赖后统一禁用 IPv6
- 统一规则入口,避免 ip6tables 与 firewalld 冲突
核查与收敛
核查与收敛
ip -6 addr show scope global # 是否存在全局 IPv6 地址
ip -6 route show default # 是否存在 IPv6 默认路由
ip6tables -L -n --line-numbers | head # 查看现有 IPv6 规则
ip6tables -P INPUT DROP # 默认拒绝基座
ip6tables -A INPUT -i lo -j ACCEPT # 放行回环
ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # 放行已建立连接
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT # 按业务放行必要端口确认不用时禁用
确认不用时禁用
sysctl -w net.ipv6.conf.all.disable_ipv6=1 # 临时禁用,确认无影响后再写入配置
sysctl -w net.ipv6.conf.default.disable_ipv6=1 # 新建接口默认禁用复核必查项
| 检查项 | 含义 | 注意点 |
|---|---|---|
| 全局地址 | 是否存在可路由的 IPv6 地址 | 有地址就必须有策略 |
| 默认路由 | 是否具备 IPv6 出口 | 影响外部可达性 |
| ip6tables 策略 | INPUT 链的默认动作 | 应为 DROP 基座 |
| 规则入口 | firewalld、ufw 与 ip6tables 的关系 | 只保留一个入口 |
| disable_ipv6 | 是否禁用 IPv6 协议栈 | 需先评估业务依赖 |
禁用 IPv6 前要确认没有业务依赖:内网走 IPv6 的监控或存储链路断掉,往往几天之后才被发现。
firewalld 与 ufw 会自动双栈管理规则,再手工叠加 ip6tables 规则会互相打架,规则入口要统一。另外 disable_ipv6 之后 ::1 回环也会消失,个别应用(Java、部分数据库客户端)启动异常,必要时只关闭全局地址而保留回环。
用 ip6tables 维护的规则同样要落盘持久化,否则重启后策略丢失;如果机器上由 firewalld 或 ufw 管理规则,就通过它们的接口维护,不要再用 ip6tables-save 覆盖。