一、先明确基线的三条原则
安全基线不是装个杀毒软件,而是一组可验证、可重复执行的配置。格达软件在为客户交付 APP、小程序和 PC 软件时,通常把基线拆成三条原则:
- 最小权限:任何账号、进程、令牌只拿完成工作所需的权限;
- 默认拒绝:入站流量默认全关,端口与接口按白名单逐个放行;
- 可审计可回滚:变更留痕,配置改动前先做快照。
下面按系统、网络、应用数据、运维四个层面展开。
二、系统与账号层:上线前必做
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| SSH 端口 | 非 22 的高位端口 | 降低自动化扫描命中率 |
| root 远程登录 | 禁止 | 改用普通账号 + sudo |
| 登录方式 | 仅密钥,关闭密码 | 弱口令是最常见的失守点 |
| 系统补丁 | 每周更新安全补丁 | 内核与 OpenSSL 优先 |
| 时间同步 | 开启 NTP | 日志与证书校验依赖准确时间 |
| 无用服务 | 卸载或禁用 | telnet、ftp、rpcbind 等 |
/etc/ssh/sshd_config 的关键几行:
Port 22022
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
改完先执行 sshd -t 校验语法,再重启服务,并保留另一个已登录终端,避免把自己锁在门外。
三、网络层:入站默认拒绝
云安全组和系统防火墙要双保险。很多客户只配了安全组,迁移机器时主机防火墙却全开,风险被一起带过去。
ufw default deny incoming
ufw default allow outgoing
ufw allow 22022/tcp
ufw allow 443/tcp
ufw enable
几条硬性要求:
- MySQL、Redis、MongoDB 一律不要监听
0.0.0.0,只允许内网或 127.0.0.1; - 管理后台(Jenkins、各类面板、数据库 Web 客户端)限制来源 IP 或接入 VPN;
- 小程序与 APP 的接口统一走 443 的 API 网关,业务服务器只对网关开放;
- PC 软件若自带局域网服务端,安装包中必须关闭默认弱口令与调试端口。
四、应用与数据层:把风险挡在配置之外
这是格达软件在开发咨询与交付环节最常介入的部分:
- 密钥不落代码:数据库密码、短信与支付密钥、JWT Secret 全部走环境变量或密钥管理服务,仓库只留
.env.example; - 上传目录不可执行:Nginx 中对 uploads 目录关闭脚本解析;
- 数据库最小授权:应用账号只给需要的库与 CRUD 权限,禁止 GRANT ALL;
- 备份 3-2-1:三份副本、两种介质、一份异地,每季度做一次恢复演练;
- HTTPS 强制:开启 HSTS,TLS 只保留 1.2 与 1.3。
location ^~ /uploads/ {
location ~ \.(php|jsp|py|sh)$ { deny all; }
add_header X-Content-Type-Options nosniff;
}
add_header Strict-Transport-Security 'max-age=31536000' always;
五、日志、巡检与整改顺序
开启 auditd、登录日志与云平台操作审计,日志集中外送,本地保留 30 天以上;对 SSH 失败登录、sudo 提权、异常外联设置告警。整改顺序建议是:先关端口与弱口令,再补补丁与权限,最后做日志与告警——前两项能挡掉绝大多数自动化攻击。
格达软件在服务器维护服务中,会为每个客户建立一份基线核对表,上线与季度巡检逐项打勾,变更前后各留一次快照。基线配置不是一次性工作,而是随业务迭代持续校准的习惯:把清单落进流程,远比事后应急便宜。