
核心要点(TL;DR)
- 云主机开局先改SSH端口并禁用密码登录,是性价比最高的加固动作。
- 防火墙默认拒绝入站,只放行必要端口,能消除大部分暴露面。
- 开启auditd与集中日志,是事后入侵溯源的前提。
- 基线加固要可验证:每条配置都应附带检查命令与回滚方式。
很多云主机开通后直接沿用镜像默认配置:SSH 跑在 22 端口、允许 root 密码登录、安全组放行 0.0.0.0/0、没有任何审计日志。这类机器上线几小时内就会遭遇暴力破解扫描,一旦口令薄弱,后续的挖矿、横向渗透、数据窃取几乎是必然。本文给出一份可直接照做的云主机安全防护配置清单,12 项基线加固按优先级排列,每项都配检查命令与验证方法,适合运维和站长在业务上线前逐项打勾。
一、账号与登录:先收紧人这一侧
入侵者拿到的第一个立足点通常是账号。加固顺序是:清理无用账号、建立个人运维账号、禁用 root 远程登录。
# 查看可登录账号与空口令账号
awk -F: '(>=1000){print }' /etc/passwd
awk -F: '(==""){print }' /etc/shadow
# 新建运维账号并赋予 sudo
useradd -m -s /bin/bash ops
passwd ops
usermod -aG wheel ops # Debian/Ubuntu 用 sudo 组
# 锁定长期不用的账号
usermod -L olduser
随后编辑 /etc/ssh/sshd_config:PermitRootLogin no、PasswordAuthentication no、MaxAuthTries 3,并配合 AllowUsers ops 限定可登录用户。改完先 sshd -t 校验语法,再 systemctl reload sshd,并保留一个已登录会话用于回滚。
二、SSH 与远程入口:换端口、上密钥、限来源
把 SSH 端口从 22 改为高位端口(如 22022),能过滤掉绝大多数自动化扫描。密钥登录用 ssh-keygen -t ed25519 生成,公钥写入 ~/.ssh/authorized_keys 后设 chmod 600、chmod 700 ~/.ssh。若条件允许,在安全组层把 SSH 来源限制为固定办公 IP 或跳板机地址,比任何主机层策略都直接。
验证方式:从另一台机器执行ssh -p 22022 ops@ip能登录,ssh root@ip被拒绝,才算完成。
三、防火墙与端口收敛:默认拒绝入站
先用 ss -tunlp 列出所有监听端口,逐个确认业务必要性,其余全部关闭。以 firewalld 为例:
firewall-cmd --permanent --add-port=22022/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --set-default-zone=drop
firewall-cmd --reload
firewall-cmd --list-all
Ubuntu 可用 ufw:ufw default deny incoming 后逐条 ufw allow。云厂商安全组与主机防火墙要形成双层,安全组管南北向,主机防火墙管东西向横向访问。
四、补丁、内核参数与服务最小化
关闭不需要的服务是减少漏洞面的直接手段:systemctl disable --now 停用 telnet、ftp、rpcbind 等。补丁按发行版执行 apt update && apt upgrade 或 dnf update,内核更新后安排重启窗口。内核参数在 /etc/sysctl.d/99-hardening.conf 中加固:
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_redirects = 0
kernel.randomize_va_space = 2
执行 sysctl --system 生效。若业务无需转发,关闭 ip_forward 可降低被当作跳板的风险。
五、日志审计与文件权限
没有日志就没有溯源。开启 auditd 并配置关键目录监控:
auditctl -w /etc/passwd -p wa -k passwd_change
auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config
systemctl enable --now auditd
同时把 /var/log/secure 或 /var/log/auth.log 接入集中日志或云日志服务,避免攻击者清空本地日志。敏感文件权限检查:find / -perm -4000 -type f 2>/dev/null 列出 SUID 文件,与基线比对,出现陌生条目要立即排查。
六、恶意进程与持久化排查
加固完成后做一轮自检,重点看持久化位置:crontab -l、ls /etc/cron.*、systemctl list-unit-files --state=enabled、cat /etc/rc.local。再用 ps aux --sort=-%cpu | head 和 ss -tunlp 比对异常外联。发现可疑进程先 cp /proc/PID/exe 留证,记录 PID、启动时间与网络连接,再决定处置方式。
| 加固项 | 检查命令 | 通过标准 |
|---|---|---|
| SSH 配置 | sshd -T | grep -E 'permitrootlogin|passwordauth' | 均为 no |
| 防火墙 | firewall-cmd --list-all | 仅业务端口放行 |
| 账号 | awk -F: '(>=1000){print }' /etc/passwd | 仅已知运维账号 |
| 审计 | systemctl is-active auditd | active |
在防护建议层面,AegisX 的主机安全能力可覆盖入侵检测、异常登录告警与基线核查,把上述手工检查转为持续监控,适合机器数量上来后替代人工巡检。
行动建议:把 12 项加固写成一份带勾选框的清单,每项附检查命令,业务上线前逐条执行并留存输出;变更后回归验证 SSH 与防火墙配置,每月复核账号与端口清单。基线加固的价值不在一次做完,而在持续可验证。
常见问题(FAQ)
云主机刚买回来,最先做哪几项加固?
优先做三件事:修改SSH端口并禁用root密码登录、配置防火墙默认拒绝入站、创建普通运维账号并配置密钥。这三项能在十分钟内消除暴力破解与端口暴露两类最高频风险,其余加固可在业务上线前逐步补齐,但不要跳过日志审计。
禁用了密码登录,万一密钥丢失怎么办?
提前保留一条后路:通过云控制台的VNC或救援模式登录,或在加固前保留一个带密钥的备用账号。操作时先新开一个SSH会话验证密钥可登录,再修改配置并重载sshd,切勿在唯一会话中直接重启服务,避免把自己锁在门外。
防火墙用云厂商安全组还是系统iptables?
两者都要用,职责不同。安全组在云网络层做第一道过滤,成本低、生效快;系统防火墙在主机层做第二道,防止同网段横向访问。建议安全组只放行业务端口与运维源IP,主机侧再配置默认拒绝策略,形成双层收敛。
如何判断云主机是否已经被入侵?
重点看四类信号:异常登录记录与新增账号、陌生监听端口与进程、计划任务与启动项被篡改、CPU或外联流量异常。可用last、ss -tunlp、crontab -l、ps aux配合比对基线,发现可疑进程先留证再处置,不要急着重装丢失证据。
基线加固做完还需要定期做什么?
加固不是一次性动作。建议每月复核账号与端口清单、每周检查安全更新与日志告警、每次变更后回归验证防火墙与SSH配置。把检查命令写成脚本定时执行,输出差异报告,才能避免配置被后续运维操作悄悄改回去。