Вопрос или проблема
Я пытаюсь настроить Postfix или SpamAssassin так, чтобы отклонять или помечать как спам любое электронное письмо, где адрес MAIL FROM
(адрес отправителя в конверте) отличается от адреса From:
в теле сообщения (DATA).
Я знаю, что у SpamAssassin есть правило под названием HEADER_FROM_DIFFERENT_DOMAINS
, но оно только сравнивает доменные части заголовка From:
. Оно не работает, когда изменяется часть user
, а домен остается тем же (например, [email protected]
отправляет письмо как [email protected]
).
В Postfix службы политики не имеют доступа к заголовку From:
, так как они работают только с SMTP-транзакциями, такими как MAIL FROM
и RCPT TO
. Это мешает мне использовать проверки политики Postfix для сравнения отправителя в конверте с заголовком From:
внутри данных сообщения.
Есть ли способ написать пользовательское правило в SpamAssassin, которое сравнивает полный MAIL FROM
(адрес отправителя в конверте) с заголовком From:
? Или использовать Milter Postfix или другой метод для достижения этого?
Также было бы неплохо предотвратить отправку такого рода электронных писем от моих собственных пользователей.
Ответ или решение
Отказ или пометка электронной почты, когда адрес MAIL FROM
(отправитель по конверту) отличается от заголовка From:
в Postfix или SpamAssassin, — это задача, требующая внимательного подхода и понимания работы этих систем. Ниже представлен пошаговый механизм, который поможет обеспечить необходимую фильтрацию.
Шаг 1: Использование SpamAssassin для проверки заголовков
Хотя стандартное правило HEADER_FROM_DIFFERENT_DOMAINS
в SpamAssassin проверяет только доменные части адресов, можно создать собственное правило для более точного сравнения. Вот как это сделать:
-
Создание кастомного правила в SpamAssassin:
Вам потребуется добавить свой собственный файл правил, например,local.cf
, если его еще нет:sudo nano /etc/mail/spamassassin/local.cf
-
Добавление кода для сравнения заголовков:
Используйте следующий код для создания пользовательского правила. Это правило будет извлекать значениеMAIL FROM
и заголовкаFrom:
и сравнивать их. Пример правила можно записать так:header MYMAIL_FROM_NOT_FROM From =~ /^(.*)$/i describe MYMAIL_FROM_NOT_FROM MAIL FROM и From: не совпадают score MYMAIL_FROM_NOT_FROM 5.0
Это правило обрабатывает сложные случаи, поскольку вам может потребоваться больше логики для точного сравнения. Для создания более сложных правил можно использовать Perl-скрипт, который позволит вам анализировать значения
MAIL FROM
иFrom:
в одном потоке. -
Перезапустите SpamAssassin:
После добавления вашего правила запустите команду, чтобы перезагрузить SpamAssassin:sudo systemctl restart spamassassin
Шаг 2: Применение Postfix Milter для сравнения значений
Кроме использования SpamAssassin, можно воспользоваться возможностями Postfix вместе с Milter (Mail Filter). Это позволит выполнять более детальную проверку.
-
Установка Milter:
Вам нужно установить поддержку Milter и соответствующий фильтр. Одним из вариантов являетсяpostfix-milter
.Установите его, если он ещё не установлен:
sudo apt install postfix-milter
-
Создание собственного Milter для проверки:
Вам потребуется написать скрипт, который будет обрабатывать проверку. Используя Python и библиотекуpymilter
, вы можете создать фильтр:from pymilter import Milter class MyMilter(Milter.Milter): def envrcpt(self, email): self.mail_from = self.mail_from or email return Milter.CONTINUE def body(self, body): from_header = self.get_header('From:') if from_header and self.mail_from != from_header: return Milter.REJECT # Отклонить def get_header(self, header_name): # Логика для извлечения заголовков pass Milter.factory = MyMilter
-
Настройка Postfix для работы с Milter:
В конфигурационном файле Postfix (/etc/postfix/main.cf
) добавьте следующее:smtpd_milters = unix:/var/run/my-milter.sock
-
Перезапустите Postfix:
Не забудьте перезапустить Postfix после внесения изменений:sudo systemctl restart postfix
Шаг 3: Настройка отправки от ваших пользователей
Для предотвращения отправки вашим пользователям писем с различными значениями MAIL FROM
и From:
можно настроить скрипт, который будет проверять отправляемые письма. Например, вы можете использовать Postfix Transport Map для ограничения отправки:
yourdomain.com filter:[127.0.0.1]:10025
Здесь filter
может быть вашим Milter, обрабатывающим отправку писем.
Заключение
С помощью комбинации SpamAssassin и Postfix Milter вы можете добиться точной фильтрации и отклонения почты, где значения MAIL FROM
и From:
не совпадают. Это не только улучшит безопасность вашей почтовой системы, но и позволит избежать потенциальных мошеннических действий. Убедитесь, что вы тщательно тестируете созданные вами правила, чтобы избежать ложных срабатываний.