Node.js在Linux上的安全设置
导读:1. 系统与Node.js基础安全配置 更新系统与软件包:定期运行sudo apt update && sudo apt upgrade -y,确保Linux内核、Node.js及依赖库修补已知漏洞。 使用NodeSour...
1. 系统与Node.js基础安全配置
- 更新系统与软件包:定期运行
sudo apt update & & sudo apt upgrade -y
,确保Linux内核、Node.js及依赖库修补已知漏洞。 - 使用NodeSource安装/管理Node.js:通过NodeSource仓库安装特定版本(如
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
),避免权限问题。 - 以非root用户运行:创建专用用户(如
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
。 - 启用HTTPS:通过Let’s Encrypt获取免费SSL证书(
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(); } )
)。 - 限制访问IP:在应用层实现IP白名单(如Express中间件
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. 进程与权限隔离
- 使用AppArmor限制进程权限:检查AppArmor状态(
sudo aa-status
),为Node.js应用创建自定义配置文件(sudo aa-genprof /usr/bin/node
),限制其对文件系统、网络的访问(如禁止写入/etc/
目录)。 - 限制资源使用:用
pm2
设置进程资源限制(如pm2 start app.js --max-memory-restart 512M
),防止内存泄漏导致系统崩溃;避免使用root
用户运行应用,降低权限提升风险。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Node.js在Linux上的安全设置
本文地址: https://pptw.com/jishu/727644.html