温馨提示×

Node.js在CentOS上的安全设置有哪些

小樊
55
2025-08-04 10:44:10
栏目: 编程语言

在CentOS上配置Node.js应用程序的安全设置是一个多层面的过程,涉及多个方面的措施。以下是一些关键的安全设置步骤和最佳实践:

基础安全设置

  • 系统更新:定期更新系统软件包,修补已知漏洞。
    sudo yum update -y
    
  • 安装Node.js和npm:通过EPEL仓库安装。
    sudo yum install -y epel-release nodejs npm
    
  • 环境变量配置:设置Node.js和npm的环境变量,建议使用/etc/profile文件。
    export NODE_HOME=/usr/local/node
    export PATH=$NODE_HOME/bin:$PATH
    source /etc/profile
    
  • Node.js版本管理(NVM):使用NVM管理不同版本的Node.js,方便版本切换和更新。
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    source ~/.bashrc
    nvm install <node版本号>
    nvm use <node版本号>
    

防火墙配置

  • 配置firewalld:CentOS 7及更高版本使用firewalld作为默认的防火墙管理工具。
    sudo systemctl status firewalld
    sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
    sudo firewall-cmd --reload
    
  • 配置iptables(可选):如果需要更细粒度的控制,可以直接使用iptables命令来添加规则。
    iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
    service iptables save
    

HTTPS加密

  • 强制使用HTTPS协议:获取SSL证书并配置到你的应用服务器中。
    sudo npm install -g https-express
    

Node.js应用安全最佳实践

  • 数据验证:使用验证库(例如validator)对用户输入进行严格验证,防止恶意数据注入。
    const validator = require('validator');
    const email = 'foo@bar.com';
    console.log(validator.isEmail(email)); // true
    
  • 防止SQL注入:使用参数化查询或ORM框架(例如Sequelize, TypeORM)避免SQL注入攻击。
    connection.query('UPDATE users SET firstName = ? WHERE id = ?', [req.body.firstName, userId], ...);
    
  • 安全会话管理:使用签名和加密保护会话数据,并选择安全的会话存储机制(例如Redis)。
    const crypto = require('crypto');
    const secret = 'your-secret-key';
    // ... (签名和验证函数) ...
    
  • 访问控制:限制对API的访问,仅允许信任的IP地址或域名访问。
    app.use((req, res, next) => {
      const allowedIPs = ['192.168.1.100', '10.0.0.1'];
      if (!allowedIPs.includes(req.ip)) {
        return res.status(403).send('Forbidden');
      }
      next();
    });
    
  • 错误处理:妥善处理异常,避免泄露敏感信息,并将错误信息记录到日志中。
    app.use((err, req, res, next) => {
      console.error(err.stack);
      res.status(500).send('Internal Server Error');
    });
    
  • 安全中间件:使用安全框架和中间件(例如Express的helmet)增强安全性。
    const express = require('express');
    const helmet = require('helmet');
    const app = express();
    app.use(helmet());
    

操作系统安全加固

  • 修改SSH默认端口:编辑 /etc/ssh/sshd_config 文件,将默认端口从22改为其他非标准端口,例如2222。
    Port 2222
    
  • 使用SELinux:如果需要更高级别的安全加固,可以启用SELinux。
    sudo yum install policycoreutils-python-utils
    sudo setenforce 1
    

监控与日志管理

  • 监控系统日志:使用journalctl等工具监控系统日志,及时发现异常行为并采取相应措施。
  • 日志文件的安全配置:使用强密码策略,限制对日志文件的访问,使用SELinux或AppArmor。

数据备份与恢复

  • 定期备份:使用logrotate等工具定期备份日志文件,并确保备份文件的安全存储。

加密与身份验证

  • 加密静态数据:对静态敏感数据进行加密,使用LUKS或dm-crypt等解决方案提供磁盘加密。
  • 实施双因素身份验证:要求用户在获得访问权限前提供两种形式的身份验证。

0