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

Настраиваем виртуальный почтовый хостинг с ипользованием 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 для нашего случая опишу в следующей заметке. Как всегда жду Ваших замечаний и предложений.

У меня в последнее время

У меня в последнее время возникают часто в логах вот такие строки

authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=ftp rhost=64.235.53.208 : 4 Time(s)
authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=info rhost=64.235.53.208 : 4 Time(s)
authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=sales1 rhost=64.235.53.208 : 4 Time(s)

ощущуение что пытаются взломать сервер перебором
есть ли в конфиге настройка чтоб блокировать адрес на 5 мин если авторизация не удалась????

Письма не попадают в почтовые хранилища

Добавил все кроме этих строк

04 virtual_minimum_uid = 100
05 virtual_uid_maps = static:5000
06 virtual_gid_maps = static:5000

Письма перенаправляю на другой e-mail и всё работает но в хранилище пусто.
Подскажите что не так?

 В строках 05 и 06 указываем

 В строках 05 и 06 указываем uid и gid пользователя - владельца всех виртуальных почтовых хранилищ. 

Если такого пользователя нет, то ясно, что будут ошибки. Смотрите /var/log/maillog на предмет ошибок postfix.

почта доставляется на ура, и

почта доставляется на ура, и все само создается! оно и логично там же можно указать от чьего имени вершить правосудие...
но вот чудеса.. pop3d демон упорно ищет почту для пользователя не там, поясню

в Main.cf

virtual_mailbox_domains = emoxam.ru,
virtual_mailbox_base = /var/spool/mail/vhosts
virtual_mailbox_maps = hash:/usr/local/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:1981
virtual_gid_maps = static:1981

в vmailbox

sukhorukov@emoxam.ru emoxam.ru/sukhorukov/

в pop3d

MAILDIRPATH="/var/spool/mail/vhosts/emoxam.ru"

так вот! postfix без запинок принимает почту и кладет её в
/var/spool/mail/vhosts/emoxam.ru/sukhorukov

а вот когда pop3d пытается отработать
он лезет в папку /var/spool/mail/vhosts/emoxam.ru

и досвидания..
если ему указать /var/spool/mail/vhosts/emoxam.ru/sukhorukov то он конечно же отрабатывает честно! но у меня же не один пользователь отнюдь!
по форумам и докам никак не могу найти как его уговорить ? где я маханулся, или какой параметр не углядел ? помогите люди добрые ?

Прошу прощения, но у меня

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

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

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

У меня изначально на сервере

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

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

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

связка postfix+Dovecot-SASL

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

При такой настройке про

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

F есть ограничение на

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

Добавил. Спасибо. Подзабыл

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

Добавьте битте в

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

Да. В такой ситуации этот

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

Кстати правильно ли я понял

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

да с логом трабл :( туда

да с логом трабл :(
туда столько сообщений сыпиттся что не знаю как это заблокировать...кстати может кто подскажет.
Если необходимо могу привести пример сообщений,
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)

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

postmap /etc/postfix/vmailbox

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

Огромное спасибо за статью.

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

ОС Fedora 7, Postfix 2.3.3-2

Уважаемый Владимир! Если у

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

Есть отличный MDA - DBMail

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