Назад | Перейти на главную страницу

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

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

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

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

Конечно, это возможно. Просто чтобы дать вам подсказку: вы можете использовать $ 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. Отправлять сообщения о возврате на поддельные адреса сложно, и это может привести к зависанию сообщений, что нежелательно, но, вероятно, это достаточная мотивация, чтобы попробовать то, что вы просили.