新服务器上线、或者接手一台陌生服务器,应该有一份标准检查清单。这篇就是那份清单——按顺序做完,能挡掉绝大多数自动化攻击。
每一项都给了检查命令和达标标准,可以直接当 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-upgrades16. 关闭不必要的内核功能
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 = 1sysctl -p17. 文件权限合理
# 关键文件权限
ls -l /etc/passwd /etc/shadow /etc/ssh/sshd_config✅ 达标:
/etc/shadow为 640 或 600~/.ssh为 700authorized_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/auditDefaults 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 分钟,按这个顺序:
- ✅ SSH 改密钥登录 + 关密码
- ✅ 改 SSH 端口
- ✅ 禁 root 登录
- ✅ 开防火墙,只放行必要端口
- ✅ 数据库/Redis 不对公网开放
- ✅ 装 fail2ban
- ✅ 更新系统补丁
- ✅ 检查是否有陌生账号和公钥
- ✅ 检查计划任务有无异常
- ✅ 开启快照/备份
这 10 项能挡掉 95% 的常见攻击。
十、发现问题的处置
检查中若发现以下情况,按入侵处理:
- 有陌生账号或 UID=0 的后门账号
authorized_keys里有不认识的公钥- 有陌生的 cron 任务或 systemd 服务
- 有陌生的监听端口或对外连接
- 有伪装成系统进程的异常进程
- 有可疑 SUID 文件
处置流程见《服务器被入侵应急排查与处置》。
安全基线是长期维护的事,不是配一次就完。财富云计算 的云服务器提供完整控制权限与安全组能力,配合快照可以快速回滚到干净状态。把服务部署在 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上)上,只通过映射暴露必要端口,能显著降低被扫描和攻击的概率。
相关阅读:
- 《SSH 密钥登录与账号安全配置》
- 《fail2ban 防暴力破解实战配置》
- 《服务器被入侵应急排查与处置》
- 《网站常见漏洞与基础防护》
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复
[...]└─ 联系我们 ← 电话、地址、表单、地图文案的常见错误:满屏"引领行业、卓越品质"这种空话。客户只关心"你能解决我什么问题、多少钱、靠不靠谱"。五、性能与安全:上线前 checklist性能(官网打开超过 3 秒,一半访客流失):开页面缓存,动态页面静态化,见PHP-FPM 安装与性能调优图片压缩 + WebP,方法论见网站图片与静态资源优化上 CDN,静态资源走 CDN,见CDN 加速配置[...]
2026-10-18 回复
[...]→ 归档(过期文档移入归档区,别删)技术团队可以把文档目录直接挂 Git,改动走 review,Wiki.js 有 Git 存储模块支持。版本管理见Git 版本控制与服务器部署。五、资源与成本团队规模文档量推荐配置10 人以内几百篇2核2G(MrDoc)/ 2核4G(Wiki.js)50 人几千篇4核8G + 对象存储附件200 人+几万篇4核8G + Elasticsearch图片附件走对象存储[...]
2026-10-18 回复
[...]}3. 初始化:访问域名 → 安装向导 → 设管理员密码 → 进后台。第一件事改默认后台路径(安全习惯,见服务器安全基线检查清单)。三、导航站的内容从哪来工具一小时就能搭好,内容才是导航站的生死线。三条路:先服务自己:把自己浏览器书签分类导入,这是第一批种子内容,也是最真实的分类结构垂直主题:别做"大而全的导航"(那是hao们的地盘),做一个垂直主题——"设计素材导航""独立开发者工具导航""AI[...]
2026-10-18 回复
[...]个人中心(订单 / 地址 / 优惠券)四、接支付:最需要谨慎的一步国内自建电商的支付选项:方式资质要求费率说明微信支付企业主体 + 商户号约 0.6% 起需对接口,或用插件支付宝企业/个体户约 0.6% 起同上个人码收款无0仅限小额/熟人场景,风控严PayPal企业主体约 3.9%+做海外用硬性要求:企业主体才能申请微信/支付宝商户号,个人主体基本没戏——注册主体时想清楚全站 HTTPS 是强制的[...]
2026-10-18 回复
[...]find /backup -name 'vw-*.tar.gz' -mtime +30 -deletersync 增量备份方案见rsync 同步与定时备份实战,定时任务见crontab 计划任务完全指南。导出密码库要加密:Bitwarden 支持加密导出(.json 加密格式),明文导出只用于迁移,导完立刻删。六、安全加固清单密码库是"一把钥匙开所有锁"的地方,安全按最高标准:[ ] SIGNUP[...]
2026-10-18 回复