Linux

從原始磁碟映像中恢復已刪除的純文字(電子郵件)文件

  • November 13, 2019

我正在為我的家人託管我自己的 linux 郵件伺服器。昨天,我父親失去了他收件箱文件夾中的所有郵件。我仍然不確定這是由於可怕的使用者錯誤還是密碼洩露,但這不是重點。由於墨菲定律,我也沒有後援(不要開槍,我剛剛創造了一個),我為他感到非常難過。所以我剩下的唯一選擇是嘗試從分區中恢復已刪除的電子郵件。

我立即用“dd”在伺服器上拍攝了整個 ext4 數據分區的圖像,現在我有數百 GB 的存檔要處理,感覺就像一個巨大的大海撈針。我想知道從這張圖片中提取電子郵件的最佳方法是什麼?我知道郵件在某處,因為當我 grep 查找我父親的電子郵件時,我得到了很多匹配項,例如“收件人:dad@mydomain.com”,並且使用 -C 選項我看到了其他常見的 SMTP 標頭(發件人、主題、日期, 消息 ID, …)。

我首先嘗試使用自定義格式“最重要”,但由於郵件沒有固定大小,因此結果不是決定性的。

我也試過https://pypi.org/project/mail-parser/但它似乎需要修補才能做我想要的(它需要一個只有一封郵件的文本文件,而不是一個有很多裡面的郵件)。

您是否知道任何其他(免費)工具或方法可以從該 ext4 圖像中以合理的準確度重建電子郵件文件?就像解釋的那樣,棘手的部分是,與圖像或其他格式不同,郵件以純文字形式儲存並且不直接包含大小,所以我認為這個工具在某些時候必須具備 rfc822 意識才能進行解析/提取.

好吧,我花了幾個小時和一些 Python 腳本,但它終於奏效了!我能夠恢復我父親失去的所有電子郵件。

我使用的整個過程和 Python 腳本都在這裡:https://github.com/piwai/mail-recovery 簡而言之,我所做的是:

  • 使用 dd 拍攝分區的圖像
  • 使用 foremost 檢測 dd 圖像中的 SMTP 標頭
  • 解析最重要的審計文件以提取包含電子郵件的數據塊
  • 過濾塊以僅保留已刪除的塊
  • 再次過濾以刪除重複項

引用自:https://serverfault.com/questions/942480