温馨提示×

Linux Node.js 配置中如何配置安全策略

小樊
45
2025-12-18 10:18:24
栏目: 编程语言

Linux 上 Node.js 安全策略配置清单

一 运行环境与最小权限

  • 选择 Node.js LTS 版本,优先通过 NodeSource 仓库NVM 安装,便于及时获得安全修复与版本切换。示例:Ubuntu 安装 LTS 可使用 NodeSource 脚本;CentOS/RHEL 可使用其对应脚本。避免使用已停止维护的版本。
  • 非 root用户运行进程,遵循最小权限原则;如需更高网络端口,使用反向代理或系统端口转发,而非以 root 直接监听 80/443
  • 进程管理建议:使用 PM2Systemd 托管应用,设置自动重启、日志输出与开机自启,便于稳定运行与审计。

二 进程与网络边界

  • 反向代理与 TLS:使用 Nginx/Apache 终止 TLS,强制 HTTPS;仅开放必要端口(如 22/80/443),其余端口默认拒绝。示例 Nginx 配置将 443 反向代理到本地 3000
  • 防火墙与云安全组:启用 UFW/iptables 或云厂商安全组,仅放行 SSH(22)HTTPS(443);如需临时调试再放通 3000 等开发端口并及时关闭。
  • 网络最小暴露面:对外仅暴露反向代理与必要服务,Node.js 应用监听 127.0.0.1:3000 或内网地址,由代理转发。

三 应用层安全加固

  • 安全 HTTP 头:使用 Helmet 设置 X-Frame-Options、X-XSS-Protection、Strict-Transport-Security、Content-Security-Policy 等,降低 XSS/CSRF/点击劫持 风险。
  • 输入校验与输出编码:对所有用户输入进行严格校验与清理,防范 SQL 注入、XSS、命令注入;模板渲染与 API 输出均要做输出编码。
  • 身份认证与口令存储:使用 bcrypt/scrypt 等强哈希算法存储口令,实施 限流/锁定 策略抵御暴力破解,必要时启用 MFA/SSO
  • 会话与令牌:使用安全的 JWT 机制(强密钥、短有效期、刷新令牌)、HttpOnly/Secure Cookie 标志与 CSRF 防护(有表单时)。
  • 依赖安全:在 package.json 中固定版本并使用锁文件;定期执行 npm audit / npm outdated,结合 Snyk 持续监控漏洞。

四 数据与日志安全

  • 敏感信息管理:禁止硬编码密钥/口令,统一使用 环境变量密钥管理服务 加载配置;不同环境使用独立配置。
  • 日志策略:选用 Winston/Pino/Bunyan 等结构化日志库,合理配置级别(如 error/warn/info);使用 logrotate 做按日/按大小轮转与清理,避免日志无限增长。
  • 日志保密与合规:对含敏感信息的日志进行脱敏加密存储,集中到 ELK/SplunkSIEM 进行审计与告警;定期审计异常登录、权限变更与高频错误。

五 快速落地示例

  • 使用 Nginx 开启 HTTPS 并反向代理到本地 3000
    1. 生成证书(测试可用自签,生产建议使用 Let’s Encrypt):
      openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
    2. Nginx 配置片段:
      server { listen 443 ssl; server_name yourdomain.com;
      ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;
      location / { proxy_pass http://127.0.0.1:3000;
      proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme; } }
    3. 防火墙仅放行 22/443:ufw allow 22,443/tcp && ufw enable
    4. 以非 root 用户启动应用(示例用 PM2):
      pm2 start app.js -i max --name “myapp”
      pm2 startup && pm2 save
    5. 依赖安全:npm audit fix && npm outdated

0