Ubuntu 上 Node.js 安全防护实操清单
一 系统与账户安全
- 保持系统与软件包为最新:执行sudo apt update && sudo apt upgrade;启用自动安全更新:安装unattended-upgrades并配置**/etc/apt/apt.conf.d/50unattended-upgrades**,仅处理安全更新。
- 强化 SSH:修改默认端口、禁用root登录、仅允许密钥认证、设置空闲超时;用ufw仅放行必要端口(如 SSH 22/2222、HTTP 80、HTTPS 443)。
- 最小权限运行:创建非 root专用用户运行 Node.js;必要时用AppArmor/SELinux为进程做最小权限约束(如查看状态:aa-status)。
- 进程管理:使用PM2托管进程,便于守护、日志与平滑重启。
二 网络与边界防护
- 反向代理与隐藏后端:用 Nginx 终止 TLS、反向代理到本地端口(如 3000),并转发必要的请求头:
- 示例:
- listen 80; server_name your_domain;
- location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection ‘upgrade’; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
- 强制 HTTPS 与证书:使用 Let’s Encrypt/certbot 一键配置 Nginx SSL,自动重定向 HTTP→HTTPS。
- 精细访问控制:在边界层用 UFW 或 iptables 限制来源 IP 与端口;对管理接口可叠加应用层 IP 白名单中间件。
- 示例(UFW):仅允许内网网段访问管理端口 3001
- sudo ufw allow from 192.168.1.0/24 to any port 3001
- sudo ufw deny 3001/tcp
三 Node.js 应用自身防护
- 传输与头部安全:全站启用 HTTPS;使用 Helmet 设置安全响应头(如 X-XSS-Protection、X-Content-Type-Options、Strict-Transport-Security、X-Frame-Options)。
- 输入校验与输出编码:对请求参数进行严格校验(如 Joi/validator.js);模板引擎启用自动转义以缓解 XSS。
- 身份认证与口令存储:使用 bcrypt/scrypt 哈希口令;提供多因素认证 MFA;避免明文或弱口令策略。
- 会话与 Cookie:设置HttpOnly、Secure、SameSite 等属性;避免使用易猜测的默认会话名。
- 速率限制与防滥用:对登录、注册、API 关键路径启用 express-rate-limit 等限流策略。
- 安全依赖与漏洞治理:定期执行 npm audit / npm audit fix,并在 CI/CD 中集成 Snyk 持续监测依赖风险。
- 错误处理与信息泄露:生产环境不暴露堆栈与内部路径,返回通用错误并记录详细日志到服务端。
四 依赖与代码供应链安全
- 版本管理:使用 nvm 管理 Node.js 版本,便于快速升级与安全回退。
- 依赖治理:在 CI/CD 中执行 npm audit fix 与 Snyk test,对高危依赖设置阻断或升级门禁。
- 可信源与完整性:优先使用官方仓库或可信镜像;必要时校验包签名与完整性,降低篡改风险。
五 运行监控与响应
- 日志与审计:集中采集并轮转应用与系统日志(如 syslog),对异常登录、频繁 4xx/5xx、暴力请求等设定告警。
- 进程与资源监控:用 PM2 监控进程存活与资源占用,结合 APM/日志平台做异常检测与链路追踪。
- 备份与演练:定期备份代码、配置与数据库,并进行恢复演练;保留安全基线与变更记录,便于审计与回滚。