背景
家用宽带默认启用了 IPv6,并且 Ubuntu 24.04 主机可以通过 IPv6 地址直接使用 SSH 登录。这意味着设备获得了全球可路由地址,不再依赖 IPv4 NAT 的“隐身”效果。
这种情况本身并不表示系统已经被攻击,但确实意味着主机上的监听服务可能直接暴露在公网,需要对当前安全状态进行审计,并建立基本的防护措施。
安全检查:确认是否“全裸”以及是否存在入侵迹象
1. 检查防火墙状态
首先检查 Uncomplicated Firewall 是否启用:
sudo ufw status verbose
输出:
状态:不活动
说明 UFW 未启用。
2. 检查 nftables 规则
nftables 是 Linux 当前主流的包过滤框架:
sudo nft list ruleset
没有任何输出,说明没有自定义规则。
3. 检查 IPv6 默认策略
sudo ip6tables -L -n -v
输出:
Chain INPUT (policy ACCEPT)
这表示:
- 所有 IPv6 入站连接默认允许;
- 系统没有设置网络层访问控制;
- 任何监听端口都可以被互联网直接访问。
4. 判断是否处于公网直接暴露状态
当同时满足以下条件时,可以认为系统处于“全裸”状态:
- 获得全球 IPv6 地址(
scope global)。 - 防火墙未启用。
INPUT默认策略为ACCEPT。- 存在监听服务(例如 SSH)。
这并不表示已被入侵,只表示攻击面完全暴露。
5. 检查当前登录用户
who
w
结果显示:
- 当前只有一个登录用户:
catroll - 登录方式为本地 GNOME 会话
没有陌生远程会话。
6. 检查系统账户
awk -F: '$3 >= 1000 {print $1}' /etc/passwd
输出:
nobody
catroll
系统中没有新增的可交互用户。
7. 审计 SSH 登录日志
sudo journalctl -u ssh --since "7 days ago" | grep Accepted
记录基本如下:
Accepted publickey for catroll ...
说明:
- 登录均使用同一 SSH 公钥;
- 登录用户均为
catroll; - 来源地址均属于自己的 IPv6 地址段。
8. 检查 SSH 实际配置
配置文件中:
PermitRootLogin no
PasswordAuthentication no
表示:
- 禁止 Root 登录;
- 禁用密码认证;
- 仅允许公钥登录。
运行时配置可通过以下命令确认:
sudo sshd -T | grep -E 'passwordauthentication|permitrootlogin|pubkeyauthentication'
期望输出:
passwordauthentication no
permitrootlogin no
pubkeyauthentication yes
安全加固:建立 IPv6 下的安全基线
1. 启用 UFW 防火墙
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
这组命令的作用:
- 默认拒绝所有入站连接;
- 允许所有出站连接;
- 保留 SSH 访问能力;
- 正式启用防火墙。
验证:
sudo ufw status verbose
2. 确保 SSH 仅允许密钥登录
编辑配置文件:
sudo nano /etc/ssh/sshd_config
确保包含:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
重启 SSH 服务:
sudo systemctl restart ssh
3. 安装 Fail2ban
Fail2ban 用于监控系统日志并自动封禁多次认证失败的来源地址。
安装:
sudo apt update
sudo apt install fail2ban
启动并设置开机自启:
sudo systemctl enable --now fail2ban
该命令等价于:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
4. 验证 Fail2ban 状态
查看服务状态:
sudo systemctl status fail2ban
查看启用的防护模块:
sudo fail2ban-client status
查看 SSH 防护详情:
sudo fail2ban-client status sshd
5. 如不需要公网 SSH,可直接关闭
通过防火墙禁止 SSH:
sudo ufw deny 22/tcp
或者彻底停止 SSH 服务:
sudo systemctl disable --now ssh
6. 建议的安全基线
适用于长期联网的 Ubuntu 桌面或服务器:
- 启用 UFW。
- 默认拒绝所有入站连接。
- SSH 禁止 Root 登录。
- SSH 禁用密码认证。
- 仅允许公钥登录。
- 安装 Fail2ban。
- 定期审计登录日志。
- 及时安装系统更新。