Posts tagged ‘postfix’

SASL: Postfix + Dovecot

Для начала: зачем нужен SASL? Это набор правил. Выполнение которых дает прошедшему авторизацию бонусы. Начиная от просто отправки писем и заканчивая тем, что Postfix может разрешить удаленным клиентам(не принадлежащим mynetworks) отправлять письма на чужие домены, а не только на обслуживаемые Postfix. Таким образом, SMTP в частности защищается от возможности стать опенрелеем. (далее…)

Реклама

Февраль 10, 2012 at 15:32 Оставьте комментарий

postfix+dovecot: virtual alias

Итак: есть почтовый сервер, в котором MTA — Postfix, MDA — Dovecot. T — transfer, D — delivery.
Пользователей больше одного, поэтому они сделаны виртуальными и хранятся в MySQL.
Соответственно в main.cf postfix есть строчки, касающиеся запросов к базе:
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Эти файлы конфигураций содержат информацию для подключения к базе и сам запрос. В результате запросов postfix получает из базы домены, которые должен обслуживать, и пользователей.
Затем может понадобится переадресация. Для внешних доменов я рекомендую использовать generic.
А здесь речь пойдет о переадресации писем на внутренние адреса. Мне это понадобилось для создания списка рассылки без применения специальных пакетов типа Mailman и пр.
Цель: при отсылке письма на какой-то внутренний почтовый адрес, оно рассылается целому списку пользователей. При этом на сам адрес рассылки письмо не приходит. Это просто alias.
Средство: использовать virtual_alias_maps. Только осторожнее со старыми postfix старше 2.1!
Добавляем в main.cf строчку
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Соответственно в базе MySQL должна быть таблица, содержащая aliasы.
Для тотальной рассылки по всем пользователям в ней должна быть одна запись:
ключ — адрес_рассылки, результат запроса — список_адресов-абонентов_рассылки_через_запятую.
Чтобы сформировать строчку с абонентами рассылки, советую снять дамп с таблицы виртуальных пользователей через phpmyadmin в CSV, а затем скриптом обработать — получить строку из всех адресов через запятую. Также стоит узнать ее размер и соответственно выставить длину строки в таблице alias.
И последнее: чтобы все заработало, необходимо удостовериться, что в main.cf НЕТ строки
receive_override_options = no_address_mappings
Это связано с механизмом работы postfix, который позволяет добавлять внешние фильтры контента письма (типа amavis). И соответственно эта опция запрещает манипуляции с исходным адресом письма: к нему относятся virtual aliasing, canonical, bcc и тд
Прочитать об этом можно здесь.
Интересный факт: если эту опцию оставить, создать alias и пытаться отослать письмо на адрес рассылки, то dovecot создаст mailbox для этого адреса и положит туда письмо, хотя пользователя такого не существует в таблице пользователей! То есть по факту dovecot письмо доставил — это будет отражено в логах. Но никто никогда его не получит при помощи postfix — пользователя-то такого нет.

Январь 24, 2012 at 17:14 Оставьте комментарий

postfix+dovecot: root@localhost мусорит в логах

Linux любит общаться сам с собой с помощью писем. Всякие cron.daily и прочие существа имеют что сказать. И иногда это приносит неприятности. Допустим, вы открыли /var/log/mail.log (если у вас Ubuntu как у меня). А там через какие-то промежутки времени возникают такие сообщения:

Jan 10 13:04:51 jimmi deliver(root): chdir(/root) failed: Permission denied
Jan 10 13:04:51 jimmi deliver(root): stat(/root/.dovecot.sieve) failed: Permission denied
Jan 10 13:04:51 jimmi deliver(root): chdir(/root) failed: Permission denied
Jan 10 13:04:51 jimmi deliver(root): stat(/root/.dovecot.sieve) failed: Permission denied
Jan 10 13:04:51 jimmi deliver(root): mkdir(/home/vmail//root/cur) failed: Permission denied (euid=65534(nobody) egid=65534(nogroup) missing +w perm: /home/mail_master/)
Jan 10 13:04:51 jimmi deliver(root): msgid=<20110106042451.B72D8BF48@localhost>: save failed to INBOX: Internal error occurred. Refer to server log for more information. [2011-01-10 13:04:51]
Jan 10 13:04:51 jimmi deliver(root): mkdir(/home/mail_master//root/cur) failed: Permission denied (euid=65534(nobody) egid=65534(nogroup) missing +w perm: /home/mail_master/)
Jan 10 13:04:51 jimmi deliver(root): msgid=<20110108035902.665C3C0C7@localhost>: save failed to INBOX: Internal error occurred. Refer to server log for more information. [2011-01-10 13:04:51]
Jan 10 13:04:51 jimmi postfix/local[12515]: 665C3C0C7: to=<root@localhost>, orig_to=<root>, relay=local, delay=191150, delays=191150/0.02/0/0.02, dsn=4.3.0, status=deferred (temporary failure)

Это происходит, когда у root нет alias. (далее…)

Январь 10, 2012 at 14:26 Оставьте комментарий

Fetchmailrc из passwd

Я использую Fetchmail вместе с postfix relayhost_map, чтобы объединить два аккаунта электронной почты: реальный(например, на gmail) и виртуальный, который обслуживается postfix. Fetchmail собирает письма с реальных аккаунтов, и для каждого нужно указать хост, логин и пароль.
Если такой аккаунт один, то несложно и руками забить, но если их хотя бы 5, то уже становится лениво. Тем более, что один раз я уже подобную работу делала, когда создавала файл passwd для postfix.
(далее…)

Август 11, 2011 at 16:26 Оставьте комментарий

Некорректно работает Postfix generic

Задача была такая: создать локальный почтовый сервер на виртуальном домене, чтобы у каждого сотрудника в головном офисе и филиалах был свой аккаунт. При этом у многих сотрудников есть рабочая почта на реальных доменах. Чтобы люди не путались, с какой учетной записи в почтовом клиенте можно отправлять письма только внутренним адресатам, а с какой — внешним, было решено использовать smtp relay в  postfix.
(далее…)

Август 10, 2011 at 22:37 Оставьте комментарий