У меня exim настроен на прием локального адреса с суффиксом -. Так что если Джо тогда пользователь Джо-что угодно принято.
Однако есть некоторые из этих подадресов, которые я хочу отклонить (они слишком заражены спамом, и на них не поступает ничего полезного). Есть ли способ сделать это до того, как он будет обработан локальным пользовательским маршрутизатором. Могу я что-нибудь сделать в файле псевдонимов?
Я использую Ubuntu 10.04
Добавьте еще один маршрутизатор перед маршрутизатором localuser, который существует только для отклонения комбинаций lp / суффикс, которые вы хотите отклонить. Вот пример с жестко закодированными суффиксами:
reject_suffixes:
driver = redirect
local_parts = joe-badsuff1 : joe-badsuff2
allow_fail
fail_verify = true
data = :fail: invalid email <$local_part@$domain>
Другой способ - найти его в файле. Та же основная концепция, только с поиском файла:
reject_suffixes:
driver = redirect
local_parts = /path/to/file
allow_fail
fail_verify = true
data = :fail: invalid email <$local_part@$domain>
Файл, на который указывает local_parts, - это просто список local_parts, которые нужно отклонить:
joe-badsuff1
jane-badsuff2
jack-badsuff1
# etc...
Я предпочитаю использовать для этого маршрутизаторы вместо списков ACL, потому что он улавливает все крайние случаи, такие как сообщения, отправленные локально (и, следовательно, которые не отключают rcpt acl) и т. Д.
Просто добавьте им псевдоним.
# alias : :action: Comment joe-spam : :fail: Disabled due to spam volume.
Вы можете создать ACL, чтобы отклонить эти адреса. В раздел "begin acl" добавьте что-то вроде этого:
deny message = This address is locked.
recipients = /a/file/containing/the/rejected/addresses
Это приведет к отклонению сообщения, даже если в противном случае получатели будут приняты. Часть «получатели» здесь представляет собой простой список, вы можете использовать любой список вместо указания файла (поиск в sql, жестко закодированный список и т. Д.).
Мне нравится управлять отклоненными подадресами вместе с принятыми адресами в одном файле псевдонимов (у меня по одному для каждого домена). Мне также нужен только один маршрутизатор для каждого домена.
Если у вас есть маршрутизатор, выполняющий поиск в файле псевдонима, просто найдите сначала $ original_local_part, а затем $ local_part, так как $ original_local_part содержит весь адрес с суффиксом (он же подадрес):
data = ${lookup {$local_part$local_part_suffix@$domain} nwildlsearch {/cfg/aliases} {$value}\
{${lookup {$local_part@$domain} nwildlsearch {/cfg/aliases} {$value}}}}
Затем в файле псевдонима просто добавьте строку для подадресов, которые вы хотите отклонить:
joe-spammy@example.com: :fail: no such user, too much spam
joe@example.com: realaddress@realdomain.com
Итак, если exim найдет подадрес ("joe-spammy@example.com") в первом поиске, он обработает его (в моем примере не удастся), но если нет, то первый поиск потерпит неудачу и заставит второй искать только локальную часть ("joe@example.com") и найдите и примите / перенаправьте ее. Если на текущем адресе нет подадреса, он может просто совпадать при первом поиске.