1. 系统与Node.js基础安全配置
sudo apt update && sudo apt upgrade -y,确保Linux内核、Node.js及依赖库修补已知漏洞。curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -),避免系统默认仓库版本滞后;或用nvm(Node Version Manager)实现多版本切换(curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash),避免权限问题。nodeapp)及同组(sudo groupadd nodeapp; sudo useradd -g nodeapp nodeapp -s /bin/false),用该用户启动Node.js应用(pm2 start app.js --uid nodeapp --gid nodeapp),禁止直接使用root运行。2. 网络与访问控制
ufw(Uncomplicated Firewall)限制入站流量,仅开放必要端口(如SSH的22端口、应用端口如3000):sudo ufw allow 22; sudo ufw allow 3000; sudo ufw enable。sudo apt install certbot python3-certbot-nginx; sudo certbot --nginx -d yourdomain.com),配置Node.js应用监听443端口,强制HTTPS跳转(如Express中app.use((req, res, next) => { if (!req.secure) res.redirect('https://' + req.headers.host + req.url); else next(); }))。app.use((req, res, next) => { const allowedIPs = ['192.168.1.100']; if (!allowedIPs.includes(req.ip)) res.status(403).send('Forbidden'); else next(); })),或通过防火墙规则(sudo ufw allow from 192.168.1.100 to any port 3000)限制。3. 依赖与代码安全
npm audit扫描项目依赖漏洞,npm outdated检查过时包,及时运行npm update更新;将package.json中的依赖版本固定(如"express": "^4.18.2"),避免意外升级引入风险。helmet设置安全HTTP头(如Strict-Transport-Security强制HTTPS、X-Frame-Options防点击劫持),express-rate-limit限制请求频率(如const limiter = rateLimit({ windowMs: 15*60*1000, max: 100 }); app.use(limiter))防止DDoS/暴力破解,cors配置跨域策略(如const corsOptions = { origin: ['https://example.com'], methods: ['GET', 'POST'] }; app.use(cors(corsOptions)))。express-validator验证用户输入(如check('email').isEmail().normalizeEmail()),DOMPurify过滤XSS内容(如const cleanHtml = DOMPurify.sanitize(dirtyHtml)),避免SQL注入(如使用参数化查询db.query('SELECT * FROM users WHERE id = ?', [userId]))。eval()、new Function()等动态代码执行函数,防止远程代码执行(RCE)攻击。4. 日志与监控
/var/log/nodeapp/),创建专用用户/组(nodeapp),设置目录权限sudo chown -R nodeapp:nodeapp /var/log/nodeapp; sudo chmod 750 /var/log/nodeapp;应用日志文件创建时指定权限(如fs.createWriteStream('/var/log/nodeapp/app.log', { mode: 0o640 }))。pm2管理应用并记录日志(pm2 start app.js --name myapp; pm2 logs myapp),或使用winston/bunyan等日志库实现结构化日志(如logger.info('User logged in', { userId: 123 }))。sudo tail -f /var/log/syslog)和应用日志,使用New Relic/Datadog等工具监控应用性能与异常(如请求延迟、错误率),设置邮件/短信告警。5. 进程与权限隔离
sudo aa-status),为Node.js应用创建自定义配置文件(sudo aa-genprof /usr/bin/node),限制其对文件系统、网络的访问(如禁止写入/etc/目录)。pm2设置进程资源限制(如pm2 start app.js --max-memory-restart 512M),防止内存泄漏导致系统崩溃;避免使用root用户运行应用,降低权限提升风险。