Может ли почтальон /exim отклонить сообщения, не являющиеся членами, во время подключения?

Я использую Mailman с Exim. Когда почтальон публикуется в списке рассылки, Mailman можно настроить любым из следующих способов, каждый из которых имеет проблему:

  1. Принять - распространяет спам по всем участникам списка.
  2. Отбросьте это молча - это расстраивает и сбивает с толку людей, которые отправляют почту со вторичного адреса, не понимая, что это не тот, на который они подписаны.
  3. Удерживайте его для модерации - это создает значительную нагрузку для модератора, чтобы просеять спам в поисках нескольких не спамов. Если модератор расслабится, мы вернемся к делу (2).
  4. Отклонить его с помощью сообщения о недоставке - это создает спам обратного рассеяния.

Мне кажется, что лучшим вариантом было бы сделать то же самое, что делает exim, когда кто-то пытается отправить почту на несуществующий адрес: отклонить его во время соединения SMTP с кодом ошибки. Таким образом, реальные пользователи будут проинформированы о проблеме отправкой MTA, а спам с поддельным отправителем не создаст обратное рассеяние. Можно ли настроить exim таким образом, чтобы он запрашивал Mailman и отклонял публикации списка не членов во время SMTP?

1 ответ

Это конечно возможно. Просто чтобы дать вам подсказку: вы можете использовать $run и $runrc в ACL на этапе rcpt. См. Раздел 5. после "${run..." в http://www.exim.org/exim-html-current/doc/html/spec_html/ch-string_expansions.html. Вы должны написать скрипт, который вызывает список рассылки list_members, или вы можете найти вдохновляющую команду "withlist"...

Другой подход может быть следующим: подготовить файл для каждого списка (сгенерированный скриптом), который содержит все элементы списка. Затем используйте поиск в операторе ACL для поиска адреса отправителя в этом файле. Ядро скрипта будет примерно таким:

while read -r list; do
   list_members "$list" > "$EXIM_HOME/mm-lists/$list"
done <<< "$(list_lists -b)"

Соответствующий ACL может быть что-то вроде:

deny
   domains = +local_domains
   condition = ${if exists {MAILMAN_HOME/lists/$local_part/config.pck}{1}{0}}
   ! senders = ${lookup{$sender_address}lsearch{CONFDIR/mm-lists/$local_part}{$sender_address}}
   message = Only list members are allowed to post.

Но есть проблемы с таким механизмом, такие как проблемы гонок при перезаписи файлов, содержащих элементы, возможно, проблемы безопасности, asf.

Я не пробовал приведенный выше код, и я не знаю, действительно ли это работает. Это просто, чтобы дать вам представление, что попробовать.

Ваша мотивация нуждается в некоторой коррекции: вы не избегаете отскоков по поддельным адресам отправителя, когда выбираете время SMTP, принимать сообщение или нет. Вы просто не берете на себя ответственность за доставку отказов, вы оставляете это отправляющему MTA. Отправка отскоков обратно по поддельным адресам затруднена, и это может привести к зависанию сообщений, что нежелательно, но, вероятно, это достаточно мотивирует, чтобы попробовать то, что вы просили.

Другие вопросы по тегам