温馨提示×

centos如何配置nodejs安全策略

小樊
35
2026-07-08 06:45:06
栏目: 编程语言

在 CentOS 上配置 Node.js 安全策略,通常不只是 Node.js 本身的配置,而是系统 + Node.js 运行环境 + 应用层的综合安全策略。下面从生产环境常见做法给你一个完整、可落地的方案。


一、系统层安全(CentOS)

1. 使用非 root 用户运行 Node.js(最重要)

# 创建专用用户
useradd -r -m -s /bin/bash nodeapp

目录权限示例:

chown -R nodeapp:nodeapp /opt/app

使用:

su - nodeapp
node server.js

原则:永远不要使用 root 运行 Node.js


2. 配置防火墙(firewalld)

systemctl enable firewalld
systemctl start firewalld

仅开放必要端口:

firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --reload

禁止端口扫描:

firewall-cmd --set-log-denied=all

3. SELinux(可选但推荐)

查看状态:

getenforce

若启用,为 Node.js 配置正确上下文:

semanage port -a -t http_port_t -p tcp 3000

或使用:

setenforce 0   # 临时关闭(不推荐生产)

4. 系统更新

yum update -y

二、Node.js 安装与版本安全

✅ 推荐方式:使用 NodeSource 或 NVM(非 yum 默认)

NodeSource(生产推荐)

curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -
yum install -y nodejs

NVM(开发推荐)

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install 18
nvm use 18

原则:使用 LTS 版本,不用旧版本(如 12 / 14)


三、Node.js 运行安全配置

1. 禁用危险模块(生产环境)

node --disable-proto=delete

2. 设置 Node.js 运行参数

NODE_ENV=production

示例:

export NODE_ENV=production

或在 systemd 中:

Environment=NODE_ENV=production

3. 使用 systemd 管理 Node.js 服务

示例:/etc/systemd/system/nodeapp.service

[Unit]
Description=Node.js App
After=network.target

[Service]
Type=simple
User=nodeapp
WorkingDirectory=/opt/app
ExecStart=/usr/bin/node /opt/app/server.js
Restart=on-failure
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

启动:

systemctl daemon-reload
systemctl enable nodeapp
systemctl start nodeapp

✅ 防止崩溃、自动重启、限制权限


四、应用层安全(Node.js 代码)

1. 使用 Helmet(HTTP 安全头)

npm install helmet
const helmet = require('helmet');
app.use(helmet());

2. 防止常见攻击

攻击 防护措施
SQL 注入 使用 ORM / 参数化查询
XSS 输出转义、CSP
CSRF csurf / SameSite Cookie
暴力破解 rate-limit

3. 请求限流(rate limit)

npm install express-rate-limit
const rateLimit = require('express-rate-limit');

app.use(rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 100
}));

4. 不使用 eval / Function

❌ 禁止:

eval(req.body.code)

五、依赖安全(非常重要)

1. 检查已知漏洞

npm audit
npm audit fix

进阶:

npm install -g snyk
snyk test

2. 锁定依赖版本

package-lock.json

✅ 永远提交到 Git


六、网络安全

1. 使用 HTTPS(Let’s Encrypt)

yum install certbot
certbot certonly --standalone -d example.com

Node.js 使用:

https.createServer({
  key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/example.com/fullchain.pem')
}, app).listen(443);

2. 反向代理(推荐)

使用 Nginx

location / {
    proxy_pass http://127.0.0.1:3000;
}

✅ 隐藏 Node.js 端口、提高安全性


七、日志与监控

日志

  • 不要记录敏感信息
  • 使用 winston / pino
  • 日志目录权限:
chmod 750 /var/log/nodeapp

监控

pm2 install pm2-logrotate

或:

  • Prometheus + Grafana
  • Elastic Stack

八、安全加固检查清单 ✅

✅ 非 root 用户运行
✅ firewalld 开启
✅ Node.js LTS
✅ systemd 管理
✅ Helmet + Rate Limit
✅ npm audit
✅ HTTPS
✅ 反向代理
✅ 日志权限控制


九、如果你愿意,我可以进一步帮你

你可以告诉我:

  1. CentOS 版本(7 / 8 / Stream)
  2. Node.js 版本
  3. 是否对外网提供服务
  4. 是否使用 Docker

我可以给你 定制化安全配置方案直接可用的 systemd + nginx 配置模板

0