Разобрался с Sendmail и виртуальными аккаунтами. Можно вполне обойтись без виртуальных ящиков, баз данных или LDAP и установки почтового агента и POP3/IMAP-сервера с поддержкой аутентификации по ним. Когда на машине хостятся пара доменов и нужно всего несколько пользователей, то вполне можно обойтись Sendmail и ящиками системных учётных записей.
Предположим, есть два пользователя, john и jane. У каждого есть свой домен, john.example.com и jane.example.com. Запись MX каждого домена указывает на имя почтового сервера, к примеру, на example.com. Каждому пользователю необходим ящик на своём домене, john@john.example.com и jane@jane.example.com. Делается это следующим образом.
Необходимо создать таблицу виртуальных пользователей. Все настройки лежат в
/etc/mail, там же создаём файл
virtusertable в котором прописываем виртуальные учётные записи следующим образом:
[пользователь]@домен учётная_запись. Пользователя указывать не обязательно. Если пользователь не указан, вся почта для домена будет доставляться в ящик указанной учётной записи.
В случае с john и jane файл
/etc/mail/virtusertable имеет следующий вид:
john@john.example.com john
john@jane.example.com error:nouser No such user here
jane@jane.example.com jane
jane@jane.example.com error:nouser No such user here
Чтобы Sendmail не доставлял почту по адресам john@jane.example.com и jane@john.example.com необходимо указать отсутствие таких пользователей на доменах.
Далее необходимо создать таблицу хэшей. Делается это следующей командой:
makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
Для перезаписи полей from и reply-to в исходящей почте надо создать аналогичную таблицу следующим образом:
учётная_запись пользователь@домен. В случае с john и jane файл
/etc/mail/genericstable имеет следующий вид:
john john@john.example.com
jane jane@jane.example.com
Чтобы Sendmail принимал почту для доменов john.example.com и jane.example.com необходимо добавить их в
/etc/mail/local-host-names:
john.example.com
jane.example.com
Для перезаписи полей в исходящей почте доменное имя самого почтового сервера необходимо прописать в файле
/etc/mail/generics-domains:
example.com
Далее в файл конфигурации Sendmail добавляем следующие строки:
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable')
FEATURE(masquerade_envelope)
FEATURE(genericstable, `hash -o /etc/mail/genericstable')
GENERICS_DOMAIN_FILE(`/etc/mail/generics-domains')
Пересобираем файл конфигурации следующей командой:
m4 ../m4/cf.m4 sendmail.mc > /etc/mail/sendmail.cf
И перезапускаем sendmail.
В моей вики:
http://wiki.dmitry.fi/nix:виртуальные_аккаунты_в_sendmail