温馨提示×

Nodejs在Ubuntu上的安全问题如何防范

小樊
42
2025-12-06 06:06:29
栏目: 编程语言

Ubuntu 上 Node.js 安全加固清单

一 系统与账号基线

  • 保持系统与软件包为最新:执行sudo apt update && sudo apt upgrade;启用自动安全更新,安装unattended-upgrades并配置**/etc/apt/apt.conf.d/50unattended-upgrades**以自动安装安全补丁。
  • 强化账号与登录安全:在**/etc/login.defs设置PASS_MAX_DAYS限制密码有效期;禁用不必要的系统账户;为 SSH 采用密钥认证**、禁用root 登录、可修改默认端口并设置空闲超时
  • 最小权限运行:创建非 root专用用户运行 Node.js,应用与文件权限遵循最小权限原则。
  • 进程隔离与强制访问控制:启用并配置AppArmor(如执行aa-status查看状态),为 Node.js 进程编写或加载限制策略,降低越权访问风险。

二 网络与运行环境

  • 边界防护:使用ufw仅放行必要端口(如 SSH 22HTTP 80HTTPS 443),默认拒绝其他入站流量。
  • 反向代理与静态资源:以 Nginx 作为反向代理,终止 TLS、隐藏后端端口与实现压缩、缓存、静态资源服务;示例配置可将 80 转发至本地 3000 端口。
  • 进程管理:使用 PM2 守护进程,便于启动、零停机重启、日志集中与监控;生产环境建议通过 PM2 启动应用而非直接 node 命令。
  • 传输加密:全站启用 HTTPS,优先使用 Let’s Encrypt 免费证书,避免明文传输与中间人攻击。

三 Node.js 应用与依赖安全

  • 版本与运行时:使用 nvm 管理 Node.js 版本,便于快速升级到包含安全修复的版本;避免使用过旧或不再维护的版本。
  • 依赖治理:定期执行npm audit / npm outdated,及时修复漏洞;结合 Snyk 等工具进行依赖漏洞扫描与持续监控。
  • 安全编码与输入校验:对用户输入进行严格校验与清理,防范 XSSSQL 注入 等;避免使用eval()setTimeout(string) 等不安全用法;启用CSRF 保护与精细化 CORS 策略。
  • 认证与口令存储:使用bcrypt/scrypt 等强哈希算法存储口令,实施多因素认证(MFA);对 API 实施限流(如 express-rate-limit)抵御暴力与滥用。
  • 运行与沙箱:以非 root用户运行;谨慎使用child_process,限制工作目录与环境变量;必要时采用v8-sandbox等沙箱机制降低代码执行风险。
  • 错误处理与日志:生产环境不暴露堆栈与敏感信息,统一记录安全相关日志,便于审计与告警。

四 运维监控与备份恢复

  • 日志与监控:集中采集与轮转应用与系统日志(如 /var/log/syslog),结合 PM2 日志、New Relic/Datadog 等监控工具进行异常检测与性能观测。
  • 入侵检测与加固:在边界部署**入侵检测/防御系统(IDS/IPS)**识别恶意流量与暴力尝试;持续检查系统与安全设备告警。
  • 备份与演练:定期备份代码、配置与数据库,保留离线/异地副本;定期演练恢复流程,验证可用性与完整性。

五 快速实施命令清单

  • 系统与自动更新:
    • sudo apt update && sudo apt upgrade
    • sudo apt install unattended-upgrades
  • 防火墙放行:
    • sudo ufw allow 22,80,443/tcp && sudo ufw enable
  • Node.js 与 PM2:
    • npm install -g pm2
    • pm2 start app.js -i max --name “myapp”
    • pm2 logs myapp
  • Nginx 反向代理示例:
    • sudo apt install nginx
    • 在 /etc/nginx/sites-available/yourdomain 配置 server 块,将 80 转发至 http://localhost:3000,然后 sudo systemctl restart nginx
  • 依赖安全:
    • npm audit fix
    • npx snyk test
  • AppArmor 检查:
    • aa-status

0