Linux服务器Node.js如何进行安全配置
小樊
31
2025-12-10 12:19:54
Linux服务器上Node.js安全配置清单
一 基础运行环境与权限
- 使用nvm或NodeSource安装与切换版本,保持版本可控与可回滚;避免使用系统自带旧版本。示例:
nvm install 18 && nvm use 18 或按发行版导入 NodeSource 仓库后安装。
- 以非 root专用用户运行进程,最小化权限;如需对外仅暴露必要端口,例如3000。
- 进程守护建议使用systemd并配置最小权限、工作目录、日志与重启策略,避免以 root 直接启动应用。
- 示例(创建低权限用户):
adduser --disabled-login nodejsUser,服务单元文件中设置 User=nodejsUser。
二 传输加密与反向代理
- 全站启用HTTPS,可使用Let’s Encrypt免费证书与自动化工具(如 certbot)获取与续期;将 HTTP 自动重定向到 HTTPS。
- 推荐用Nginx/Apache做反向代理与 TLS 终止,同时设置安全响应头并隐藏后端细节。
- 示例 Nginx 片段:
- 监听 443 ssl;配置
ssl_certificate 与 ssl_certificate_key
proxy_pass http://127.0.0.1:3000;
- 设置头部:
Host $host; X-Real-IP $remote_addr; X-Forwarded-For $proxy_add_x_forwarded_for; X-Forwarded-Proto $scheme;
- 在 Node.js 中识别代理协议:
app.enable('trust proxy'),并对安全 Cookie 设置 Secure 属性。
三 应用层安全控制
- 启用Helmet设置安全响应头(如 X-Frame-Options、X-XSS-Protection、Referrer-Policy 等),并按需配置 CSP(内容安全策略)。
- 严格CORS:仅允许受信源、必要方法与头;避免通配
Access-Control-Allow-Origin: *。
- 输入校验与输出编码:使用如express-validator定义规则,防范SQL 注入、XSS、命令注入等。
- 安全会话与 Cookie:使用强随机secret,设置
HttpOnly、Secure、SameSite=Strict/Lax,并自定义会话 Cookie 名称,避免泄露技术栈。
- 限流与防滥用:对登录、注册、API 关键路径启用express-rate-limit等限流中间件,缓解暴力与 DoS。
- 请求体大小限制:如
express.json({ limit: '50mb' }),防止超大请求导致资源耗尽。
- 错误处理:生产环境返回通用错误信息,详细堆栈写入日志,避免信息泄露。
四 依赖与代码安全
- 持续更新Node.js与依赖,定期执行
npm audit fix,并在 CI/CD 中集成Snyk进行依赖漏洞监测与修复。
- 锁定依赖版本,使用package-lock.json确保可重复构建与一致性。
- 使用ESLint配合安全插件(如
eslint-plugin-security)在开发阶段发现常见安全问题。
- 避免危险 API(如
eval())、减少全局变量、审查第三方库来源与维护状况。
五 系统与网络安全加固
- 防火墙与端口:仅开放必要端口(如 22/SSH、80/HTTP、443/HTTPS)。
- Ubuntu/Debian:
ufw allow 22,80,443/tcp && ufw enable
- CentOS/RHEL:
firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd --reload
- SSH 安全:禁用root 登录、使用密钥认证、可修改默认端口、设置空闲超时与登录失败限制。
- 系统与自动更新:保持系统与安全补丁最新;Ubuntu 可启用
unattended-upgrades 做自动安全更新。
- 强制访问控制:启用 SELinux 或 AppArmor,为 Node.js 进程定义最小权限与安全策略。
- 监控与日志:记录访问与错误日志,结合 APM/告警工具监测异常行为;定期备份关键数据与配置。