刚装好的Linux服务器必须立刻改root密码,因其默认密码或空密码是自动化扫描工具的首要突破口;应使用sudo passwd root设置强密码或sudo passwd -l root锁定账户,并确保/etc/ssh/sshd_config中PermitRootLogin为no。

为什么刚装好的 Linux 服务器必须立刻改 root 密码
默认 root 密码或空密码是自动化扫描工具的首要突破口,ssh 暴力破解日志里 Failed password for root 出现频率远高于普通用户。不改密码等于把门锁换成插销。
- 用
sudo passwd root启用并设置强密码(至少 12 位,含大小写字母、数字、符号) - 若无需直接 root 登录,运行
sudo passwd -l root锁定账户,后续用sudo提权 - 检查
/etc/ssh/sshd_config中PermitRootLogin是否设为no,改完执行sudo systemctl restart sshd
如何快速识别正在监听的危险端口
攻击者常通过未授权开放的端口(如 23/tcp telnet、21/tcp ftp、6379/tcp redis 默认端口)横向渗透。别只看“有没有防火墙”,先确认“开了什么”。
- 运行
sudo ss -tuln查看所有监听端口,重点关注非标准端口和0.0.0.0:绑定项 - 对每个可疑端口,用
sudo lsof -i :查进程名,确认是否为必要服务(如nginx、postgres) - 临时关闭非必要服务:例如发现
vsftpd但实际不用 FTP,执行sudo systemctl stop vsftpd && sudo systemctl disable vsftpd
faillog 和 lastb 命令查不到真实攻击源?试试 journalctl 配合 grep
lastb 只记录失败登录且依赖 btmp 文件,而很多系统默认不启用或被清空;faillog 仅针对 PAM 记录,漏掉 SSH 协议层拒绝(如密钥不匹配)。真正有效的日志在 systemd-journald 里。
- 查近期所有 SSH 登录尝试(成功+失败):
sudo journalctl -u sshd --since "2 hours ago" | grep -E "(Accepted|Failed|Invalid)" - 提取高频攻击 IP:
sudo journalctl -u sshd --since "1 day ago" | grep "Failed password" | awk '{print $11}' | sort | uniq -c | sort -nr | head -10 - 注意:确保
/var/log/journal已启用持久化(Storage=persistent在/etc/systemd/journald.conf中)
配置 ufw 时最容易忽略的三个规则顺序陷阱
ufw 是 iptables 封装,但规则按添加顺序匹配,ufw deny from 192.168.1.100 如果加在 ufw allow 22 之后,攻击者仍能连上 SSH——因为允许规则已先命中。
- 永远先设默认策略:
sudo ufw default deny incoming,再逐条添加allow - 拒绝特定 IP 必须用
sudo ufw insert 1 deny from 203.0.113.45插入第一条,不能用ufw deny - 开放端口时明确指定协议:
sudo ufw allow 443/tcp,避免ufw allow 443同时放行 UDP(可能被滥用)
sudo ufw status numbered # 看编号后,用 insert 调整顺序,比删了重加更安全
关键不是规则多,而是每条规则是否真在生效。很多“已配置防火墙”的服务器被攻破,问题出在 ufw status 显示 active,但 sudo ufw status verbose 里看到 Default: deny (incoming) 下面跟着一条没写协议的 allow 22 —— 它放行了所有发往 22 端口的 UDP 包。










