CentOS下Node.js安全加固清单
一 系统与账户安全
- 保持系统与软件包为最新,及时修补漏洞(如执行系统更新)。
- 强化账户与口令:设置复杂度与有效期,禁用不必要的超级用户,清理默认账户。
- 保护关键文件:对**/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow**设置不可更改属性(如 chattr +i),降低被篡改风险。
- SSH安全:更改默认端口、禁用root登录、仅允许密钥认证。
- 防火墙:启用并配置firewalld/iptables,仅开放必要端口(如22/80/443)。
- 登录安全:设置root自动注销(TMOUT)、限制su使用范围、禁用Ctrl+Alt+Del重启、精简登录终端(securetty)。
- 资源与防护:通过 PAM/资源限制防止DoS与IP欺骗;必要时部署IDS/IPS(如 Snort/Suricata)进行流量与主机行为监测。
二 Node.js运行时与进程隔离
- 使用NVM或NodeSource安装与切换版本,便于快速升级与安全维护。
- 以非root用户运行应用,遵循最小权限原则;使用pm2等进程管理工具托管进程,便于守护与日志采集。
- 启用HTTPS/TLS加密传输,优先通过Nginx反向代理终止 TLS、提供静态资源与负载均衡,减少直接暴露 Node 进程。
- 设置安全响应头:使用Helmet启用HSTS、X-Content-Type-Options、X-Frame-Options、CSP等。
- 请求治理:启用express-rate-limit进行速率限制;限制请求体大小(如 json/urlencoded 的 limit)。
- 依赖安全:定期执行npm audit或Snyk检测与修复;固定依赖版本,优先使用npm ci保证一致性,降低供应链风险。
- 输入与输出:严格校验用户输入,防范SQL注入/XSS;生产环境避免泄露堆栈与敏感信息。
- 密码与比较:口令使用bcrypt/scrypt等强哈希存储;敏感值比较使用crypto.timingSafeEqual避免时序攻击。
- 可选加固:在合适场景启用 Node 的**–secure-heap**降低敏感内存泄露风险。
三 网络与反向代理配置
- 仅开放必要端口(如22/80/443),对管理口与业务口进行分区分域;对外仅暴露Nginx/TLS端口。
- 使用Nginx反向代理与静态资源服务,隐藏后端 Node 端口与实现负载均衡。
- 配置Certbot自动申请与续期Let’s Encrypt证书,启用HTTP→HTTPS重定向与HSTS。
- 精细化CORS:仅允许受信源、方法与头;结合rate-limit与WAF(如 ModSecurity)缓解滥用与注入。
- 边界防护:在云侧或边界启用IDS/IPS与日志审计,联动告警。
四 日志监控与备份恢复
- 日志体系:应用侧使用morgan等记录访问日志;系统侧使用rsyslog/systemd-journald集中收集,配置logrotate防止磁盘占满。
- 监控告警:对CPU/内存/连接数/错误率/延迟设置阈值告警;结合 APM/指标平台进行异常检测。
- 备份策略:对代码、配置与数据库实施自动化、加密、异地备份,定期演练恢复流程,防范勒索与误删。
五 快速检查清单
| 领域 |
关键动作 |
工具/配置 |
| 系统与账户 |
更新系统、禁用 root 登录、密钥认证、口令策略、保护关键文件 |
firewalld/iptables、/etc/login.defs、chattr、TMOUT、/etc/pam.d/su |
| Node 运行时 |
非 root 运行、NVM/NodeSource、pm2、Helmet、rate-limit、HTTPS |
helmet、express-rate-limit、Nginx+Certbot |
| 依赖与代码 |
npm audit/Snyk、npm ci、输入校验、bcrypt、timingSafeEqual |
npm、Snyk |
| 网络与代理 |
仅开放 22/80/443、Nginx 反向代理、CORS 精细化 |
Nginx、firewalld |
| 日志与备份 |
访问/系统日志集中、logrotate、监控告警、异地备份演练 |
rsyslog/journald、logrotate |
以上措施按“系统→运行时→网络→运维”分层实施,可在CentOS上显著提升Node.js应用的安全性与可运维性。