Как отклонить или пометить электронные письма, где MAIL FROM отличается от заголовка From: в Postfix или SpamAssassin?

Вопрос или проблема

Я пытаюсь настроить 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 проверяет только доменные части адресов, можно создать собственное правило для более точного сравнения. Вот как это сделать:

  1. Создание кастомного правила в SpamAssassin:
    Вам потребуется добавить свой собственный файл правил, например, local.cf, если его еще нет:

    sudo nano /etc/mail/spamassassin/local.cf
  2. Добавление кода для сравнения заголовков:
    Используйте следующий код для создания пользовательского правила. Это правило будет извлекать значение 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: в одном потоке.

  3. Перезапустите SpamAssassin:
    После добавления вашего правила запустите команду, чтобы перезагрузить SpamAssassin:

    sudo systemctl restart spamassassin

Шаг 2: Применение Postfix Milter для сравнения значений

Кроме использования SpamAssassin, можно воспользоваться возможностями Postfix вместе с Milter (Mail Filter). Это позволит выполнять более детальную проверку.

  1. Установка Milter:
    Вам нужно установить поддержку Milter и соответствующий фильтр. Одним из вариантов является postfix-milter.

    Установите его, если он ещё не установлен:

    sudo apt install postfix-milter
  2. Создание собственного 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
  3. Настройка Postfix для работы с Milter:
    В конфигурационном файле Postfix (/etc/postfix/main.cf) добавьте следующее:

    smtpd_milters = unix:/var/run/my-milter.sock
  4. Перезапустите 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: не совпадают. Это не только улучшит безопасность вашей почтовой системы, но и позволит избежать потенциальных мошеннических действий. Убедитесь, что вы тщательно тестируете созданные вами правила, чтобы избежать ложных срабатываний.

Оцените материал
Добавить комментарий

Капча загружается...