从原始磁盘映像恢复已删除的纯文本(电子邮件)文件

从原始磁盘映像恢复已删除的纯文本(电子邮件)文件

我为家人托管了自己的 Linux 邮件服务器。昨天,我父亲的收件箱文件夹中的所有邮件都丢失了。我仍然不确定这是由于严重的用户错误还是密码被泄露,但这不是重点。由于墨菲定律,我也没有备份(别生气,我刚创建了一个),我为他感到非常难过。所以我唯一的选择就是尝试从分区中恢复已删除的电子邮件。

我立即使用“dd”对服务器上的整个 ext4 数据分区进行了映像处理,现在我要处理的存档有几百 GB,感觉就像是大海捞针。我想知道从这个映像中提取电子邮件的最佳方法是什么?我知道邮件在某个地方,因为当我 grep 我爸爸的电子邮件时,我得到了很多匹配项,例如“收件人:[电子邮件保护]“,使用 -C 选项我可以看到其他常见的 SMTP 标头(发件人、主题、日期、消息 ID 等)。

我首先尝试使用自定义格式的“foremost”,但由于邮件没有固定大小,所以结果并不确定。

我也试过https://pypi.org/project/mail-parser/但似乎需要修补才能完成我想要的操作(它需要一个只包含邮件的文本文件,而不是一个包含大量邮件的大型原始文件)。

您是否知道任何其他(免费)工具或方法,可以从此 ext4 图像以合理的精度重建电子邮件文件?正如所解释的那样,棘手的部分是,与图像或其他格式不同,邮件以纯文本形式存储,不直接包含大小,因此我认为此工具在某些时候必须了解 rfc822 才能进行解析/提取。

答案1

好吧,我花了几个小时编写了一些 Python 脚本,但最终成功了!我能够恢复我爸爸丢失的所有电子邮件。

我使用的整个过程和 Python 脚本如下:https://github.com/piwai/mail-recovery 简而言之,我所做的是:

  • 使用 dd 获取分区的图像
  • 使用 foremost 检测 dd 镜像中的 SMTP 头
  • 解析最重要的审计文件以提取包含电子邮件的数据块
  • 过滤块以仅保留已删除的块
  • 再次过滤以删除重复项

相关内容