1. 系统基础防护
/etc/sysctl.conf文件强化内核防护,例如启用地址空间布局随机化(kernel.randomize_va_space=2,防止内存攻击)、防御SYN Flood攻击(net.ipv4.tcp_syncookies=1,避免大量无效连接耗尽资源);定期执行sudo sysctl -p使配置生效。netstat -tulnp或ss -tulnp扫描开放端口,仅保留必要服务(如SSH 22、HTTP 80、HTTPS 443);关闭不必要的服务(如FTP、Telnet),减少攻击面。2. Node.js安装与版本管理
curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -),避免默认仓库的版本滞后问题;安装后用node -v、npm -v确认版本。nvm(Node Version Manager)管理多版本Node.js(如curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash),便于切换版本和回滚;定期用nvm install --lts升级到最新的长期支持(LTS)版本,修复已知漏洞。3. 依赖安全管理
npm audit(内置工具,检查package.json依赖项的已知漏洞)或Snyk(第三方工具,提供更详细的修复建议)扫描项目;执行npm outdated查看过时依赖,及时更新到安全版本。package.json中使用固定版本(如"express": "4.18.2")而非范围版本(如"^4.18.2"),并通过npm install生成package-lock.json文件,避免依赖自动升级引入新漏洞。4. 进程与权限控制
nodeuser)运行Node.js应用,避免以root身份启动(sudo useradd -m nodeuser);使用chown -R nodeuser:nodeuser /path/to/app修改应用目录所有权,降低权限滥用风险。chmod 750 /path/to/app,仅所有者可读写执行;chmod 600 /path/to/config.json,防止敏感文件被读取);避免将敏感文件(如.env)上传至版本控制系统(如Git)。5. 网络安全配置
ufw(Uncomplicated Firewall)限制访问(如sudo ufw allow 22/tcp允许SSH、sudo ufw allow 443/tcp允许HTTPS、sudo ufw enable启用防火墙);或用iptables设置更细粒度的规则(如限制单个IP的连接数)。sudo certbot --nginx -d yourdomain.com),配置Node.js应用监听443端口(通过https模块或反向代理如Nginx);强制跳转HTTP至HTTPS(如Nginx中return 301 https://$host$request_uri;),加密数据传输。6. 应用层安全防护
Helmet中间件设置HTTP安全头(如X-Frame-Options: DENY防止点击劫持、X-XSS-Protection: 1; mode=block启用XSS过滤器、Content-Security-Policy: default-src 'self'限制资源加载),减少浏览器端攻击。express-validator(如check('email').isEmail())检查格式合法性;过滤特殊字符(如XSS-filters库的xss()函数),防止SQL注入、XSS攻击。process.env.DB_PASSWORD),而非硬编码在代码中;通过dotenv库加载.env文件(需将.env添加至.gitignore),避免敏感信息泄露。7. 监控与应急响应
winston或morgan记录应用日志(如请求路径、状态码、错误信息),并通过logrotate工具轮转日志(如/etc/logrotate.d/nodeapp配置每日轮转、保留7天),避免日志文件过大;将日志发送至集中化管理平台(如ELK Stack),便于分析。fail2ban监控日志(如/var/log/auth.log),自动封禁多次登录失败的IP;制定应急响应计划(如立即隔离受攻击服务器、备份数据、分析攻击路径、修复漏洞),定期进行安全演练。