需先确认sshd是否监听ipv6连接,再通过高频失败、非常规地址段及短会话等特征识别爆破行为,最后实时阻断。

直接解析sshd进程的网络状态并实时阻断IPv6隐蔽通道爆破,核心在于“看清连接来源”+“识别非常规行为”+“快速干预”,而不是等攻击完成再响应。
一、确认sshd是否在监听IPv6连接
很多管理员误以为禁用IPv6系统就安全了,但sshd默认可能仍通过::(IPv6通配地址)监听所有协议。先验证实际监听状态:
- 运行
ss -tlnp | grep sshd或netstat -tlnp | grep :22 - 重点看是否有
:::22或[::]:22这类条目——表示sshd正接受IPv6连接 - 若只看到
0.0.0.0:22,不代表绝对安全:某些IPv6隧道(如6to4、teredo)可在IPv4链路上承载IPv6流量,sshd仍可能被IPv6源地址访问
二、区分正常IPv6登录与隐蔽通道爆破行为
IPv6爆破本身不改变SSH协议,但攻击者常利用其地址空间大、日志易被忽略、防火墙规则覆盖不全等特点绕过防护。关键识别点:
- 高频短时失败连接:同一IPv6地址(哪怕/64子网不同)在1分钟内尝试 >5 次失败密码,极可能是自动化爆破
-
非常规地址段:如大量来自
2001:db8::/32(文档预留)、fe80::/10(本地链路)、或匿名代理常用前缀(如部分He.net /64段) - 无SSH banner交互或极短会话生命周期:真实用户登录后通常有shell交互;爆破连接常在认证失败后立即断开,tcp连接时间
-
日志中缺失用户名或使用畸形用户名:如
Invalid user \x00\x01\x02 from fe80::1234:5678:9abc:def0
三、实时阻断IPv6爆破的可行手段
不能只靠“封IP”,要结合协议层、应用层和日志联动做动态拦截:
-
iptables/ip6tables 立即封禁:
ip6tables -I INPUT -s 2001:db8::1234 -j DROP(单地址)ip6tables -I INPUT -s 2a01:4f8::/32 -j DROP(整个/32段,需评估误伤)
封禁后执行ip6tables-save > /etc/iptables/rules.v6持久化(Ubuntu/Debian)或service ip6tables save(CentOS) -
Fail2Ban 配合 IPv6 日志解析:
编辑/etc/fail2ban/jail.local,确保sshdjail 启用且支持 IPv6:enabled = truefilter = sshd[mode=aggressive](启用更激进匹配)logpath = /var/log/auth.log(Debian/Ubuntu)或/var/log/secure(RHEL/CentOS)
Fail2Ban 默认支持 IPv6 地址提取,无需额外配置 -
sshd 配置层收敛暴露面:
编辑/etc/ssh/sshd_config:ListenAddress 0.0.0.0:22(显式禁用IPv6监听)AddressFamily inet(强制仅IPv4)PermitRootLogin no、PasswordAuthentication no、PubkeyAuthentication yes
修改后systemctl restart sshd
四、检测已存在的IPv6隐蔽通道痕迹
如果怀疑已有隧道被建立(如攻击者用6tunnel、iodine、或自研ICMP/IPv6隧道反向连接),需检查:
-
异常IPv6路由与邻居缓存:
ip -6 route show(查看非预期的 via 或 tunnel 条目)ip -6 neigh show(检查是否存在可疑的 link-layer 映射) -
非标准端口上的sshd派生进程:
ss -tunp | grep ':*[^22]$'(找监听非22端口的ssh相关进程)
结合ps auxf | grep ssh看是否有带-D(动态端口转发)、-R(远程端口转发)、-L(本地端口转发)参数的长期存活进程 -
定时任务或启动项中的IPv6隧道工具:
crontab -l -u root、systemctl list-unit-files --state=enabled | grep -i tunnel、ls /etc/systemd/system/*.service | xargs -I{} grep -l "6tunnel\|socat\|iodine" {} 2>/dev/null











