- 首页 >
- 问答 >
-
编程语言 >
- Nodejs在Ubuntu上的安全问题如何防范
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 22、HTTP 80、HTTPS 443),默认拒绝其他入站流量。
- 反向代理与静态资源:以 Nginx 作为反向代理,终止 TLS、隐藏后端端口与实现压缩、缓存、静态资源服务;示例配置可将 80 转发至本地 3000 端口。
- 进程管理:使用 PM2 守护进程,便于启动、零停机重启、日志集中与监控;生产环境建议通过 PM2 启动应用而非直接 node 命令。
- 传输加密:全站启用 HTTPS,优先使用 Let’s Encrypt 免费证书,避免明文传输与中间人攻击。
三 Node.js 应用与依赖安全
- 版本与运行时:使用 nvm 管理 Node.js 版本,便于快速升级到包含安全修复的版本;避免使用过旧或不再维护的版本。
- 依赖治理:定期执行npm audit / npm outdated,及时修复漏洞;结合 Snyk 等工具进行依赖漏洞扫描与持续监控。
- 安全编码与输入校验:对用户输入进行严格校验与清理,防范 XSS、SQL 注入 等;避免使用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 检查: