Ubuntu 上保障 Node.js 安全的实用清单
一 系统与基础加固
- 保持系统与软件包为最新:执行sudo apt update && sudo apt upgrade;启用自动安全更新,安装unattended-upgrades并配置**/etc/apt/apt.conf.d/50unattended-upgrades**以自动安装安全补丁。
- 强化账户与登录安全:在**/etc/login.defs设置PASS_MAX_DAYS等密码策略;禁用不必要的系统账户;使用ufw仅放行必要端口(如SSH 22**、HTTP 80、HTTPS 443);SSH 加固建议:修改默认端口、禁用root登录、仅允许密钥认证、设置空闲超时。
- 最小权限运行:创建非 root专用用户运行应用;必要时启用AppArmor或SELinux对 Node 进程进行系统调用与文件访问限制(如执行aa-status查看状态)。
二 Node.js 运行环境与依赖管理
- 版本管理:使用nvm安装与切换 Node 版本,便于快速获得安全修复与回滚;避免使用过旧或不再维护的版本。
- 运行与进程管理:以非 root身份运行应用,使用PM2等进程管理器托管、守护与集中日志(如pm2 start app.js、pm2 logs)。
- 反向代理与传输加密:生产环境前置Nginx/Apache反向代理,统一处理静态资源、压缩、缓存与 TLS;为域名申请Let’s Encrypt证书启用HTTPS,避免明文传输与中间人攻击。
- 依赖与漏洞治理:定期执行npm audit / npm outdated,结合Snyk等工具持续扫描与修复依赖漏洞;保持Node.js 与 npm为最新稳定版。
三 应用层安全控制
- 身份认证与口令存储:使用bcrypt/scrypt等算法对密码进行加盐哈希,并实施MFA;避免明文或弱口令。
- 输入校验与输出编码:对所有用户输入进行校验与清理,防范XSS/SQL 注入等;模板渲染与响应输出注意上下文转义。
- 请求与访问控制:启用express-rate-limit等限流中间件抵御DoS/暴力请求;配置CORS白名单,仅允许受信源跨域访问。
- 安全响应头与错误处理:启用Helmet等安全中间件设置CSP、X-Frame-Options、X-XSS-Protection、Strict-Transport-Security等头部;生产环境避免泄露堆栈与敏感信息,统一记录到日志。
- 代码安全:避免使用eval()、new Function()、setTimeout(string)等动态执行路径;谨慎使用child_process,限制命令白名单与运行目录。
四 网络与运行时的纵深防护
- 边界与入侵防护:使用ufw限制入站;按需部署**入侵检测/防护系统(IDS/IPS)**监控异常流量与行为。
- 进程隔离与最小权限:通过AppArmor/SELinux为 Node 进程设定严格的profile,限制文件系统、网络与能力(capabilities);容器化部署时配合seccomp/rootless进一步收敛权限。
- 日志、监控与告警:集中采集系统日志(/var/log/syslog)与应用日志,结合Bunyan等结构化日志库;对接New Relic/Datadog等监控平台设置异常指标与告警;定期备份与演练恢复流程。
五 快速实施命令清单
- 系统与更新
- sudo apt update && sudo apt upgrade
- sudo apt install unattended-upgrades
- sudo dpkg-reconfigure -plow unattended-upgrades
- 防火墙与 SSH
- sudo ufw allow 22,80,443/tcp && sudo ufw enable
- 编辑**/etc/ssh/sshd_config**:Port、PermitRootLogin no、PubkeyAuthentication yes、PasswordAuthentication no、ClientAliveInterval 300
- Node 与进程
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
- nvm install --lts && nvm use --lts
- sudo npm i -g pm2 && pm2 start app.js -u nodeapp --name myapp
- 反向代理与证书
- sudo apt install nginx
- 配置 server 块 proxy_pass http://127.0.0.1:3000;启用 Let’s Encrypt 获取证书并配置 HTTPS
- 依赖与审计
- npm audit fix
- npx snyk test && npx snyk monitor
- 日志与监控
- sudo tail -f /var/log/syslog
- pm2 logs --raw --timestamp