- 首页 >
- 问答 >
-
云计算 >
- Node.js CentOS服务器如何安全配置
Node.js CentOS服务器如何安全配置
小樊
39
2025-11-19 20:46:01
Node.js CentOS 服务器安全配置清单
一 系统与账户加固
- 保持系统与安全补丁为最新:执行sudo yum update -y,及时修补内核与基础组件漏洞。
- 强化 SSH:禁用root远程登录,使用普通用户 + sudo;启用SSH 密钥认证,禁用密码登录;按需更改默认端口并限制来源 IP。
- 最小权限运行应用:创建非 root专用用户(如nodeapp)运行 Node.js,避免以 root 直接启动进程。
- 文件与目录权限:常规文件644、目录755;对包含密钥、证书、配置等敏感文件设置更严格权限(如仅属主可读写)。
- 启用 SELinux:保持SELinux为enforcing,必要时通过策略或布尔值精细化放行,降低进程越权风险。
二 网络与端口防护
- 云侧安全组:仅开放必要端口(如22/SSH、80/HTTP、443/HTTPS、3000/应用),对管理端口(22)限制来源 IP。
- 主机防火墙 firewalld:仅放行80/443给公网访问;管理端口(如22)按需限制来源;示例:
- 放行 HTTP/HTTPS:
- sudo firewall-cmd --permanent --add-service=http
- sudo firewall-cmd --permanent --add-service=https
- sudo firewall-cmd --reload
- 仅内网或白名单访问管理端口(示例对3000):
- sudo firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.100” port protocol=“tcp” port=“3000” accept’
- sudo firewall-cmd --reload
- 反向代理与端口收敛:使用Nginx作为反向代理,Node.js 仅监听127.0.0.1:3000,对外仅暴露80/443,便于 TLS 终止、压缩、缓存与请求过滤。
三 Node.js 运行时与应用安全
- 运行方式:使用PM2托管进程,配置非 root用户、自动重启与开机自启;示例:
- pm2 start app.js --name “my-app”
- pm2 save
- pm2 startup systemd -u nodeapp --hp /home/nodeapp
- 传输加密:全站启用HTTPS/TLS;优先在Nginx终止 TLS,证书可用Let’s Encrypt/Certbot自动签发与续期。
- 安全中间件:在 Express 等框架中使用Helmet设置安全响应头(如X-Frame-Options、X-XSS-Protection、X-Content-Type-Options等),可按需启用CSP。
- 输入与注入防护:对所有用户输入进行严格校验;数据库使用参数化查询/ORM防SQL 注入;输出到页面前进行转义防XSS。
- 会话与凭据:会话数据签名与加密,优先使用Redis等集中式会话存储;JWT 密钥、数据库密码等通过环境变量或密钥管理服务注入,禁止硬编码。
- 限流与防滥用:对登录、注册、API 接口启用速率限制(如 express-rate-limit),缓解暴力破解与简单 DoS。
- 依赖安全:定期执行npm audit或Snyk检测并修复依赖漏洞,保持npm/yarn与依赖为最新稳定版本。
四 日志监控与备份恢复
- 日志与审计:应用使用结构化日志(如morgan + winston),系统侧通过journalctl -u nodeapp与集中化日志平台持续观测异常(登录失败、异常流量、5xx 激增等)。
- 进程与资源监控:使用PM2监控进程存活与资源占用,结合系统监控(如node_exporter + Prometheus/Grafana)设置告警。
- 备份与演练:对代码、配置、证书、数据库制定定期备份与异地/离线策略,定期验证恢复流程与恢复时间目标(RTO)/恢复点目标(RPO)。
五 一键落地最小配置示例
- 系统更新与用户
- sudo yum update -y
- sudo useradd -m -s /bin/bash nodeapp && sudo passwd nodeapp
- echo “nodeapp ALL=(ALL) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/nodeapp
- 防火墙放行 80/443(示例)
- sudo firewall-cmd --permanent --add-service=http
- sudo firewall-cmd --permanent --add-service=https
- sudo firewall-cmd --reload
- Node.js 与 PM2(使用 nvm)
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
- source ~/.bashrc && nvm install --lts && npm i -g pm2
- 以非 root 启动应用
- cd /home/nodeapp/app && pm2 start app.js --name “my-app” --user nodeapp
- pm2 save && pm2 startup systemd -u nodeapp --hp /home/nodeapp
- Nginx 反向代理与 TLS(示例)
- 安装:sudo yum install -y nginx
- 配置:
- server { listen 80; server_name your.domain; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
- 申请证书:sudo certbot --nginx -d your.domain
- 生效:sudo nginx -t && sudo systemctl restart nginx
- 安全加固提示
- SSH 禁用 root 与密码登录、仅密钥;云安全组仅放22/80/443;Node.js 监听127.0.0.1:3000;依赖定期npm audit;启用Helmet与速率限制。