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

MTA, MDA и SMTP 550 User Unknown Sendmail перенаправлены на postmaster

У меня есть два ящика, на которых запущена sendmail и настроена как:

  1. MTA, принимающий соединения из внешнего мира (mta.xyz.com)
  2. MDA принимает соединения из внутренней сети и сохраняет их в почтовых ящиках пользователей (mda.xyz.com)

MTA не хранит электронные письма, он пересылает все в MDA.

Итак, предположим, что есть входящее электронное письмо на несуществующую учетную запись. bla@xyz.com:

  1. MTA принимает получателя и открывает соединение lmtp с MDA.
  2. MDA отклоняет электронное письмо с ошибкой SMTP 550 User unknown.
  3. MTA отклоняет исходное электронное письмо с SMTP 550, полученное от MDA.
  4. MTA закрывает соединение.
  5. MTA отправляет электронное письмо почтмейстеру, чтобы уведомить, что MDA отклонил электронное письмо из-за ошибки 550 User unknown error

Поток кажется разумным. Электронное письмо отклоняется с ошибкой 550 в исходном соединении, а отправитель (спамер) правильно уведомляется о проблеме. Что меня беспокоит, так это то, что MTA отправляет каждое отклоненное письмо на postmaster, на который приходится несколько десятков нежелательных писем в день. MDA ничего не отправляет, он просто отклоняет письмо. И я рад, что они оба зарегистрировали отклонения в журналах, но как я могу убедить MTA просто игнорировать 550 User unknown error, которые он получает от MDA?

Моя первоначальная мысль заключалась в том, чтобы принимать только определенные адреса электронной почты, но MTA, чтобы принимать электронные письма, должен быть настроен для использования xyz.com как его локальный домен. Это означает, что любые почтовые таблицы и файлы доступа пропускаются (насколько я могу судить).

Итак, теперь я думаю о добавлении в MTA некоторых правил sendmail для приема писем только определенным получателям. Я надеюсь, что если MTA откажется сначала от них, то почтмейстеру ничего не будет.

Что бы вы сделали? Кто-нибудь может помочь с правилами sendmail?

Конфигурация MTA:

DOMAIN(generic)
LOCAL_DOMAIN(`xyz.com')
FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
dnl FEATURE(local_lmtp)
define(`confDOMAIN_NAME', `xyz.com')
(... some cert-related and other unrelated config ...)
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
define(`MAIL_HUB', `mda.xyz.com.')
define(`SMART_HOST', `mda.xyz.com.')
define(`confFORWARD_PATH', `')
dnl MAILER(local)
MAILER(smtp)

Файл доступа MTA:

Connect:[127.0.0.1]     OK
To:xyz.com   RELAY

Конфигурация MDA:

DOMAIN(generic)
FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(`use_cw_file')
FEATURE(`smrsh')
dnl FEATURE(local_lmtp)
dnl FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
FEATURE(`local_procmail_lmtp')
(... some cert-related and other unrelated configs ...)
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
MAILER(local)
MAILER(smtp)
MAILER(procmail)

Файл доступа MDA:

To:xyz.com   OK
From:192.168    OK

Virtualusertable MDA:

# In 'aliases' those are redirected to procmail
user1@xyz.com       user1-xyz-com.virtual
user2@xyz.com       user2-xyz-com.virtual

Имена локальных хостов MDA:

xyz.com
somesubdomain.xyz.com

Оказалось намного проще, чем я думал изначально. Просто убедитесь, что в вашем sendmail.cf:

FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access' `relaytofulladdress')
FEATURE(blacklist_recipients)

Обратите внимание relaytofulladdress.

Теперь вы можете выборочно принимать определенные адреса и отклонять остальные в access:

Connect:[127.0.0.1]     OK
To:user1@xyz.com        RELAY
To:postmaster@xyz.com   RELAY
To:xyz.com              REJECT

Обратите внимание Connect вход для приема локальной электронной почты, а также postmaster@ принимать любые электронные письма от администрации (аналогично для webmaster@ и другие, если вы их используете).