13 10 月 2026

新服务器上线、或者接手一台陌生服务器,应该有一份标准检查清单。这篇就是那份清单——按顺序做完,能挡掉绝大多数自动化攻击。

每一项都给了检查命令和达标标准,可以直接当 checklist 用。

安全的第一道防线是配置。财富云计算 的云服务器提供完整 root 权限与安全组能力;内网服务、游戏服务端可选 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上,暴露面更小)。

一、账号与认证(8 项)

1. SSH 使用密钥登录

grep -E "^(PasswordAuthentication|PubkeyAuthentication)" /etc/ssh/sshd_config

✅ 达标:PasswordAuthentication no、PubkeyAuthentication yes

2. 禁止 root 直接登录

grep "^PermitRootLogin" /etc/ssh/sshd_config

✅ 达标:PermitRootLogin no(或至少 prohibit-password)

3. 修改默认 SSH 端口

grep "^Port" /etc/ssh/sshd_config

✅ 达标:非 22

4. 无空密码账号

awk -F: '($2 == "") {print $1}' /etc/shadow

✅ 达标:无输出

5. 除 root 外无 UID=0 账号

awk -F: '($3 == 0) {print $1}' /etc/passwd

✅ 达标:只有 root

6. 服务用低权限账号运行

ps aux | grep -E "nginx|mysql|redis" | grep -v grep
systemctl show -p User nginx

✅ 达标:不是 root

7. 密码复杂度策略

grep -E "^minlen|^dcredit|^ucredit|^lcredit|^ocredit" /etc/security/pwquality.conf

✅ 达标:minlen ≥ 10,且要求多种字符

8. sudo 授权最小化

cat /etc/sudoers
ls /etc/sudoers.d/
sudo -l

✅ 达标:只有必要用户,命令白名单而非 ALL=(ALL) NOPASSWD:ALL


二、网络与端口(6 项)

9. 防火墙已启用且默认拒绝

ufw status verbose          # Ubuntu
firewall-cmd --list-all     # CentOS

✅ 达标:Status: active,默认 incoming 为 deny

10. 只开放必要端口

ss -tulnp

✅ 达标:只看到 80、443、SSH(改过的端口)、必要服务端口

11. 危险服务不对外监听

ss -tulnp | grep -E "0.0.0.0:(3306|6379|27017|9200|11211|2375|5432)"

✅ 达标:无输出,或只监听 127.0.0.1 / 内网地址

Redis、MySQL、MongoDB、Elasticsearch、Docker API 绝不能对 0.0.0.0 开放。

12. 云平台安全组配置正确

去控制台检查入站规则。

✅ 达标:默认拒绝,只放行必要端口;管理端口限制来源 IP

13. 关闭不用的服务

systemctl list-unit-files --type=service --state=enabled

✅ 达标:只有需要的服务是 enabled

systemctl disable --now 不需要的服务

14. 禁用 ICMP(可选)

✅ 视业务而定,禁 ping 可减少被扫描发现的概率


三、系统与软件(6 项)

15. 系统补丁已更新

apt update && apt list --upgradable       # Debian/Ubuntu
yum check-update                          # CentOS

✅ 达标:无重要安全更新待装

# 开启自动安全更新(Ubuntu)
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades

16. 关闭不必要的内核功能

cat /etc/sysctl.conf

推荐加固项:

# 防 SYN Flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2

# 不响应 ICMP 广播(防 smurf 攻击)
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 开启反向路径过滤(防 IP 欺骗)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 忽略伪造的 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0

# 记录异常包
net.ipv4.conf.all.log_martians = 1
sysctl -p

17. 文件权限合理

# 关键文件权限
ls -l /etc/passwd /etc/shadow /etc/ssh/sshd_config

✅ 达标:

  • /etc/shadow 为 640 或 600
  • ~/.ssh 为 700
  • authorized_keys 为 600
  • 私钥为 600
# 检查全局可写文件
find / -xdev -type f -perm -0002 2>/dev/null | head

✅ 达标:无异常输出

18. 无可疑 SUID 文件

find / -perm -4000 -type f 2>/dev/null

✅ 达标:只有系统自带的(如 passwd、sudo),无陌生文件

19. 隐藏版本号

curl -I http://localhost
nginx -v
php -v

✅ 达标:server_tokens off,PHP expose_php = Off,响应头不暴露版本

20. 时间同步正常

timedatectl
date

✅ 达标:NTP 已同步(日志时间准确对排查很关键)

timedatectl set-timezone Asia/Shanghai
systemctl enable --now systemd-timesyncd

四、日志与审计(4 项)

21. 关键日志已开启

ls /var/log/auth.log /var/log/secure
journalctl --disk-usage

✅ 达标:登录日志、服务日志正常记录

22. 日志有轮转和保留策略

ls /etc/logrotate.d/
journalctl --disk-usage

✅ 达标:配置了 logrotate,journald 有大小限制

23. 命令审计(可选但推荐)

cat /etc/sudoers.d/audit
Defaults logfile="/var/log/sudo.log"
Defaults log_input, log_output

✅ 达标:sudo 操作有记录

24. 登录失败有告警/防护

fail2ban-client status

✅ 达标:fail2ban 已安装并运行


五、应用层(4 项)

25. Web 目录权限正确

ls -ld /var/www/html
ls -l /var/www/html

✅ 达标:目录 755、文件 644、所有者是服务用户(www-data/nginx)

26. 上传目录禁止执行

location ^~ /uploads/ {
    location ~ \.(php|php5|phtml)$ { deny all; }
}

✅ 达标:上传目录不能执行脚本

27. 敏感文件不可访问

for f in .git/config .env backup.sql phpinfo.php; do
  curl -s -o /dev/null -w "$f: %{http_code}\n" http://localhost/$f
done

✅ 达标:全部返回 403 或 404

28. 有 HTTPS 且配置合格

curl -I https://example.com

✅ 达标:TLS 1.2+,HTTP 自动跳 HTTPS,SSL Labs 评分 A 以上


六、数据与备份(2 项)

29. 有自动备份

crontab -l
ls /backup/

✅ 达标:数据库和文件有定期备份,且备份在异地

30. 有快照策略

去云平台控制台确认。

✅ 达标:开启自动快照,保留 7 天以上


七、一键检查脚本

把上面的检查整合成脚本,定期跑:

#!/bin/bash
# /usr/local/bin/security-check.sh
echo "======== 账号与认证 ========"
echo -n "[SSH 密码登录] "; grep -E "^PasswordAuthentication" /etc/ssh/sshd_config
echo -n "[SSH 端口] "; grep -E "^Port" /etc/ssh/sshd_config
echo -n "[root 登录] "; grep -E "^PermitRootLogin" /etc/ssh/sshd_config
echo -n "[空密码账号] "; awk -F: '($2==""){print $1}' /etc/shadow | tr '\n' ' '; echo
echo -n "[额外 UID=0] "; awk -F: '($3==0){print $1}' /etc/passwd | tr '\n' ' '; echo

echo
echo "======== 网络与端口 ========"
echo "[监听端口]"
ss -tulnp | grep LISTEN
echo -n "[危险端口对外] "
ss -tuln | grep -E "0.0.0.0:(3306|6379|27017|9200|11211|2375|5432)" | tr '\n' ' '; echo

echo
echo "======== 系统 ========"
echo -n "[防火墙] "; (ufw status 2>/dev/null | head -1) || (systemctl is-active firewalld)
echo -n "[时区] "; timedatectl | grep "Time zone"
echo "[全局可写文件]"
find /etc /usr -xdev -type f -perm -0002 2>/dev/null | head -5
echo "[SUID 文件]"
find / -xdev -perm -4000 -type f 2>/dev/null | head -10

echo
echo "======== 服务 ========"
echo "[已启用的服务]"
systemctl list-unit-files --type=service --state=enabled | tail -n +2 | head -20

echo
echo "======== 日志 ========"
journalctl --disk-usage 2>/dev/null
echo -n "[fail2ban] "; systemctl is-active fail2ban 2>/dev/null || echo "未安装"

echo
echo "======== 备份 ========"
crontab -l 2>/dev/null | grep -E "backup|dump" || echo "无备份任务"
chmod +x /usr/local/bin/security-check.sh
security-check.sh

八、检查频率建议

项目频率
端口、进程、登录记录每周
系统与软件更新每周(安全更新立即)
fail2ban 状态每周
完整基线检查每月
备份恢复演练每季度
密码更换每半年(或人员变动时)
安全配置复审每季度

九、优先级排序(时间不够就先做前 10 项)

如果只有 30 分钟,按这个顺序:

  1. ✅ SSH 改密钥登录 + 关密码
  2. ✅ 改 SSH 端口
  3. ✅ 禁 root 登录
  4. ✅ 开防火墙,只放行必要端口
  5. ✅ 数据库/Redis 不对公网开放
  6. ✅ 装 fail2ban
  7. ✅ 更新系统补丁
  8. ✅ 检查是否有陌生账号和公钥
  9. ✅ 检查计划任务有无异常
  10. ✅ 开启快照/备份

这 10 项能挡掉 95% 的常见攻击。


十、发现问题的处置

检查中若发现以下情况,按入侵处理:

  • 有陌生账号或 UID=0 的后门账号
  • authorized_keys 里有不认识的公钥
  • 有陌生的 cron 任务或 systemd 服务
  • 有陌生的监听端口或对外连接
  • 有伪装成系统进程的异常进程
  • 有可疑 SUID 文件

处置流程见《服务器被入侵应急排查与处置》。


安全基线是长期维护的事,不是配一次就完。财富云计算 的云服务器提供完整控制权限与安全组能力,配合快照可以快速回滚到干净状态。把服务部署在 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上)上,只通过映射暴露必要端口,能显著降低被扫描和攻击的概率。

相关阅读:

  • 《SSH 密钥登录与账号安全配置》
  • 《fail2ban 防暴力破解实战配置》
  • 《服务器被入侵应急排查与处置》
  • 《网站常见漏洞与基础防护》
延伸阅读
  1. 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
  2. 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
  3. 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
  4. 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
  5. 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
  6. RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
  7. 短链接服务搭建:Shlink 自托管,链接数据自己掌握
  8. 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道
更多阅读
  1. 上一篇:服务器性能测试与压测方法:上线前先知道自己能扛多少
  2. 下一篇:Web 日志分析实战:从访问日志里看出攻击、瓶颈和用户行为
发表评论 6