Восстановление удаленных текстовых (электронных писем) файлов из необработанного образа диска
Я размещаю свой собственный почтовый сервер Linux для моей семьи. Вчера мой отец потерял все письма в папке "Входящие". Я до сих пор не уверен, что это из-за ужасной ошибки пользователя или скомпрометированного пароля, но здесь дело не в этом. Благодаря закону Мерфи, у меня также не было резервной копии (не стреляйте, я создал ее сразу после), и мне ужасно плохо за него. Так что мой единственный оставшийся вариант - попытаться восстановить удаленные письма из раздела.
Я немедленно сделал образ всего раздела данных ext4 на сервере с помощью "dd", и теперь у меня есть архив размером в несколько сотен ГБ, который напоминает гигантский стог сена. Мне интересно, как лучше извлечь письма из этого изображения? Я знаю, что где-то есть письма, потому что когда я набираю почту для своего отца, я получаю множество совпадений, таких как "To: dad@mydomain.com", и с опцией -C я вижу другие обычные заголовки SMTP (From, Subject, Date, Message-Id, ...).
Сначала я попробовал "в первую очередь" с пользовательским форматом, но поскольку почта не имеет фиксированного размера, результаты не были окончательными.
Я также попробовал https://pypi.org/project/mail-parser/ но мне кажется, что для выполнения того, что я хочу, потребуется исправление (ожидается, что текстовый файл содержит только почту, а не большой необработанный файл с большим количеством письма в нем).
Знаете ли вы какой-либо другой (бесплатный) инструмент или метод для восстановления файлов электронной почты из этого изображения ext4 с достаточной точностью? Как объяснено, хитрая часть заключается в том, что в отличие от изображений или других форматов, письма хранятся в виде простого текста и не содержат непосредственно размер, поэтому я думаю, что в какой-то момент этот инструмент должен быть осведомлен о rfc822, чтобы выполнить синтаксический анализ / извлечение,
1 ответ
Ну, это заняло у меня несколько часов и немного написания скриптов на Python, но наконец-то это сработало! Я был в состоянии восстановить все потерянные электронные письма моего отца.
Вся процедура, которую я и скрипты Python я использовал, находится здесь: https://github.com/piwai/mail-recovery Короче, то, что я сделал, было:
- Сделайте образ раздела с помощью dd
- Используйте прежде всего для обнаружения заголовка SMTP внутри образа dd
- Разобрать передовой файл аудита для извлечения фрагментов данных, содержащих электронные письма
- Отфильтруйте куски, чтобы сохранить только удаленный
- Снова отфильтруйте, чтобы удалить дубликаты