1. 系统基础防护
/etc/sysctl.conf文件强化内核防护,启用地址空间布局随机化(kernel.randomize_va_space=2,防止内存攻击)、防御SYN Flood攻击(net.ipv4.tcp_syncookies=1,避免大量半连接耗尽资源),并通过sysctl -p使配置生效。netstat -tulnp或ss -tulnp扫描开放端口,仅保留必要服务(如SSH 22、HTTP 80、HTTPS 443);关闭不必要的系统服务(如Telnet、FTP),减少攻击面。2. Node.js应用安全加固
npm audit定期检查项目依赖中的已知漏洞,npm outdated查看过时依赖并及时更新;引入Snyk等第三方工具监控依赖安全,修复高危漏洞(如npm audit fix --force修复可自动修复的问题)。eval()、new Function()等动态执行代码的方法(易引发远程代码执行);严格验证和过滤用户输入(如使用express-validator校验表单数据、DOMPurify净化HTML内容),防止SQL注入、XSS攻击;对输出数据进行转义(如使用ejs模板引擎的<%- %>语法自动转义),避免恶意脚本执行。nodeuser),通过chown -R nodeuser:nodeuser /app修改应用目录权限,使用sudo -u nodeuser node app.js启动应用,限制进程对系统资源的访问权限。3. 网络安全配置
ufw(Uncomplicated Firewall)配置简单防火墙规则,仅允许必要端口对外开放(如sudo ufw allow 22/tcp允许SSH登录、sudo ufw allow 80/tcp允许HTTP、sudo ufw allow 443/tcp允许HTTPS),然后启用防火墙(sudo ufw enable);若需更细粒度控制,可使用iptables设置规则(如限制单个IP的连接数)。Let’s Encrypt获取免费SSL证书(sudo certbot certonly --standalone -d yourdomain.com),配置Nginx或Apache反向代理,将HTTP请求转发至Node.js的HTTPS端口(443);或在Node.js中直接使用https模块(需指定证书路径),强制客户端通过HTTPS访问。cors中间件配置跨域资源共享(如app.use(cors({ origin: 'https://yourdomain.com', methods: ['GET', 'POST'] }))),限制允许的源、方法和头部;使用csurf中间件防范CSRF攻击(如app.use(csrf({ cookie: true }))),要求客户端提交CSRF Token。4. 敏感信息管理
dotenv库加载.env文件中的环境变量(如DB_PASSWORD=yourpassword),在代码中通过process.env.DB_PASSWORD读取敏感信息,避免将密码、API密钥等硬编码在代码中;将.env文件添加到.gitignore,防止误提交至版本控制系统。bcrypt库进行哈希加密(如const hash = await bcrypt.hash(password, 10)),验证时使用bcrypt.compare比较哈希值;敏感数据(如信用卡信息)可使用AES-256加密(如crypto模块),确保即使数据泄露也无法直接读取。5. 监控与日志管理
morgan中间件记录HTTP请求日志(如app.use(morgan('combined'))),或使用winston库记录结构化日志(如logger.info('User logged in'));记录关键操作(如登录、支付、权限变更),便于后续审计。logrotate工具配置日志轮转(如/etc/logrotate.d/nodeapp中设置/var/log/nodeapp/*.log { daily rotate 7 compress missingok }),每天轮转日志文件,保留7天压缩日志,避免日志文件过大占用磁盘空间。pm2进程管理工具监控应用状态(如pm2 monit查看CPU、内存使用率),设置告警规则(如内存超过80%时发送邮件);使用fail2ban监控SSH登录日志,自动封禁多次尝试失败的IP地址。6. 进程与权限控制
pm2启动应用(如pm2 start app.js --name "myapp"),实现进程守护(崩溃后自动重启)、负载均衡(多实例运行)、日志管理(集中存储);通过pm2 save保存进程列表,pm2 startup设置开机自启。AppArmor或SELinux限制Node.js进程的权限(如AppArmor配置文件/etc/apparmor.d/usr.bin.node中限制进程只能访问/app目录和/tmp目录),防止进程越权访问系统文件;避免将应用目录设置为777权限,使用chmod 750限制访问。