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.json 或 yarn.lock,在 CI 中校验一致性,避免“依赖漂移”。
- 漏洞检测与修复:定期执行 npm audit fix,结合 Snyk 做依赖树漏洞扫描与许可证合规检查。
- 最小化依赖:移除未使用依赖,定期审视 package.json 的 dependencies/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.pem 与 privkey.pem;
- 反向代理到 http://127.0.0.1:3000,并设置 X-Real-IP / X-Forwarded-For / X-Forwarded-Proto 以便应用获取真实客户端信息。