You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Rails应用PostgreSQL数据库遭恶意删除求助

问题分析与修复方案

一、紧急止损

  • 立刻修改PostgreSQL的postgres用户密码,用16位以上的高强度随机密码(混大小写、数字、特殊字符),绝对不能用弱密码或默认值。
  • 检查Docker-Compose里的PostgreSQL端口映射:如果是5432:5432直接暴露公网,马上改成127.0.0.1:5432:5432(仅VPS本地可访问);如果必须外部连接,用ufw防火墙只放行指定IP访问5432端口。
  • 重启PostgreSQL容器,恢复被删的数据库(有备份直接用备份,没有就重新初始化后同步数据)。

二、堵SQL注入漏洞

  • 全面检查Rails应用的数据库查询:所有SQL必须用Rails参数化查询(比如User.where("id = ?", params[:id])),禁止直接拼接用户输入到SQL语句里。
  • 排查代码里的exec/execute这类直接执行SQL的方法,这些是注入重灾区,对传入参数必须做严格的格式校验和过滤。
  • 翻Rails日志找注入请求的接口路径,给这些接口加强校验:比如限制输入长度、格式,用Rails的强参数机制过滤非法参数。
  • 升级Rails到最新稳定版,修复已知的安全漏洞;确保config/application.rb里开启了ActiveRecord的SQL防护配置。

三、防密码爆破

  • 禁止postgres用户远程连接:修改PostgreSQL的pg_hba.conf,把host all postgres 0.0.0.0/0 md5改成host all postgres 127.0.0.1/32 md5,只允许本地访问;Docker环境下用容器名称访问DB就行,完全不需要暴露公网。
  • 限制PostgreSQL连接数:在postgresql.conf里调小max_connections到合理值,同时在pg_hba.conf里加connection limit=10(根据业务调整),限制单IP的并发连接数。
  • 开启详细日志:在postgresql.conf设置log_connections = on、log_disconnections = on、log_hostname = on,方便追踪爆破来源。
  • 用fail2ban监控PostgreSQL日志,自动封禁多次爆破的IP。

四、Docker环境加固

  • 检查Docker-Compose配置:PostgreSQL容器不要挂载不必要的宿主机目录,必须挂载的用只读模式。
  • 不要用root用户运行PostgreSQL容器:在Dockerfile里指定非root用户启动,降低权限泄露风险。
  • 拉取最新的官方镜像:更新PostgreSQL和Ruby镜像到最新稳定版,修复镜像里的已知漏洞。
  • 用Docker自定义网络:不要用默认bridge网络,创建专属网络让Rails容器和DB容器互通,限制其他容器的访问权限。

五、溯源与后续防护

  • 从PostgreSQL日志里提取恶意IP,在VPS防火墙里永久封禁。
  • 分析注入的SQL语句,检查是否有数据泄露、恶意用户创建等其他操作,针对性排查数据安全。
  • 用bundle audit检查Rails依赖的Gem是否有安全漏洞,及时更新修复。

内容的提问来源于stack exchange,提问作者Marat Karimov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:58:13