温馨提示×

Debian Node.js 如何进行安全配置

小樊
40
2025-12-07 05:21:00
栏目: 编程语言

Debian 上 Node.js 的安全配置清单

一 系统与账户安全

  • 保持系统与软件包为最新:执行 sudo apt update && sudo apt upgrade -y,及时修补内核与基础组件漏洞。
  • 最小权限运行:创建非 root专用用户(如 nodeapp)来运行业务进程,禁止以 root 直接启动 Node;如需提权仅通过 sudo 按需执行。
  • 强化 SSH:禁用 root 远程登录、禁用空密码、使用 SSH 密钥认证,必要时更改默认端口并重启 sshd
  • 防火墙收紧:仅开放必要端口(如 22/SSH、80/HTTP、443/HTTPS),生产环境建议仅暴露 443,将 Node 服务置于本地或内网,由反向代理对外。
  • 入侵防护:部署 Fail2ban 自动封禁暴力破解来源,配合日志分析工具(如 Logwatch)做常态巡检。

二 Node.js 运行环境与进程管理

  • 安装与版本管理:优先使用 NodeSource 仓库或 NVM 安装与切换版本,便于获取安全修复与多版本并存;避免使用已停止维护的版本分支。
  • 全局包与权限:如需全局包,使用 npm config set prefix 指定用户可写目录,避免以 root 执行 npm -g;日常开发/部署使用普通用户。
  • 进程守护与自动恢复:使用 PM2 托管进程,开启集群模式与自动重启,结合日志轮转(如 pm2 logrotate)便于审计与排障。
  • 环境变量与机密:敏感信息(数据库密码、API Key、JWT 密钥)放入 .env 或系统的 secrets 机制,严禁硬编码;用 dotenv 加载并在 .gitignore 中排除。

三 应用层安全加固

  • 传输加密:全站启用 HTTPS,优先使用 Let’s Encrypt 证书;若由 Nginx 反向代理,配置 80→443 强制跳转与 TLS 参数。
  • 安全响应头:使用 Helmet 设置 X-Frame-Options、X-XSS-Protection、Strict-Transport-Security、Referrer-Policy 等;按需启用 CSP(内容安全策略)降低 XSS 风险。
  • 输入校验与输出编码:对所有用户输入进行严格校验与清理,服务端统一错误处理,避免泄露堆栈与敏感信息。
  • 请求限流与防滥用:对登录、注册、密码重置等接口实施速率限制(如 express-rate-limit),缓解暴力与 DoS。
  • CORS 最小化:仅允许受信任源、限定 methods/headers,凭据跨域需明确配置并限制来源。
  • 数据库安全:使用参数化查询/ORM 防止 SQL 注入;密码采用 bcrypt/scrypt 等强哈希并加随机盐存储。

四 依赖与供应链安全

  • 固定版本与锁文件:提交 package-lock.jsonyarn.lock,在 CI 中校验一致性,避免“依赖漂移”。
  • 漏洞检测与修复:定期执行 npm audit fix,结合 Snyk 做依赖树漏洞扫描与许可证合规检查。
  • 最小化依赖:移除未使用依赖,定期审视 package.jsondependencies/devDependencies,降低攻击面。
  • 私有包与镜像源:如需私有包或内网镜像,确保源可信、传输加密,并校验包签名/完整性。

五 网络与反向代理配置示例

  • UFW 防火墙(仅开放必要端口):
    • 命令:sudo ufw allow 22/tcp && sudo ufw allow 443/tcp && sudo ufw enable
  • Nginx 反向代理 + HTTPS(将 443 转发至本地 3000):
    • 安装与签发证书:sudo apt install certbot python3-certbot-nginx && sudo certbot --nginx -d yourdomain.com
    • 站点示例:
      • 80 重定向到 443
      • 443 监听启用 SSL,证书路径为 /etc/letsencrypt/live/yourdomain.com/fullchain.pemprivkey.pem
      • 反向代理到 http://127.0.0.1:3000,并设置 X-Real-IP / X-Forwarded-For / X-Forwarded-Proto 以便应用获取真实客户端信息。

0