温馨提示×

Node.js 在 CentOS 上如何实现安全防护

小樊
45
2025-12-09 13:10:25
栏目: 编程语言

Node.js 在 CentOS 的安全防护实践

一 系统与账户加固

  • 保持系统与 Node.js 为最新稳定版本,及时修补漏洞;使用 NVM 管理版本便于快速升级与回滚。
  • 强化账户与登录安全:禁用不必要的超级用户,设置强密码策略(长度≥10位,包含大小写字母、数字与特殊字符),为 root 设置自动注销(如在 /etc/profile 设置 TMOUT=300),并通过 /etc/pam.d/su 限制可切换到 root 的用户组。
  • 保护关键系统文件(如 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow),必要时使用 chattr +i 设为不可修改,降低被篡改风险。
  • 配置 firewalld 仅开放必要端口(如 22/SSH、80/HTTP、443/HTTPS),避免使用密码登录 SSH,优先采用密钥认证并禁用 root 直连。

二 网络与反向代理

  • 使用 Nginx 作为反向代理与静态资源服务,隐藏应用真实端口与实现 TLS 终止;示例关键配置:
    • 将动态请求代理到本地 3000 端口,并正确设置 Host/X-Real-IP/X-Forwarded-For/X-Forwarded-Proto 头,便于应用获取客户端真实信息。
    • 启用 HTTP/2 提升性能与安全;为静态资源设置缓存与压缩(如 Gzip)。
  • 仅暴露 80/443,将应用端口(如 3000)绑定到 127.0.0.1,减少攻击面。
  • 在云平台同时收紧安全组规则,仅允许可信来源 IP 访问管理端口。

三 应用层安全控制

  • 全站启用 HTTPS:使用 Let’s Encrypt/Certbot 获取免费证书并自动续期,确保传输加密与证书有效性。
  • 使用 Helmet 设置安全响应头(如 X-Frame-Options、X-XSS-Protection、Strict-Transport-Security 等),降低常见 Web 攻击风险。
  • 严格 CORS 策略:仅允许受信源、必要方法与头部,避免过宽的跨域配置。
  • 输入校验与输出编码:对所有用户输入进行校验与清理,防范 SQL 注入XSS;使用 参数化查询/ORM 防止拼接 SQL。
  • 实施 速率限制(如 express-rate-limit)与请求体大小限制,缓解暴力请求与 DDoS。
  • 错误处理:生产环境不暴露堆栈与敏感信息,统一记录到日志,向用户返回通用错误提示。
  • 密码存储:使用 bcrypt 等强哈希算法加盐存储,禁止明文或弱哈希。

四 进程运行与依赖管理

  • 使用 PM2 管理进程:支持守护、集群模式、自动重启、日志轮转与监控,提升稳定性与可运维性。
  • 非 root 用户运行应用,遵循最小权限原则;必要时通过 sudo 授权特定操作。
  • 依赖安全:定期执行 npm audit / yarn audit 并修复高危漏洞;锁定依赖版本(如 package-lock.json / yarn.lock),在 CI 中加入安全门禁。
  • 环境变量管理:使用 dotenv 或系统环境变量管理密钥与配置,避免硬编码;不同环境使用独立配置。

五 监控日志与合规审计

  • 记录关键访问与错误日志,使用 morgan 等中间件输出结构化日志;集中到 ELK 或兼容方案进行检索与告警。
  • 监控与告警:结合 Prometheus + Grafana 监控进程与系统指标(CPU、内存、事件循环延迟、请求耗时等),设置阈值告警。
  • 定期审查与演练:定期更新系统与依赖、复核防火墙与安全组策略、开展漏洞扫描与应急预案演练,形成闭环改进。

0