在 CentOS 上配置 Node.js 安全策略,通常不只是 Node.js 本身的配置,而是系统 + Node.js 运行环境 + 应用层的综合安全策略。下面从生产环境常见做法给你一个完整、可落地的方案。
# 创建专用用户
useradd -r -m -s /bin/bash nodeapp
目录权限示例:
chown -R nodeapp:nodeapp /opt/app
使用:
su - nodeapp
node server.js
✅ 原则:永远不要使用 root 运行 Node.js
systemctl enable firewalld
systemctl start firewalld
仅开放必要端口:
firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --reload
禁止端口扫描:
firewall-cmd --set-log-denied=all
查看状态:
getenforce
若启用,为 Node.js 配置正确上下文:
semanage port -a -t http_port_t -p tcp 3000
或使用:
setenforce 0 # 临时关闭(不推荐生产)
yum update -y
curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -
yum install -y nodejs
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 --disable-proto=delete
NODE_ENV=production
示例:
export NODE_ENV=production
或在 systemd 中:
Environment=NODE_ENV=production
/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
✅ 防止崩溃、自动重启、限制权限
npm install helmet
const helmet = require('helmet');
app.use(helmet());
| 攻击 | 防护措施 |
|---|---|
| SQL 注入 | 使用 ORM / 参数化查询 |
| XSS | 输出转义、CSP |
| CSRF | csurf / SameSite Cookie |
| 暴力破解 | rate-limit |
npm install express-rate-limit
const rateLimit = require('express-rate-limit');
app.use(rateLimit({
windowMs: 15 * 60 * 1000,
max: 100
}));
❌ 禁止:
eval(req.body.code)
npm audit
npm audit fix
进阶:
npm install -g snyk
snyk test
package-lock.json
✅ 永远提交到 Git
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);
使用 Nginx:
location / {
proxy_pass http://127.0.0.1:3000;
}
✅ 隐藏 Node.js 端口、提高安全性
chmod 750 /var/log/nodeapp
pm2 install pm2-logrotate
或:
✅ 非 root 用户运行
✅ firewalld 开启
✅ Node.js LTS
✅ systemd 管理
✅ Helmet + Rate Limit
✅ npm audit
✅ HTTPS
✅ 反向代理
✅ 日志权限控制
你可以告诉我:
我可以给你 定制化安全配置方案 或 直接可用的 systemd + nginx 配置模板。