CentOS 上 Node.js 的安全策略与落地清单
一 基础系统与网络防护
- 保持系统与软件为最新,及时修补漏洞;优先使用 NodeSource 或 NVM 安装与切换 Node.js LTS,便于安全更新与多版本管理。
- 以非 root用户运行应用,遵循最小权限原则;如需更高网络权限,使用 sudo 精细化授权。
- 启用 firewalld 仅开放必要端口:如 22/SSH、80/HTTP、443/HTTPS;如需直连应用端口(如 3000),仅在内网或受控网段开放,生产更推荐反向代理到 80/443。
- 云上实例需同步配置安全组规则,仅放通上述端口,避免对 0.0.0.0/0 暴露管理端口与应用端口。
- 对外仅提供 HTTPS,使用 Certbot 获取并自动续期 Let’s Encrypt 证书,避免明文传输与中间人攻击。
二 运行时与应用层安全
- 使用 Helmet 设置关键安全响应头,启用并收紧 CSP(内容安全策略);隐藏或移除 X-Powered-By 等泄露技术栈的头部。
- 严格 CORS 白名单,仅允许受信源、必要方法与头;默认拒绝预检与非法来源。
- 启用 速率限制(如 express-rate-limit)抵御暴力与滥用;限制 请求体大小,防止 DDoS 与内存耗尽。
- 全程使用 HTTPS;为会话与认证 Cookie 设置安全属性(如 Secure、HttpOnly、SameSite),避免明文或可被脚本读取。
- 输入校验与输出编码,防范 XSS/SQL 注入;使用 参数化查询/ORM 杜绝拼接 SQL。
- 错误处理不暴露堆栈与内部路径,生产返回通用错误信息并记录详细日志用于审计。
- 依赖安全:锁定版本(package-lock.json)、定期执行 npm audit fix、结合 Snyk 等工具持续扫描;移除无用依赖与开发依赖。
三 进程与部署安全
- 使用 PM2 等进程管理器守护进程,配置 非 root 运行与最小权限;开启集群模式提升吞吐与稳定性。
- 通过 Nginx/Apache 反向代理与静态资源托管,对外仅暴露 80/443,在代理层统一处理 TLS、压缩、缓存、限流 等。
- 构建阶段执行 npm install --production,仅安装生产依赖,减少攻击面与镜像体积。
- 使用 dotenv 或系统服务环境文件管理密钥与数据库口令,禁止硬编码;为 CI/CD 与运维建立最小可见的凭据分发机制。
- 日志与监控:记录访问与错误日志,接入 Sentry/APM/日志平台,设置告警规则识别异常流量、登录失败激增与错误率飙升。
四 快速检查清单与常用命令
| 检查项 |
推荐做法 |
快速命令或示例 |
| Node 与依赖 |
使用 NVM/LTS,定期安全更新 |
node -v;npm install --production;npm audit fix |
| 运行用户 |
非 root 启动,最小权限 |
sudo -u nodeuser node app.js |
| 端口与防火墙 |
仅开放 22/80/443;云上安全组同步 |
sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload |
| 反向代理与 TLS |
Nginx 终止 TLS,代理到本地端口 |
Certbot 获取证书;Nginx 配置 443/ssl 与 proxy_pass |
| 安全中间件 |
Helmet + CORS + 限流 + 请求体限制 |
app.use(helmet()); app.use(cors({origin:…})); rate-limit; express.json({limit:…}) |
| 进程守护 |
PM2 集群与日志 |
pm2 start app.js -i max --name api;pm2 logs api |
以上策略覆盖系统、网络、运行时、依赖与部署的全链路安全要点,按此清单实施可显著提升 CentOS 上 Node.js 应用的抗攻击能力与合规水平。