首页主机资讯CentOS系统中Node.js的安全设置

CentOS系统中Node.js的安全设置

时间2025-10-13 22:41:03发布访客分类主机资讯浏览569
导读:CentOS系统中Node.js的安全设置指南 一、系统级基础安全加固 保持系统与软件包最新 定期执行sudo yum update -y更新CentOS系统及所有软件包,修复已知安全漏洞,降低被攻击风险。 禁用root远程登录 编辑/e...

CentOS系统中Node.js的安全设置指南

一、系统级基础安全加固

  1. 保持系统与软件包最新
    定期执行sudo yum update -y更新CentOS系统及所有软件包,修复已知安全漏洞,降低被攻击风险。
  2. 禁用root远程登录
    编辑/etc/ssh/sshd_config文件,将PermitRootLogin设置为no,禁止root用户通过SSH远程登录;创建普通用户(如myuser)并配置密码,通过sudo执行管理任务,减少潜在攻击面。
  3. 配置SSH登录限制
    /etc/ssh/sshd_config中设置AllowUsers(如AllowUsers myuser)限制允许登录的用户;启用公钥认证(PubkeyAuthentication yes)并禁用密码认证(PasswordAuthentication no);修改SSH默认端口(如Port 2222),降低暴力破解概率;执行sudo systemctl restart sshd使配置生效。
  4. 使用防火墙限制网络流量
    启用firewalldsudo systemctl start firewalld & & sudo systemctl enable firewalld),仅允许必要端口(如SSH端口2222、Node.js应用端口3000)通过:
    sudo firewall-cmd --permanent --zone=public --add-port=2222/tcp
    sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
    sudo firewall-cmd --reload
    
    或使用iptables配置类似规则并保存。
  5. 启用SELinux(可选但推荐)
    若系统未启用SELinux,可通过sudo yum install policycoreutils-python-utils安装工具,执行sudo setenforce 1开启强制模式,限制进程权限,提升系统安全性。

二、Node.js应用层安全配置

  1. 避免使用root运行应用
    始终以普通用户(如myuser)启动Node.js应用(如npm startnode app.js),避免应用以root权限运行导致的安全风险(如进程被入侵后控制整个系统)。
  2. 管理依赖项安全
    • 定期运行npm audit检查项目依赖项中的已知漏洞,按提示修复;
    • 使用npm outdated查看过时的依赖,升级到最新稳定版本;
    • package.json中固定依赖版本(如"express": "4.17.1"),避免意外升级引入漏洞。
  3. 配置安全HTTP头
    使用helmet中间件设置安全HTTP头,防范XSS、点击劫持等常见Web攻击。示例代码:
    const express = require('express');
        
    const helmet = require('helmet');
        
    const app = express();
        
    app.use(helmet());
         // 默认开启多个安全头(如Content-Security-Policy、X-Frame-Options)
    
  4. 实施速率限制
    使用express-rate-limit中间件限制请求速率,防止DDoS攻击或暴力破解。示例配置:
    const rateLimit = require('express-rate-limit');
    
    const limiter = rateLimit({
    
      windowMs: 15 * 60 * 1000, // 15分钟
      max: 100 // 每个IP限制100次请求
    }
        );
        
    app.use(limiter);
         // 应用于所有请求
    
  5. 验证用户输入
    使用validator等库对所有用户输入(如表单、URL参数)进行验证,防止SQL注入、XSS攻击。示例代码:
    const validator = require('validator');
        
    const email = 'foo@bar.com';
    
    if (!validator.isEmail(email)) {
        
      throw new Error('Invalid email address');
    
    }
        
    const userInput = '<
        script>
        alert("xss")<
        /script>
        ';
        
    const safeInput = validator.escape(userInput);
         // 转义HTML特殊字符
    
  6. 使用HTTPS加密通信
    • 生成SSL证书(可使用Let’s Encrypt的certbot工具):
      sudo yum install certbot python2-certbot-nginx
      sudo certbot --nginx -d yourdomain.com
      
    • 配置Node.js应用监听443端口并使用证书(或通过Nginx反向代理处理HTTPS);
    • 强制所有HTTP请求重定向到HTTPS,确保数据传输加密。
  7. 安全会话管理
    • 使用express-session中间件管理会话,设置secret(用于签名会话ID)、resave(是否强制保存未修改的会话)、saveUninitialized(是否保存未初始化的会话)选项;
    • 将会话数据存储在Redis等外部存储中(而非内存),避免应用重启时会话丢失。示例配置:
      const session = require('express-session');
          
      const RedisStore = require('connect-redis')(session);
      
      app.use(session({
      
        secret: 'your-secret-key',
        resave: false,
        saveUninitialized: false,
        store: new RedisStore({
       host: 'localhost', port: 6379 }
      )
      }
          ));
          
      
  8. 错误处理与日志记录
    • 捕获应用中的未处理异常(如uncaughtException)和未处理的Promise rejection(如unhandledRejection),记录错误日志(如使用winstonmorgan),避免向用户泄露敏感信息(如数据库密码、服务器路径)。示例代码:
      process.on('uncaughtException', (err) =>
       {
          
        console.error('Uncaught Exception:', err.stack);
          
        // 发送错误日志到监控系统(如ELK、Sentry)
        process.exit(1);
       // 强制退出进程,防止应用处于不稳定状态
      }
          );
          
      process.on('unhandledRejection', (reason, promise) =>
       {
          
        console.error('Unhandled Rejection at:', promise, 'reason:', reason);
      
      }
          );
          
      

三、额外安全实践

  1. 使用NVM管理Node.js版本
    通过nvm(Node Version Manager)安装和管理Node.js版本,方便切换版本并获取最新的安全补丁。安装命令:
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    source ~/.bashrc
    nvm install 18.17.1 // 安装指定版本
    nvm use 18.17.1 // 切换到该版本
    
  2. 配置环境变量管理敏感信息
    使用dotenv库加载.env文件中的环境变量,将敏感信息(如数据库密码、API密钥)存储在环境变量中,而非代码中。示例步骤:
    • 安装dotenvnpm install dotenv
    • 创建.env文件:DB_PASSWORD=your_password
    • 在代码中加载:require('dotenv').config(); const dbPassword = process.env.DB_PASSWORD;
  3. 监控与日志分析
    使用morgan记录HTTP请求日志(如app.use(morgan('combined'))),结合journalctlsudo journalctl -u node-app -f)监控应用日志,及时发现异常行为(如大量404请求、异常POST请求)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: CentOS系统中Node.js的安全设置
本文地址: https://pptw.com/jishu/725214.html
Node.js在CentOS中的日志管理 CentOS服务器上运行Node.js的步骤

游客 回复需填写必要信息