插件窝 干货文章 NGINX和PM2: 构建安全的VPS服务器环境和数据保护策略

NGINX和PM2: 构建安全的VPS服务器环境和数据保护策略

sudo NGINX 安全 配置 1023    来源:    2025-04-11

NGINX与PM2:构建安全的VPS服务器环境与数据保护策略

一、基础安全配置

1. VPS初始安全设置

# 更新系统
sudo apt update && sudo apt upgrade -y

# 创建新用户并设置sudo权限
adduser deploy
usermod -aG sudo deploy

# 禁用root SSH登录
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd

# 设置防火墙
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

2. SSH安全加固

# 修改SSH端口(可选)
sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config

# 启用密钥认证
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

# 限制SSH访问IP(可选)
echo "AllowUsers deploy@your_ip" | sudo tee -a /etc/ssh/sshd_config

sudo systemctl restart sshd

二、NGINX安全配置

1. 基本安全设置

# /etc/nginx/nginx.conf 主配置
server_tokens off;  # 隐藏NGINX版本信息

# 限制HTTP方法
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self' https:";

# 禁用不必要的HTTP方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 405;
}

2. SSL/TLS最佳实践

# SSL配置示例
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

3. 防止常见攻击

# 防止点击劫持
add_header X-Frame-Options "SAMEORIGIN";

# 防止MIME类型混淆
add_header X-Content-Type-Options "nosniff";

# 启用XSS保护
add_header X-XSS-Protection "1; mode=block";

# 限制文件上传大小
client_max_body_size 10M;

三、PM2安全配置

1. 安全启动Node.js应用

# 以非root用户运行
pm2 start app.js --name "my-app" --user deploy

# 设置日志轮转
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
pm2 set pm2-logrotate:compress true

# 启用集群模式(根据CPU核心数)
pm2 start app.js -i max --name "my-app"

2. PM2生态系统配置文件

// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'my-app',
    script: 'app.js',
    instances: 'max',
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    },
    env_production: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }]
};

3. 进程监控与保护

# 设置PM2开机启动
pm2 startup
pm2 save

# 监控应用状态
pm2 monit

# 设置自动重启策略
pm2 start app.js --name "my-app" --exp-backoff-restart-delay=100

四、数据保护策略

1. 定期备份方案

# 创建备份脚本 /usr/local/bin/backup.sh
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/backups"
mkdir -p $BACKUP_DIR/$DATE

# 备份数据库
mysqldump -u root -p'password' --all-databases > $BACKUP_DIR/$DATE/db.sql

# 备份应用数据
tar -czvf $BACKUP_DIR/$DATE/app.tar.gz /var/www/html

# 备份NGINX配置
tar -czvf $BACKUP_DIR/$DATE/nginx.tar.gz /etc/nginx

# 保留最近7天备份
find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;

# 设置cron定时任务
0 3 * * * /usr/local/bin/backup.sh

2. 数据库安全

# MySQL安全设置
mysql_secure_installation

# 创建应用专用用户
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

3. 文件系统权限

# 设置正确的文件权限
sudo chown -R deploy:deploy /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;

# 保护敏感文件
sudo chmod 600 /etc/nginx/ssl/private.key

五、监控与维护

1. 系统监控工具

# 安装常用监控工具
sudo apt install -y htop nmon sysstat

# 配置日志轮转
sudo apt install -y logrotate

2. 入侵检测

# 安装fail2ban防止暴力破解
sudo apt install -y fail2ban

# 配置NGINX防护
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# 启用[nginx-http-auth]和[nginx-botsearch]

3. 定期安全审计

# 检查系统漏洞
sudo apt install -y lynis
sudo lynis audit system

# 检查开放端口
sudo netstat -tulnp
sudo ss -tulnp

# 检查用户登录
last

六、应急响应计划

  1. 入侵响应流程

    • 立即隔离受影响的系统
    • 收集证据(日志、内存dump等)
    • 分析入侵途径
    • 修复漏洞
    • 恢复系统
  2. 数据恢复流程

    • 从备份恢复数据
    • 验证数据完整性
    • 重新部署应用
    • 监控系统行为
  3. 联系信息

    • 托管提供商支持
    • 安全团队联系方式
    • 相关监管部门

通过以上配置和策略,您可以构建一个相对安全的VPS环境,运行NGINX和PM2托管的应用程序。请记住,安全是一个持续的过程,需要定期更新和维护所有组件。