Node.js 在 Linux 下的安全防护实践
一 运行环境与权限最小化
二 网络与反向代理加固
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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 ufw allow 22,80,443/tcp && sudo ufw enablesudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload三 应用层安全控制
const helmet = require('helmet');
app.use(helmet());
app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'"],
styleSrc: ["'self'"],
imgSrc: ["'self'","data:"],
connectSrc: ["'self'"],
fontSrc: ["'self'"],
objectSrc: ["'none'"],
mediaSrc: ["'self'"],
frameSrc: ["'none'"]
}
}));
csurf 或框架内置方案)。const rateLimit = require('express-rate-limit');
app.use('/api/', rateLimit({ windowMs: 15*60*1000, max: 100 }));
四 依赖与代码安全
五 日志、监控与备份
chown appuser:adm),必要时用 ACL 精细化授权。