Настраиваем виртуальный почтовый хостинг с ипользованием Postfix и dovecot.

В данной заметке мы расмотрим случай, когда необходимо создать почтовую систему для нескольких доменов в пределах одного выделенного сервера. Для настройки этой системы будем использовать связку postfix и dovecot. И больше пока ничего. Никаких сложных механизмов авторизации, никакого хранения аккаунтов пользователей в mysql или LDAP. Ничего этого нам не нужно. Потому как использовать почтовую систему мы будем для создания максимум нескольких десятков почтовых ящиков для нескольких доменов, а не создаем корпоративную супер-пупер-мега почтовую систему, где все это безусловно нужно. :-)

Приступим.
Для настройки виртуального почтового хостинга нам для начала не мешало бы иметь, что настраивать. По установке postfix я уже писал заметку, так что делаем все так как там написано. Далее приступаем к настройке postfix для работы с виртуальными почтовыми ящиками. При настройке используем документацию ссылка. Будем использовать пример с настройкой виртуального хостинга для нескольких доменов без создания отдельных UNIX аккаунтов. В смысле мы не будем для каждого почтового ящика задавать отдельного пользователя на сервере, а создадим одного специального пользователя для всего.
Открываем в нашем любимом редакторе файл /etc/postfix/main.cf и ищем строку
relay_domains = $mydestination
и меняем ее на
relay_domains = $mydestination, $virtual_mailbox_domains
Таким образом мы указываем postfix принимать почту для доменов перчисленных в переменных mydestination и в virtual_mailbox_domains.
Далее идем в самый конец файла и добавляем следующие строки:
01 virtual_mailbox_domains = domain1.com domain2.com
02 virtual_mailbox_base = /var/spool/mail/vhosts
03 virtual_mailbox_maps = hash:/etc/postfix/vmailbox
04 virtual_minimum_uid = 100
05 virtual_uid_maps = static:5000
06 virtual_gid_maps = static:5000
07 virtual_alias_maps = hash:/etc/postfix/virtual
Где в строке 01 через пробел мы перечисляем виртуальные домены, для которых мы будем принимать почту.
В строке 02 пишем базовый путь (префикс), где будут лежать наши почтовые ящики.
В строке 03 указываем путь до файла, где будут прописаны названия виртуальных почтовых ящиков и соответствующие им относительные пути до почтовых хранилищ. К этому вопросу мы еще вернемся.
В строке 04 указываем минимальный uid (уникальный идентификатор пользователя) который может иметь владелец почтовых хранилищ. Введен для повышения безопасности.
В строках 05 и 06 указываем uid и gid пользователя - владельца всех виртуальных почтовых хранилищ.
В строке 07 указываем путь до файла в котром могут храниться алиасы. К этому вопросу тоже вернемся.
Все. Сохраняем файл /etc/postfix/main.cf и выходим из нашего любимого редактора.
Далее создаем файл /etc/postfix/vmailbox.
touch /etc/postfix/vmailbox
и заходим в него для редактирования. Пишем в нем примерно следующее:
admin@domain1.com domain1.com/admin
info@domain1.com domain1.com/info
admin@domain2.com domain2.com/admin
Где admin@domain1.com название почтового ящика, а domain1.com/admin это относительный путь до почтового хранилища. Помните мы в строке 02 прописывали путь. Так вот абсолютный путь до почтового хранилища собирается базового пути и относительного пути. Таким орбазом полный путь до почтового хранилища для почтового ящика admin@domain1.com следующий: /var/spool/mail/vhosts/domain1.com/admin
После внесения изменений в файл /etc/postfix/vmailbox нам нужно ввести команду:
postmap /etc/postfix/vmailbox
В результате у нас создастся файл vmailbox.db. Это признак того что мы все сделали правильно. :-) То есть на основе файла vmailbox создается db файл vmailbox.db который собственно и будет использоваться postfix-ом.
Теперь нам нужно этот создать пути для почтовых хранилищ.
cd /var/spool/mail
mkdir vhosts
cd vhosts
mkdir domain1.com
mkdir domain2.com
Таким образом мы создали директорию vhosts и в ней две поддериктории, имена которых соответсвуют названиям виртуальных доменов.
Теперь нам нужно создать пользователя с uid и gid 5000. Чтобы он был владельцем всех наших почтовых хранилищ.
сначала создаем группу а потом юзера.
groupadd -g 5000 virtual
useradd -u 5000 -g 5000 virtual
Теперь нам нужно сделать пользователя virtual владельцем /var/spool/mail/vhosts вместе со всеми подкаталогами
chown -R virtual:virtual /var/spool/mail/vhosts
Теперь делаем перезагрузку postfix чтобы изменения вступили в силу:
service postfix reload
и все. Если все написали правильно то наслаждаемся приемом почты.
Теперь пару слов об /etc/postfix/virtual.
В этом файле приписываются синонимы для почтовых ящиков. Формат такой:
admin@domain.tld user@anotherdomain.tld
@domain.tld user@anotherdomain.tld
То есть. К примеру Вы хотите чтобы посчта которая приходит на ящик admin@domain.tld переправлялась на другой Ваш ящик. Пропишите такую комбинацию, как указана в первой строке.
Или, к примеру, Вы хотите чтобы вся почта которая приходит на все ящики домена domain.tld пересылалась на другой Ваш ящик user@anotherdomain.tld. Не проблема. Пропишите такую же строку, как во второй строке.
После каждого изменения файла /etc/postfix/virtual необходимо выполнить команду:

postmap /etc/postfix/virtual

После выполнения этой команды, создается файл вида /etc/postfix/virtual.db. Он  говорит о том, что команда выполнена правильно и база алиасов создана.
Добавлю, что частично правильность настройки почтовой системы можно проверить на сайте http://dnsreport.com/. Конечно он нам не все покажет, но о самых тяжелых случаях предупредит. Например о open relay host.

Про настройку dovecot для нашего случая опишу в следующей заметке.

Как всегда жду Ваших замечаний и предложений.

Рейтинг@Mail.ru

ООО организует печать стикеров на клейкой основе

заказать офисный переезд
Продажа электродов продажа сварочных электродов в калининграде
Советуем: найти работу для студентов на Stood.ru

15 Comments


  1. Есть отличный MDA - DBMail (скандинавы написали).
    Особенности
    Хранение писем в SQL-базе (MySQL, Postgress, …). POP, IMAP, SMTP/LMTP встроенно, черезвычайно гибок и удобен в настройке (если есть понимание SQL, естественно). Очень легко и хорошо интегрируется с Postfix как MTA. APOP, SMTP AUTH через SASL из той же SQL-базы (у меня MySQL InnoDB).
    При больших объемах хранимой почты весьма хорош. Применяю как продуктивный более 2 лет…
    Осмелюсь рекомендовать… Конфиги готов переслать, если есть потребность…
    С уважением, Владимир Лихачев…

    Quote | Posted January 21, 2007, 12:40 pm

  2. Уважаемый Владимир!
    Если у Вас есть желание, то я с удовольствием могу предоставить для Вас ресурсы своего сайта. Конечно здорово, когда появляются новые статьи. Потратьте час своего времени на написание хотя бы малой инструкции по установке и настройке DBMail (да и в общем любого другого интересного софта) и пользователи и начинающие админы будут Вам весьма признательны.
    С нетерпением жду Вашего ответа.

    Quote | Posted January 22, 2007, 9:13 am

  3. Огромное спасибо за статью. Ничего лишнего все по делу, единственный вопрос, все сделал как сдесь описано, но почему то сервер перестает слать почту после того как я добавляю строки
    virtual_mailbox_maps = hash:/etc/postfix/vmailbox
    virtual_alias_maps = hash:/etc/postfix/virtual
    возможно что то необходимо до установить???

    ОС Fedora 7, Postfix 2.3.3-2

    Quote | Posted October 26, 2007, 9:44 am

  4. postmap /etc/postfix/vmailbox делали?
    Postfix не использует сам этот файл, он использует файл vmailbox.db. Аналогичная ситуация с /etc/postfix/virtual
    А так информации маловато.
    В любом случае смотрите логи /var/log/maillog.

    Quote | Posted October 26, 2007, 10:30 am

  5. да с логом трабл :(
    туда столько сообщений сыпиттся что не знаю как это заблокировать…кстати может кто подскажет.
    Если необходимо могу привести пример сообщений,
    Oct 26 08:41:20 galaxy postfix/qmgr[24347]: 3689C6475335: to=, relay=none, delay=211330, delays=211330/0.02/0/0, dsn=4.4.1, status=deferred (delivery temporarily suspended: connect to mx2.mail.tw.yahoo.com[203.188.197.10]: Connection timed out)
    Oct 26 08:41:20 galaxy postfix/qmgr[24347]: 3689C6475335: to=, relay=none, delay=211330, delays=211330/0.02/0/0, dsn=4.4.1, status=deferred (delivery temporarily suspended: connect to mx2.mail.tw.yahoo.com[203.188.197.10]: Connection timed out)

    Извиняюсь за столь большое сообщение

    Quote | Posted October 26, 2007, 11:41 am

  6. Кстати правильно ли я понял вашу статью….с помощью ее я пытаюсь сделать следующее, у меня есть два доменных имени, а сервер соответственно один. В ДНС для обоих доменов прописан ip этого сервера.

    Quote | Posted October 26, 2007, 12:49 pm

  7. Да. В такой ситуации этот вариант можно использовать.

    Quote | Posted October 26, 2007, 1:35 pm

  8. Добавьте битте в статью
    postmap /etc/postfix/virtual
    без этого плохо работает :)

    Quote | Posted November 29, 2007, 6:46 pm

  9. Добавил. Спасибо. Подзабыл как то об этом.

    Quote | Posted November 30, 2007, 4:32 pm

  10. F есть ограничение на количество виртуальных доменнов при такой настройке

    Quote | Posted December 2, 2007, 12:19 am

  11. При такой настройке про ограничения на количество доменов не слышал. Но, если необходимо создавать систему под много доменов и много ящиков (я имею ввиду цифры скажем выше ста), то лучше использовать другие методы. Например связку с mysql.

    Quote | Posted December 3, 2007, 2:19 pm

  12. связка postfix+Dovecot-SASL очень удачное решение,пробовыл много других,этот оказался лучшим,спасибо

    Quote | Posted December 4, 2007, 12:06 am

  13. У меня изначально на сервере был один домен и пользватели почты это пользователи системы /как бы/, то есть у каждого своя домашняя директория в /home/ в котоой находится maildir

    Мне нужно добвать будет еще пару доменов, при этом добиться не тольк того, чтобы dovecot+posfix обслуживали нормально все эти домены, но и так надо сделать, чтобы аутентификация пользователей и хранение почты не было связано с пользователями системы или с директорией /home/ потому как на разных доменах могу тыть и похожие адес почты типа vasya@domen1.com и vasya@domen2.com

    Наверное, мне надо как то перевести аутентификацию на LDAP или Mysql/Postgresql, но не знаю, как это проще сделать. У меня opensuse 10.3 там в Yast есть настройа ldap но не знаю, как правильно надо всё это настраивать и надо ли.

    Quote | Posted April 2, 2008, 9:45 pm

  14. Спасибо, очень хорошая статья!

    Quote | Posted August 3, 2008, 1:03 pm

  15. Прошу прощения, но у меня ничего не работает!
    И где например информация о паролях пользователей (то бишь ящиков)????

    Quote | Posted October 1, 2008, 2:10 pm

Leave a reply

*
To prove that you're not a bot, enter this code
Anti-Spam Image