Я работаю над проблемой, которую вижу с сервером сканирования электронной почты (MailScanner, Spamassassin, Postfix и т. Д.), И с подменой заголовка From. К сожалению, некоторые из версий этих компонентов старые, поэтому это может быть ошибка в одном или нескольких из них. Планируются обновления, я просто смотрю, подходит ли временное решение, или это проблема конфигурации / правил, которую необходимо перенести в обновленную среду.
Обычно я вижу сообщения, содержащие несколько адресов в заголовке From. Это само по себе, кажется, соответствует RFC, с определенными условиями, которые обычно не выполняются, насколько я могу судить, однако почти каждый пример, который я могу найти, что наша среда была зарегистрирована, это поддельное / вредоносное сообщение.
Вот несколько примеров, все из разных сообщений, с именами, измененными для защиты (возможно) невиновных:
From: "confirm@amazon.com" <confirm@amazon.com> <bad@hacker.man>
From: John Doe <jdoe@internet.com> <spoof@ing.mail>
From: "Trusted Third Party Employee" <trusted.employee@thirdparty.org> <spammer@foo.vn>
Почтовые клиенты, такие как Outlook, похоже, отображают только первый адрес. MailScanner / SpamAssassin использует последний.
По сути, регулярное выражение, подобное следующему, могло бы уловить их (будь то в header_check в Postfix или в правиле в Spamassassin):
^From: .*?<[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}>.*<[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}>
Я уверен, что это регулярное выражение ужасно, и, вероятно, есть более элегантные способы сопоставить примеры, подобные приведенным выше. ;)
При необходимости я могу поделиться конкретными фрагментами конфигурации.
Есть предположения?
Насколько я могу судить, все эти заголовки From нарушают RFC. В заголовке From может быть несколько адресов, но тогда они должны быть разделены запятыми.
Видеть:
Таким образом, почтовый сервер должен отклонять это письмо (imho). В противном случае вы можете добавить проверку заголовка для проверки формата RFC и отклонить электронное письмо в противном случае. Но это регулярное выражение было бы сложным и уродливым, потому что RFC позволяет почти все в отображаемом имени.
Например. это было бы законно
From: "confirm@amazon.com <confirm@amazon.com>" <bad@hacker.man>
На практике я ни разу в жизни не получал действительного электронного письма с несколькими адресами отправителя. Также я считаю все в отображаемом имени мусором, потому что это полностью на усмотрение отправителя. Известные адреса электронной почты все равно находятся в моей адресной книге (поэтому они отображаются в моем почтовом клиенте), а для всех остальных я могу отказаться от отображаемого имени, чтобы предотвратить фишинг.
Другими словами, если SpamAssassin использует последний действующий адрес электронной почты в строке заголовка как НАСТОЯЩИЙ, вы можете сделать то же самое и удалить все остальное:
/^From:.*[[:space:]]+<?([a-zA-Z0-9._?=#$|'*%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,63})>?[[:space:]]*$/ REPLACE From: ${1}
Примечание: шаблон для соответствия допустимым форматам адресов электронной почты формально неверен, но прагматичен. Смотрите также https://www.regular-expressions.info/email.html для обсуждения регулярных выражений формата адресов электронной почты.
В настоящее время я борюсь со спамом такого рода, и в дополнение к отличным ответ из Deeepdigger в настоящее время у меня есть это правило в моем Spamassassin.
describe LOCAL_TWO_FROM_EMAILS The From has two emails, probably email spoofing
header LOCAL_TWO_FROM_EMAILS From =~ /<.*\@.*>\s+<.*\@.*>/i
score LOCAL_TWO_FROM_EMAILS 9.0 # Set this value at your discretion
Часть регулярных выражений нуждается в улучшении, но это правило помогло мне остановить подделку большей части писем с помощью этого искаженного заголовка.