Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> exim & dovecot

Связка exim и dovecot с веб интерфейсом postfixadmin

Автор: lissyara.


    Началось всё с того, что подсказали мне MUA с богатыми возможностями, но абсолютно неоправданно забытый в нашей стране - dovecot. Что поразило сразу - конфиг в 36кб размером. Не у многих MTA такой большой конфиг. Для начала пробежался быренько по конфигу - что сразу порадовало - масса настроек, море комментов, и, в-частности, на глаза попалось решение давнишней моей проблемы - при работе по imap почему-то становились недоступны новые мессаги. Тут было объяснение и решение. Решил перевести весь конфиг. Заколебался, но перевёл. Кстати, узнал много полезного :)
   В итоге, по мере перевода конфига, родилась идея создания связки вынесенной в заголовок статьи, ибо лучшего MTA, чем exim - я не знаю. До кучи решил привернуть к этому админку от постфикса - postfixadmin, т.к. сам постфикс мне не очень нравится, хотя на одном из серверов он у меня до сих пор стоит, но вот его админка - самая лучшая из того, что я видел (каюсь, видел немного :) - но итога не меняет - из того, что видел - лучшая). Итого реально связка получается такая: exim+dovecot+postfixadmin. Её и будем ставить. Начнём с конца, ибо коммунисты не ищут лёгких путей! :)
   Конфигурация тестовой машины и виртуальных доменов. Машина эта, 2x500 P-III, с 512 мегами ECC памяти и двумя U160 SCSI дисками висящими на встроенном в маму контроллере (что, конечно же, косячно - ибо он всего 40Mb/s, но тем не менее 30-31 мег в секунду снять с них удаётся). Диски не в массиве, один разбит на разделы второй одним шматком монтировался в /usr.
   Ставим postfixadmin, предварительно обновив порты. Если MySQL, apache, PHP4 или что-то из модулей не стоит - всё это он притащит за собой. Опции - пожалуй всё по дефолту, тока при установке PHP посмотрите, стоит ли крестик на модуле для apache - а то последнее время, по дефолту, он снят - видимо пытаются всех перегнать на 5-й PHP, тока я вот смысла в этом не вижу - 4-й то ещё толком не знаю :).
/usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='postfixadmin'
Port:   postfixadmin-2.1.0_1
Path:   /usr/ports/mail/postfixadmin
Info:   PHP frontend to postfix and mySQL
Maint:  rob@debank.tv
B-deps:
R-deps: mysql-client-4.1.19 php4-4.4.2_2 php4-mysql-4.4.2_2
WWW:    http://www.high5.net/postfixadmin

/usr/ports/>make && make install && make clean

   Если у вас уже стояла связка apache+php+mysql то можете переходить к следующему абзацу. Если нет, то теперь надо определиться, на каком хосте будет стоять MySQL - на этом же, или на другом, ибо поставился только клиент, а не сервер. Если на этом то ставим из портов на нём, если на другом, то на другом. По дефолту клиент поставлся от MySQL 4.1, соответсвенно и сервер надо ставить такой же. Если хотите другой - то надо заранее поставить сервер с клиентом нужной версии и прописать в /etc/make.conf такую строку:
# пример для версии MySQL 5.0
DEFAULT_MYSQL_VER=50

Итак, ставим MySQL нужной версии:
/usr/home/lissyara/>cd /usr/ports/databases/mysql41-server/
/usr/ports/databases/mysql41-server/>make && make install && make clean
===>  Vulnerability check disabled, database not found

You may use the following build options:

      WITH_CHARSET=charset    Define the primary built-in charset (latin1).
      WITH_XCHARSET=list      Define other built-in charsets (may be 'all').
      WITH_COLLATION=collate  Define default collation (latin1_swedish_ci).
      WITH_OPENSSL=yes        Enable secure connections.
      WITH_LINUXTHREADS=yes   Use the linuxthreads pthread library.
      WITH_PROC_SCOPE_PTH=yes Use process scope threads
                              (try it if you use libpthread).
      BUILD_OPTIMIZED=yes     Enable compiler optimizations
                              (use it if you need speed).
      BUILD_STATIC=yes        Build a static version of mysqld.
                              (use it if you need even more speed).
      WITHOUT_INNODB=yes      Disable support for InnoDB table handler.
      WITH_NDB=yes            Enable support for NDB Cluster.

Если есть необходимость в каких-то опциях, то их можно задать из командной строки, как аргументы запуска команд make и make install, но это не есть правильно, ибо при обновлении при помощи программы portupgrade это потеряется (сам влетел, собрал с кодировкой и коллатион cp1251, а после обновления клиента получил знаки вопроса вместо русских букв), правильно - добавить в файл /etс/make.conf примерно такую секцию:
PORTSDIR?=      /usr/ports
# для сервера
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql41-server
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
.endif
# для клиента
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql41-client
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
.endif

Ну и соответственно в ней добавить нужные опции сборки. После сборки меняем пассворд рута, добавляем нужного пользователя и создаём таблицы в БД по прилагаемым дампам (вообще можно создать родные от postfixadmin, по дампу идущему в комплекте с ним, но там юзер другой... мне это не понравилось :))
Итак, будем запускать всё это хозяйство:
/usr/home/lissyara/>echo 'apache_enable="YES"' >> /etc/rc.conf
/usr/home/lissyara/>echo 'mysql_enable="YES"' >> /etc/rc.conf
/usr/home/lissyara/>/usr/local/etc/rc.d/mysql-server start
Starting mysql.
/usr/home/lissyara/>/usr/local/etc/rc.d/apache.sh start
Starting apache.
/usr/home/lissyara/>

Вообще, рекомендую поставить phpMyAdmin из портов, будет чуть попроще с БД ковыряться. И создаём таблицы в БД по прилагаемому дампу:
-- 
-- БД: `exim`
-- 
USE mysql;
INSERT INTO `user` (`Host`, `User`, `Password`)
VALUES ('localhost','exim',password('exim'));
INSERT INTO `db` (`Host`, `Db`, `User`, `Select_priv`)
VALUES ('localhost','exim','exim','Y');
FLUSH PRIVILEGES;
GRANT USAGE ON exim.* TO exim@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON exim.* TO exim@localhost;
CREATE DATABASE `exim`;
USE `exim`;

-- --------------------------------------------------------

-- 
-- Структура таблицы `admin`
-- 

CREATE TABLE `admin` (
  `username` varchar(255) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`username`),
  KEY `username` (`username`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Virtual Admins';

-- --------------------------------------------------------

-- 
-- Структура таблицы `alias`
-- 

CREATE TABLE `alias` (
  `address` varchar(255) NOT NULL default '',
  `goto` text NOT NULL,
  `domain` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`address`),
  KEY `address` (`address`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Virtual Aliases';

-- --------------------------------------------------------

-- 
-- Структура таблицы `domain`
-- 

CREATE TABLE `domain` (
  `domain` varchar(255) NOT NULL default '',
  `description` varchar(255) NOT NULL default '',
  `aliases` int(10) NOT NULL default '0',
  `mailboxes` int(10) NOT NULL default '0',
  `maxquota` int(10) NOT NULL default '0',
  `transport` varchar(255) default NULL,
  `backupmx` tinyint(1) NOT NULL default '0',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`domain`),
  KEY `domain` (`domain`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Virtual Domains';

-- --------------------------------------------------------

-- 
-- Структура таблицы `domain_admins`
-- 

CREATE TABLE `domain_admins` (
  `username` varchar(255) NOT NULL default '',
  `domain` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  KEY `username` (`username`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Domain Admins';

-- --------------------------------------------------------

-- 
-- Структура таблицы `log`
-- 

CREATE TABLE `log` (
  `timestamp` datetime NOT NULL default '0000-00-00 00:00:00',
  `username` varchar(255) NOT NULL default '',
  `domain` varchar(255) NOT NULL default '',
  `action` varchar(255) NOT NULL default '',
  `data` varchar(255) NOT NULL default '',
  KEY `timestamp` (`timestamp`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Log';

-- --------------------------------------------------------

-- 
-- Структура таблицы `mailbox`
-- 

CREATE TABLE `mailbox` (
  `username` varchar(255) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `name` varchar(255) NOT NULL default '',
  `maildir` varchar(255) NOT NULL default '',
  `quota` int(10) NOT NULL default '0',
  `domain` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`username`),
  KEY `username` (`username`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Virtual Mailboxes';

-- --------------------------------------------------------

-- 
-- Структура таблицы `vacation`
-- 

CREATE TABLE `vacation` (
  `email` varchar(255) NOT NULL default '',
  `subject` varchar(255) NOT NULL default '',
  `body` text NOT NULL,
  `cache` text NOT NULL,
  `domain` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`email`),
  KEY `email` (`email`)
) TYPE=MyISAM COMMENT='Exim and dovecot Admin - Virtual Vacation';

Вообще настройки самого postfixadmin - минимально отличаются от стандартных - пароль сделан в открытом виде, да и всё (в файле config.inc.php). Ему и недосуг что админит он вовсе и не постфикс :). Также советую запаролить его, с помощью .htaccess например... После создания БД, таблиц в ней, юзера можно ставить dovecot:
/usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='dovecot'
Port:   dovecot-1.0.b8
Path:   /usr/ports/mail/dovecot
Info:   Secure and compact IMAP and POP3 servers
Maint:  robin@isometry.net
B-deps: libiconv-1.9.2_2
R-deps: libiconv-1.9.2_2
WWW:    http://www.dovecot.org/

/usr/ports/>cd /usr/ports/mail/dovecot
/usr/ports/mail/dovecot/>make && make install && make clean

Лезет синенькое окошко, где выбираем то, что нам нужно.
  Options for dovecot 1.0.b8
[ ] KQUEUE    kqueue(2) support
[ ] SASL2     SASL2 support
[ ] GSSAPI    GSSAPI support
[ ] VPOPMAIL  VPopMail support
[ ] LDAP      OpenLDAP support
[ ] PGSQL     PostgreSQL support
[X] MYSQL     MySQL support
[ ] SQLITE    SQLite support

После установки топаем рихтовать конфиг:
/usr/home/lissyara/>cd /usr/local/etc/
/usr/local/etc/>ll | grep dove
-r--r--r--  1 root  wheel  36601 24 май 13:55 dovecot-example.conf
/usr/local/etc/>cp dovecot-example.conf dovecot.conf

До такого состояния:
#!/bin/sh
# Конфиг dovecot. Начат 2006-05-26 в 16:15

# сразу предупреждаю - перевод дался реально очень тяжело,
# у автора своеобразная манера писать комменты, прям как у меня :)
# посему прошу неточности не в комментах к статье выкладывать, а 
# на форуме http://forum.lissyara.su/viewforum.php?f=8

# Директория где храняться данные на время выполнения
# (временная чтоль, тогда почему не /tmp?)
base_dir = /var/run/dovecot/

# Протоколы по которым обслужиаем клиентов:
#  imap imaps pop3 pop3s
protocols = imap pop3

# IP или имя хоста на котором будем слушать
# На данный момент не поддерживается задание нескольких адресов,
# единственный вариант - указать звёздочку (*) чтобы слушать все
# адреса ([::] - для IPv6)

# Для задания специфических портов для некоторых сервисов то это
# надо конфигурить в секции протоколов, примерно так:
#   protocol imap {
#     listen = *:10143
#     ssl_listen = *:10943
#     ..
#   }
#   protocol pop3 {
#     listen = *:10100
#     ..
#   }
listen = *

# IP или имя хоста где ждём подключения по SSL.
# По дефолту - не задано.
#ssl_listen =

# Отключить поддержку SSL/TLS (yes/no - соответсвенно включено/отключено).
ssl_disable = yes

# PEM кодированый X.509 SSL/TLS сертификат и секретный ключ. Они открываются
# до понижения рутовых привилегий, поэтому сохраните ключевой файл
# с доступом тока для root. Включенный скрипт doc/mkcert.sh может быть
# использован для генерации самоподписанного сертификата, тока не
# забудте обновить домены в dovecot-openssl.cnf
#ssl_cert_file = /etc/ssl/certs/dovecot.pem
#ssl_key_file = /etc/ssl/private/dovecot.pem

# Если ключевой файл защищён паролем, то его надо написать тут. Как
# альтернатива - запуск dovecot с параметром '-p'.
#ssl_key_password =

# Файл содержащий авторити (центры подписывающие сертификаты). обычно не нужен.
#ssl_ca_file =

# Запрос клиента на посыл (?) сертификата.
#ssl_verify_client_cert = no

# Как часто регенерить файл с параметрами SSL. Это весьма нагружающий CPU
# процесс. Значение - в часах, 0 отключает регенерацию файла вообще.
#ssl_parameters_regenerate = 168

# Цифры используемые в SSL
#ssl_cipher_list = ALL:!LOW

# Отключить команду LOGIN и все другие plaintext аутентификации если
# SSL/TLS не используется. (совместимо с LOGINDISABLED). Отметтьте, что
# 127.*.*.* и IPv6 ::1 адреса считаются безопасными, и установки этого пункта
#  не влияют на соединение с них.
disable_plaintext_auth = no


# Убивать все IMAP и POP3 процессы при остановке главного процесса dovecot
# Если поставить "no" то можно обновлять (видимо - реконфигурить) dovecot
# без принудительного закрытия открытых клиентских подключений (может быть
# проблемой - если обновление из-за безопасности).
# Надо учесть, что после того как убит мастер-процесс, клиентские процессы
# не могут писать в лог (так что, происходящее, останется неизвестным).
shutdown_clients = yes

# Использовать указанный тут файл вместо syslog(). Может быть заюзан 
# /dev/stderr для логгинга. (Только /dev/stderr!)
#log_path = 

# Для информационных сообщений юзайте этот файл, вместо дефолтового
#info_log_path = 

# Префикс для каждой линии записываемой в syslog. Коды % прредставлены
# в формате strftime(3).
log_timestamp = "%b %d %H:%M:%S "

# Средства (немогу подобрать адекватный перевод для слова "facility", в
# таких фразах) syslog используемые при ведении логов через syslog.
# Если по каким-то причинам не хочется использовать стандартное "mail",
# можно использовать local0...local7.
syslog_facility = mail

## Секция "Про лОгины" :)
## 

# Директория где аутентификационный процесс размещает UNIX сокеты
# которые требуются для процесса логина. Сокеты создаются от суперпользователя,
# поэтому можно не беспокоится насчёт прав. При старте dovecot всё
# содержимое этой директории удаляется.
login_dir = /var/run/dovecot/login

# `chroot`ить процесс аутентификации и авторизации в login_dir.
# Очень неплохая идея - ибо этот процесс работает от рута.
# http://wiki.dovecot.org/Rootless
login_chroot = yes

# Юзер использующийся для процесса логина. При установке из
# портов создаётся новый юзер - dovecot, причём не создав его не
# хочет ставиться. Ненавижу такие инсталляторы и людей их пишуших.
# В конце-концов мне видней нужен ли мне такой юзер и какого я буду
# использовать для этого процесса.
# Этому юзеру не нужен доступ к почте, он занимается тока
# контролем доступа к авторизации пользователя.
# http://wiki.dovecot.org/UserIds
login_user = dovecot

# Максимальный размер процесса, в мегабайтах. Если Вы не используете
# login_process_per_connection, то вероятно необходимо увеличить
# это значение.
login_process_size = 64

# Каждый логин должен быть обработан своим собственным процессом ('yes'), 
# или один процесс может обрабатывать несколько соединений ('no'). 'yes'
# более
# секьюрно, особенно если включено SSL/TLS. 'no' быстрее работает, ибо нет
# необходимости создавать процесс на каждое соединение.
login_process_per_connection = yes

# Число запускаемых процессов логина. Если 'login_process_per_connection'
# равно 'yes', то это число свободных процессов ожидающих подключения
# пользователей.
login_processes_count = 3

# Максимальное число запускаемых процессов авторизации. Точное число процессов
# обычно находится в 'login_processes_count', но когда много юзеров
# одновременно
# запускают процесс авторизации может быть запущено больше процессов. Для
# предотвращения 'fork-bombing' проверка производится раз в секунду,
# необходимо ли создать новые процессы - если все используются, то их число
# удваивается, до тех пор, пока не будет достигнут предел указанный тут.
# Эта опция работает только в случае если 'login_process_per_use' = 'yes'.
login_max_processes_count = 64

# Максимальное число соединений разрешённых в сосоянии 'логина'. Когда
# достигается указанный тут лимит, самые старые связи разрываются. Если
# 'login_process_per_connection' = 'no', то это число соединений процесса,
# таким образом максимальное число одновременно залогиненых юзеров равно
# 'login_processes_count' * 'max_logging_users'.
login_max_logging_users = 128

# Приветственное сообщение для клиентов.
login_greeting = dovecot MUA ready

# Разделённый пробелами лист элементов, которые будут записаны в лог. Непустые
# элементы будут объединены через запятую.
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c

# Формат лога аутентификации. %$ содержит цепочку login_log_format_elements,
# %s содержит данные которые будут залогированы.
login_log_format = %$: %s

## Процесс почты
## (настройки раздачи почты клиентам)

# Максимальное число запущенных mail процессов. Когда этот лимит достигнут,
# новые юзеры обламываются :)
#max_mail_processes = 1024

# Показывать больше отладочной информации (заголвков процессов?). В настоящее
# время показывается имя пользователя и IP адрес. Это может быть полезно
# для того, чтобы увидеть кто фактически использует процессы IMAP
# (общие майлбоксы, или если один uid используется несколькими аккаунтами).
verbose_proctitle = yes

# Показывать уровень протокола ошибок SSL.
#verbose_ssl = no

# Действительный диапазон UID для пользователей, дефолт от 500 и выше. Это
# необходимо для того, чтобы пользователи не смогли залогиниться как
# демоны или какие-либо системные пользователи. Запрет для логина `root`а
# жёстко забит в код `dovecot`а и не может быть разрешён даже если
# установить 'first_valid_uid' = 0.
first_valid_uid = 25
#last_valid_uid = 0

# Диапазон GID для юзеров, по дефолту не root или wheel. Юзерам имеющим
# недействительный GID как ID первичной группы вход запрёщён. Если пользователь
# входит в дополнительную группу с недействительным GID то эти группы
# не заданы (непонимаю эту фразу... Либо разрешено либо запрещено... х.з.)
first_valid_gid = 0
#last_valid_gid = 0

# Разрешить доступ для для дополнительных групп процессов обработки почты.
# Обычно, разрешается группа "mail" для доступа к /var/mail чтобы
# создавать блокировки
mail_extra_groups = mail

# Список директорий, с разделителями вида ':', в которых разрешается
#`chroot`инг для процессов обpаботки почты (т.е. /var/mail разрешает
# за`chroot`ить, до кучи, и /var/mail/foo/bar).
# Эти установки не затрагивают 'login_chroot' или 'auth_chroot' переменные.
# АХТУНГ: никогда не добавляйте директории где локальные пользователи
# имеют право что-то менять, иначе могут подсунуть эксплоит и получить рута.
# Обычно так делается если пользователи не имеют шелл-доступа.
#valid_chroot_dirs = 

# Дефолтовая `chroot` директория для процесса обработки почты. Это
# может быть перекрыто настройками пользователя (из БД пользователей)
# давая /./ в домашней директории пользователя.
# (т.е. /home/./user chroot`ится в /home). Необходимо отметить что реальной
# необходимости чрутить пользователей нету - т.к. dovecot не разрешит юзерам
# получить доступ к файлам вне их домашней директории.
#mail_chroot = 

# Включить отладку для процесса обработки почты. Это может помочь понять,
# почему dovecot не может найти вашу почту (дословно переведено :))
#mail_debug = yes

# Переменные окуружения MAIL для использования в случаях, когда явно они
# не заданы. Если оставить их незаданными то dovecot попробует установить
# их автоматически (описано в doc/mail-storages.txt). Есть несколько
# специальных переменных которыми можно пользоваться:
#
#   %u - имя пользователя
#   %n - `юзерская` часть в user@domain, тоже самое что и %u
#         если имя домена не задано
#   %d - `доменная` часть в user@domain, пустая, если домен не задан
#   %h - домашняя директория
#
# Полный список этих переменных можно посмотреть в 
# /usr/local/share/doc/dovecot/doc/variables.txt
#
# Пара примеров:
#   default_mail_env = maildir:/var/mail/%1u/%u/Maildir
#   default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u
#   default_mail_env = mbox:/var/mail/%d/%n/:INDEX=/var/indexes/%d/%n
#   default_mail_env = mbox:/var/mail/%u
# Учтите, что формат этой директории должен совпадать с тем,
# который достанет exim из БД (что касается его формата в БД - это
# регулируется в конфиге postfixadmin), так что либо думаем, как указывать,
# либо юзаем переменную %h - хомяк.
# Мне? больше нравиться такой вариант:
#default_mail_env = maildir:/var/mail/exim/%d/%n
# А в postfixadmin по дефолту такой:
#default_mail_env = maildir:/var/mail/exim/%n@%d
# А можно и так (наверно даже правильней так, если прокатит - но я не
# попробовал - забыл, потому - это чистая теория:
#default_mail_env = maildir:/var/mail/exim/%h
# опция была заменена аналогичной по смыслу но с другим именем
# начиная с версии 1.1.1. теперь это будет так:
mail_location = maildir:/var/mail/exim/%d/%n

# Если хотите установить несколько местоположений почтового ящика
# (тока нах это надо?) или хотите изменить NAMESPACE (это расширение
# описано в RFC 2342, оно позволяет одноимённой командой определить,
# какие пространства имён задействованы на сервере),
# то это можно сделать в следующих секциях:
#
# Можно иметь частные, раздёлённые и публичные пространства имён.
# Единственное различие между ними то, как dovecot объявляет их клиенту.
# Разделённые namespaces предназначены для пользовательских почтовых
# ящиков разделённых с другими пользователями, а публичные пространства
# имён для более глобально доступных почтовых ящиков (мне тяжело даются
# эти определения, поскольку я привык что один ящик - один юзер).
#
# ПОМНИТЕ: Если добавляете какой-либо namespaces, то дефолтовый namespace
# должен быть явно добавлен. т.е. default_mail_env не делает ничего, если
# если не задан namespace без указания местоположения. Дефолтовый
# namespace представляет собой namespace с пустой приставкой.
#namespace private {
   # Разделитель (сепаратор) в иерархии директорий. Желательно
   # использовать одинаковый во всём пространстве namespaces, иначе
   # некоторых клиентов начинает плющщить. '/' - хороший выбор.
   #separator = /

   # Префикс требуемый для получения доступа к этому пространству имён.
   # Должно быть разным во всех namespaces. Например "Public/".
   #prefix = 

   # Физическое расположение почтового ящика. Формат точно такой же как у
   # 'default_mail_env', являющейся дефолтовой для него.
   #location =

   # Может быть тока один INBOX, и тут определяется какой.
   #inbox = yes

   # Если namespace скрыто, это не показывается клиентам через NAMESPACE
   # и не показывается в ответах списка (LIST). Это полезно при
   # конвертировании с другого сервера с другим namespaces который
   # убрать (?) но всё ещё работаете с ним. Например, вы можете создать
   # скрытый namespaces с префиксом "~/mail/", "~%u/mail/" и "mail/".
   #hidden = yes
#}

# Лист полей, разделённых пробелами для первоначального сохранения
# в файл кэша. На данный момент разрешены следующие поля:
#
#  flags, date.sent, date.received, size.virtual, size.physical
#  mime.parts, imap.body, imap.bodystructure
#
# Разные IMAP-клиенты работают по разному, и извлекают выгоду из различных
# кэшируемых областей. Некоторые клиенты не умеют ими пользоваться вообще.
# Излишнее кэширование приводит к бесполезным операциям дискового
# ввода-вывода.
#
# Dovecot пытается автоматически выяснить что хочет клиент и сохраняет
# тока это. Однако первые несколько заходов клиента ещё не известно чё
# клиент хочет, и кэширование не оптимально. Если известны потребности
# клиентов, то можно попробовать выставить эти поля вручную. Если
# клиенты, фактически, не будут их использовать, то в итоге Dovecot 
# удалит их.
#
# Вообще, лучше тут ничё не трогать. Ибо то, на чём можно выиграть,
# обычно, непримечательно, и думаешь на это в последнюю очередь.
#mail_cache_fields = 

# Разделённый пробелами список полей которые Dovecot никогда не должен
# сохранять в кэше. Пригодится в случае если надо съэкономить место
# на диске в ущерб скорости работы.
#mail_never_cache_fields = 

# Минимальное число почтовых сообщений в ящике до обновления кэш-файла
# Позволяет оптимизировать поведение Dovecot в работе с диском, засчёт
# уменьшения операций записи, но увеличения числа операций чтения.
#mail_cache_min_mail_count = 0

# Когда выполняется команда IDLE, почтовый ящик проверяется время от
# времени, чтобы обнаружить новые письма, или ещё какие изменения.
# Эта опция отвечает за минимальное время между проверками. Однако
# Dovecot может использовать `dnotify` и `inotify` в линухах чтобы
# ответить немедленно после изменения.
#mailbox_idle_check_interval = 30

# Разрешить клиентам полный доступ к файловой системе. В этом случае,
# не выполняется никаких проверок доступа, тока штатные проверки ОС
# UID/GID пользователя который работает. Это работает и с майлбокс и с
# майлдир, разрешая использовать в названиях почтовых ящиков полные пути,
# типа '/path/to/mbox/' или '~user/'. (Нах, такое щассье...)
#mail_full_filesystem_access = no

# Максимальная разрешённая длинна для 'mail keyword name'
# (Директории, чтоль?)
# Проверяется тока при создении нового (нвой директории? надо проверить.)
#mail_max_keyword_length = 50

# Сохранять почту с CR+LF вместо LF (добавляется перевод каретки). Это
# уменьшает загрузку CPU при отдаче почты клиентам, но немного увеличиват
# размер размеры файлов, и соответственно дисковый ввод-вывод (При большом
# объёме почты цифра может оказаться достаточно существенной). Также,
# если другие программы шаряться по почтовым ящикам, то могут быть
# проблемы c неверной обработкой дополнительного CRs.
#mail_save_crlf = no

# Использовать mmap() вместо read() для чтения почтовых файлов. read()
# вродебы немного быстрей работает под Linux/x86 и лучше для NFS, поэтому
# так и стоит по дефолту. Необходимо заметить, что OpenBSD 3.3 и более
# старые не работают напрямую с mail_read_mmaped = yes.
#mail_read_mmaped = no

# Не использовать mmap() вообще. Такое требуется в случае, если индексы
# хранятся на расшаренной файловой системе (NFS или ещё какая).
#mmap_disable = no

# Не write() в mmaped файлы. Бывает необходимо для операционных систем
# которые используют для них свой кэш, например OpenBSD.
#mmap_no_write = no

# Метод блокировки индексных файлов. Альтернативы fcntl, flock и dotlock.
# Dotlocking юзает трюки, которые могут привети к большему дисковому
# вводу/выводу чем другие методы блокировки. Заметтьте, если юзаете NFS
# не забудте также изменить и значение mmap_disable setting!
#lock_method = fcntl

# По дефолту команда LIST возвращает все записи в maildir начинающиеся
# с точки. Включение этой опции заставляет dovecot возвращять тока
# директории. Это делает stat() для каждого вхождения, и вызывает больше
# дискового ввода-вывода.
# (Для систем устанавливающих dirent->d_type, эта опция свободна и так
# всегда, независимо от того, что тут установлено.)
#maildir_stat_dirs = no

# Копировать почту в другие директории используя "жёсткие ссылки". Это
# намного быстрее чем реальное копирование файла. Это проблематично
# лишь в случае, если что-то (программа, например, какая-то) изменяет
# файлы в одной директории, но необходимо чтобы во всех других они
# они остались неизменными. На данный момент неизвестен MUA, который
# изменял бы файлы непосредственно. Протокол IMAP также требует чтобы
# файлы не изменялись.
# Если нужен прирост производительности - включите эту опцию.
#maildir_copy_with_hardlinks = no

# Какой метод блокировки почтового ящика использовать. Доступны четыре вида
# блокировок:
#  dotlock: создаётся <mailbox>.lock файл. Это самый старый и самый
#           безопасный метод для NFS. Если хотите использовать
#           директорию /var/mail/ то надо дать юзерам доступ
#           к этой директории.
#  fcntl  : Используйте это, по возможности. Работает и с NFS если
#           используется демон lockd.
#  flock  : Возможно существует не во всех системах. не работает с NFS.
#  lockf  : Возможно существует не во всех системах. не работает с NFS.
#
# Вы можете использовать неодин метод блокировки; если так и делаете,
# то надо их тут объявить, и избежать тупиковой ситуации (deadlocks),
# если несколько методов блокировки использует и другой MTAs/MUAs.
# Некоторые ОС не позволяют одновременное использование некоторых блокировок.
#mbox_read_locks = fcntl
#mbox_write_locks = dotlock fcntl

# Максимальное время ожидания блокировки перед прерыванием (отменой).
#mbox_lock_timeout = 300

# Если существует `dotlock` (блокировчный файл) но майлбокс никогда
# не модифицировлся, удалять блокировку через указанное время
#mbox_dotlock_change_timeout = 120

# Когда майлбокс неожиданно изменяется, то его необходимо полностью
# прочитать, чтобы найти все изменения. Если майлбокс большой, то на это
# может уйти много времени. Ввиду того, что чаще всего изменения - это
# новая почта, то быстрей всего было бы прочитать тока новые мессаги.
# Если разрешена эта опция ('yes') то dovecot так и делает, если что
# перечитывая весь mbox-файл, если происходит что-то неожиданное.
# Единственная причина поставить 'no' - если другой MUA меняет флаги
# сообщений и dovecot не заметит этого сразу.
# Отметтьте, что полная синхронизация сделана на команды:
# SELECT, EXAMINE, EXPUNGE и CHECK 
#mbox_dirty_syncs = yes

# Похоже на предыдущую опцию - mbox_dirty_syncs, но при установке полная
# синхронизация не делается даже по командам SELECT, EXAMINE,
# EXPUNGE или CHECK. Если эта опция установлена, то значение
# предыдущей - mbox_dirty_syncs - игнорируется.
#mbox_very_dirty_syncs = no

# Задержка записи хеадеров майлбокса до полной синхронизации записей
# (команды EXPUNGE and CHECK когда закрывается майлбокс). Особенно
# полезно для POP3, - там клиенты часто удаляют всю почту. Обратная
# сторона медали - это то, что изменения не сразу видны другому MUA.
#mbox_lazy_writes = yes

# Если размер майлбокса меньше, чем указанное тут значение (kB), не
# создавать индексные файлы. Если файл индекса существует, то он
# продолжает читаться но не обновляется (тока какой тогда смысл?)
#mbox_min_index_size = 0

# Максимальный размер файла dbox (в kB) с которым работает ротации.
#dbox_rotate_size = 2048

# Минимальный размер файла dbox (в kB) до ротации
# (перекрывается dbox_rotate_days)
#dbox_rotate_min_size = 16

# Максимальный возраст dbox файла в днях до ротации. День всегда начинается
# с полуночи, т.о. 1 = сегодня, 2 = вчера, и т.д. 0 = нет проверок.
#dbox_rotate_days = 0

# umask (маска считается из этого числа - вычитается оно из максимума 777,
# результат - и есть маска для файла) для файлов почты и директорий.
umask = 0077

# Удалить все привилегии перед выполнением процесса обработки почты.
# Это, в основном, предназначено для отладки, в противном случае вы не
# получите core dumps. Есть небольшой риск безопасности при использовании
# единственного UID для нескольких пользователей, поскольку они могли бы
# ptrace() процессы других пользователей.
#mail_drop_priv_before_exec = no

# Установить максимальный размер процесса (в Mb). Большинство памяти
# уходит на mmap()ing файлов, таким образом не должно быть проблем, даже
# если установить это число достаточно большим.
#mail_process_size = 256

# Префикс логов для майл-процессов. Смотрите полный лист переменных
# в файле doc/variables.txt 
#mail_log_prefix = "%Us(%u): "

## Специфисеские настройки IMAP
##

protocol imap {
  # Местоположение исполняемого файла авторизации.
  #login_executable = /usr/local/libexec/dovecot/imap-login

  # Местоположение исполняемого файла IMAP. Изменение этого позволит
  # выполнить другие программы до запуска процесса imap.
  #
  # Это записало бы сырые логи (rawlogs) в ~/dovecot.rawlog/ директорию:
  #   mail_executable = /usr/local/libexec/dovecot/rawlog \
  # /usr/local/libexec/dovecot/imap
  #
  # Это добавило бы gdb в процесс imap и писало бы обратную трассировку
  # в файлы /tmp/gdbhelper.*
  #   mail_executable = /usr/local/libexec/dovecot/gdbhelper \
  # /usr/local/libexec/dovecot/imap
  #
  #mail_executable = /usr/local/libexec/dovecot/imap

  # Максимальная длинна команды (командной линии) IMAP, в байтах. Некоторые
  # клиенты генерят очень длинные команды при работе с большими 
  # почтовыми ящиками. Если в ответе сервера Вы получите
  # "Too long argument" или "IMAP command line too large" то это
  # это значение необходимо будет увеличить.
  #imap_max_line_length = 65536

  # Поддержка динамически загружаемых плагинов. mail_plugins - список
  # плугинов разделённый пробелами
#  mail_plugins = quota trash
#  mail_plugin_dir = /usr/local/lib/dovecot

  # Посылать возможности IMAP в приветственном сообщении. Это избавляет
  # клиентов от необходимости запрашивать это в команде CAPABILITY, таким
  # образом экономится один запрос. Однако многие клиенты не понимают этого,
  # и всё равно делают запрос CAPABILITY всегда.
  #login_greeting_capability = no

  # Обработка клиентских ошибок:
  #   delay-newmail:
  #     Посылать EXISTS/RECENT уведомления о новой почте только в качестве
  #     ответа на NOOP и CHECK команды. Некоторые почтовые клиенты 
  #     игнорирубт их, например OSX Mail. Outlook Express вообще плющит,
  #     и он может быть сообщение об ошибке "Message no longer in server".
  #     Заметтьте, что шестой оутглюк (OE6) всё ещё выдаёт ошибку если 
  #     синхронизация стоит "Headers Only" (тока заголовки).
  #   outlook-idle:
  #     Outlook и Outlook Express никогда не прерывают команду IDLE, и если
  #     почты небыло полчаса Dovecot закрывает соединение. В общем, это
  #     правильно, но оутглюк не восстанавливает соединение самостоятельно,
  #     и в итоге не видно - пришла ли новая почта.
  #   netscape-eoh:
  #     Netscape 4.x вылетает если заколовки сообщения не заканчиваются
  #     пустой линией "end of headers". Обычно, она есть во всех сообщениях,
  #     но тем не менее производится проверка, и линия добавляется, если
  #     её нету. Это сделано только для команды FETCH BODY[HEADER.FIELDS..]
  #     Кстати, согласно RFC этого делать не надо :)
  #   tb-extra-mailbox-sep:
  #     При типе хранилища 'mbox' (майлбокс), почтовый ящик может содержать
  #     либо почту, либо субмайлбоксы (подпапки, короче) - но не то и
  #     другое одновременно. Thunderbird разделяет их, вынуждая сервер
  #     принять '/' в имени майлбокса за название почтового ящика.
  # Лист, разделённый пробелами. (не забудте убрать перевод строки,
  # экранированный '/' - dovecot его не поймёт... а жаль...)
  imap_client_workarounds = delay-newmail outlook-idle \
                             netscape-eoh tb-extra-mailbox-sep
}

## Специфические настройки POP3
##

protocol pop3 {
  # Местоположение исполняемого файла pop3-авторизации.
  #login_executable = /usr/local/libexec/dovecot/pop3-login

  # Местоположение исполняемого файла POP3.
  #mail_executable = /usr/local/libexec/dovecot/pop3

  # Не пробовать выявить сообщения, старые или просмотренные при
  # помощи POP3 сессий. Это нужно чтобы уменьшить дисковый ввод/вывод.
  # При работе с 'maildir' это не перемещает файлы из 'new/' в 'cur/'
  # c 'mbox' не пишутся статусные заголовки.
  #pop3_no_flag_updates = no

  # Поддержка команды LAST с существующими старыми POP3 спеками, но
  # удалёной в новых сборках. Некоторые клиенты всё ещё используют это.
  # Включение этой опции заставляет команду RSET очистить все '\Seen'
  # флаги сообщений.
  #pop3_enable_last = no

  # Если почтовое сообщение имеет хеадер 'X-UIDL', то использовать
  # его в качестве почтового 'UIDL'.
  #pop3_reuse_xuidl = no

  # Оставлять почтовый ящик залоченым во время POP3 сессии.
  #pop3_lock_session = no

  # Используемый формат POP3 UIDL. Можно использовать следующие переменные:
  #
  #  %v - Mailbox UIDVALIDITY
  #  %u - Mail UID
  #  %m - Сумма MD5 для всех заголовков почтового ящика в hex (тока для mbox)
  #  %f - filename (maildir only)
  #
  # Для совместимости UIDL с другими POP3 серверами, используйте:
  #  UW's ipop3d         : %08Xv%08Xu
  #  Courier version 0   : %f
  #  Courier version 1   : %u
  #  Courier version 2   : %v-%u
  #  Cyrus (<= 2.1.3)    : %u
  #  Cyrus (>= 2.1.4)    : %v.%u
  #  Older Dovecots      : %v.%u
  #
  # Отметьте, что у Outlook 2003 проблемы с форматом %v.%u который
  # являлся дефолтовым форматом Dovecot, так что при пересборке лучше это
  # учесть. %08Xu%08Xv - надо предварительно сохранить.
  #
  # Отметтьте, в настоящее время это должно быть установлено явно, т.к.
  # прежния установки по-умолчанию были не самыми лучшими, но и изменить
  # их было нельзя, не переустанавливая приложение.
  # Во всех новых инсталляциях будет %08Xu%08Xv
  #
  pop3_uidl_format = %08Xu%08Xv

  # POP3 формат строки логоута:
  #  %t - число TOP команд
  #  %p - число байт посланных клиенту в результате команды TOP
  #  %r - число команд RETR
  #  %b - число байт посланных клиенту в результате команды RETR
  #  %d - число удалённых сообщений
  #  %m - число сообщений (до удаления)
  #  %s - размер майлбокса в мегабайтах (до удаления (сообщений, видимо :)))
  #pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s

  # Поддержка динамически загружаемых плагинов. mail_plugins - список
  # плагинов для загрузки, разделённый пробелами
  #mail_plugins = 
  #mail_plugin_dir = /usr/local/lib/dovecot/pop3

  # Обработка некоторых клиентских ошибок:
  #   outlook-no-nuls:
  #     Outlook и Outlook Express зависают, если сообщение содержит NUL
  #     символы. Эта установка заменяет их на символы 0x80.
  #   oe-ns-eoh:
  #     Outlook Express и Netscape Mail прерываются, если потеряна линия
  #     конца заголоков. эта опция шлёт её, если она потеряна.
  # Список, разделённый пробелами.
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}


# своя доставка dovecot - delivery
protocol lda {
  # Куда слать письма про превышение квоты
  postmaster_address = support@lissyara.su

  # путь к сокету
  auth_socket_path = /var/run/dovecot/auth-master
}


##
## Процессы аутентификации
##

# Расположение исполняемого файла
#auth_executable = /usr/local/libexec/dovecot/dovecot-auth

# Установить максимальный размер процесса, в мегабайтах.
#auth_process_size = 256

# Кэш аутентификации, в килобайтах. 0 - отключено.
# Заметтьте, что bsdauth, PAM и vpopmail требуют чтобы cache_key был
# задан для использования кэширования. Также надо заметить, что сейчас
# кэш авторизации не очень хорошо пашет, если используется много 
# passdbs (баз данных паролей?) с теми же самыми (одинаковыми?) именами в них.
#auth_cache_size = 0
# Время жизни, в секундах, для кэшированных данных. По истечании этого
# времени записи из кэша не используются, как исключение - если тока
# БД вернёт внутреннюю ошибку.
#auth_cache_ttl = 3600

# Разделённый пробелами лист элементов идентификаторов аутентификационных
# механизмов SASL, которые необходимы (я сам эту фразу нифига не понял :))).
# Можно оставить пустым, если нет необходимости в поддержке нескольких
# идентификаторов. Многие клиенты используют лишь первый, из перечисленных
# тут, поэтому ставьте дефолтовый первым.
#auth_realms =

# Дефолтовый realm/domain для использования если домен явно не задан. Это
# используется и для SASL и для добавления @domain к имени пользователя
# в плайнтекст логинах.
#auth_default_realm = 

# Список разрешённых символов в имени пользователя. Если в username содержатся
# неперечисленные тут символы, то авторизация автоматически будет неудачной.
# Это - просто дополнительная проверка того, что пользователь не сможет заюзать
# потенциальную брешь в защите, при работе с базами SQL/LDAP. Если хотите
# разрешить все символы, то оставьте это поле пустым.
#auth_username_chars = \
#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

# Автозамена символов в имени пользователя, прежде чем по нему будет
# выполнен поиск в базе данных. Значение содержит ряд - что -> во что
# будет преобразовано. Например "#@/@" означает, что '#' и '/' будут
# преобразованы в '@'.
#auth_username_translation =

# Форматирование имени пользователя, до поиска по нему в БД. Тут можно
# использовать стандартные переменные, типа %Lu сделает все буквы маленькими,
# %n удалит домен, если он задан, или "%n-AT-%d" заменит '@' на "-AT-".
# Это делается после того, как auth_username_translation произвело изменения.
#auth_username_format =

# Если нужно разрешить вход главным пользователям (master users) по
# специфическому имени пользователя (master username) (т.е. не юзая
# поддержку SASL для этого) то вы можете определить символ радлелителя в
# этом пункте. Формат, в таком случае:<username><separator><master username>.
# UW-IMAP использует "*" в качестве разделителя, и это хороший выбор.
#auth_master_user_separator =

# Имя пользователя для логина при помощи механизма ANONYMOUS SASL
#auth_anonymous_username = anonymous

# Много отладочных логов. Полезго для определения, почему
# авторизация не пашет.
#auth_verbose = no

# Более подробный лог для отладки.
# Показываются квери к SQL.
#auth_debug = yes

# В случае несовпадения пароля записать пароль в лог, и используемую схему,
# таким образом проблема может быть отлажена. Регулируется auth_debug = yes.
#auth_debug_passwords = no

# Максимальное число работающих процессов авторизации. Они используются для
# выполнения блокирования passdb и userdb запростов (т.е. MySQL и PAM). 
# Они автоматически создаются и убиваются по мере надобности.
#auth_worker_max_count = 30

# Kerberos keytab для использования механизма GSSAPI. Будет использовать 
# системное значение по умолчанию (обычно, /etc/krb5.keytab) если не задано.
#auth_krb5_keytab = 

auth default {
  # Список требуемых механизмов аутентификации, разделённый пробелами
  #   plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi
  mechanisms = plain

   # Добавлено для работы deliver от dovecot
   socket listen {
     master {
       path = /var/run/dovecot/auth-master
       mode = 0600
       user = mailnull
       #group = mail
     }
   }


  #
  # База данных паролей используемая для проверки пароля пользователя.
  # (и только для этого). Можно использовать несколько баз данных паролей
  # и пользователей. Это нужно, например, если используются одновременно и
  # системные пользователи (/etc/passwd) и виртуальные, чтобы не дублировать
  # системных в виртуальную БД.
  #
  # http://wiki.dovecot.org/Authentication
  #
  # Добавляя master=yes в passdb вы делаете passdb списком "master users",
  # кто может войти под чьим-либо ещё именем. Если не используется PAM,
  # вы, вероятно, хотите, чтобы юзер искался в passdb если она реально
  # существует. Это можно сделать, добавив pass=yes в главную passdb
  #
  # http://wiki.dovecot.org/MasterPassword

  # Юзеры могут быть временно заблокированы, если добавить БД паролей с
  # deny=yes. Если юзер будет найден в этой ДБ то аутентификация будет
  # неудачной.
  # Эта БД должна определяться до других, чтобы она была проверена первой.
  # Например:
  #passdb passwd-file {
    # Файл содержащий имена пользователей, по одному на строку:
    #args = /etc/dovecot.deny
    #deny = yes
  #}

  # PAM аутентификация. Предпочтена, сейчас, на большинстве систем. 
  # Отметтьте, что PAM может лишь проверить, верен ли пароль, но не может
  # использоваться в качестве userdb. Если вы не хотите использовать отдельную
  # пользовательскую БД (обычно passwd), вы можете использовать статическую
  # userdb.
  # ПОМНИТЕ: Вам нужен файл '/etc/pam.d/dovecot' созданном для PAM
  # аутентификации, чтобы это работало.
  #passdb pam {
    # [session=yes] [cache_key=<key>] [<service name>]
    #
    # session=yes делает Dovecot открытым(?) и немедленно закрывает сессию PAM.
    # Некоторые PAM плугины требуют этого для работы, например pam_mkhomedir.
    #
    # cache_key может использоваться для кэширования аутентификационных данных
    # PAM (auth_cache_size должен быть задан). По дефолту это не допускается,
    # потому как модули PAM могут сделать все проверки, кроме проверки пароля,
    # типа проверки IP адреса. Dovecot не может узнать об этих проверках без
    # посторонней помощи. cache_key - просто список переменных который
    # соответствует данным кэшируемым для использования.
    # Примеры:
    #   %u - Имя пользователя должно совпадать. Обычно достаточно только этого.
    #   %u%r - Имя пользователя и удалённый IP адрес должны совпадать.
    #   %u%s - Имя пользователя и сервис (т.е. IMAP, POP3) должны совпадать.
    # 
    # Если имя сервиса "*", используется имя сервиса для
    # обслуживания, например
    # pop3 или imap (/etc/pam.d/pop3, /etc/pam.d/imap).
    #
    # Примеры:
    #   args = session=yes *
    #   args = cache_key=%u dovecot
    #args = dovecot
  #}

  # /etc/passwd или similar, используется getpwnam()
  # В настоящее время, во многих системах, используется Name Service Switch,
  # сконфигуренное в /etc/nsswitch.conf.
  #passdb passwd {
  #}

  # /etc/passwd или similar, используется getpwnam(). Сейчас PAM.
  #passdb shadow {
  #}

  # BSD аутентификация. Используется, по крайней мере, в OpenBSD.
  #passdb bsdauth {
    # [cache_key=<key>] - Смотрите cache_key в PAM для понимания.
    #args =
  #}

  # passwd-подобный файл с указанным местоположением
  #passdb passwd-file {
    # путь к passwd-файлу
    #args = 
  #}

  # checkpassword исполняемая аутентификация
  # ОТМЕТЬТЕ: Вероятно, вы захотите использовать вместе с "userdb prefetch".
  #passdb checkpassword {
    # Путь к бинарнику checkpassword
    #args = 
  #}

  # SQL database
  passdb sql {
    # Путь к конфигурационному файлу SQL, велено смотреть дополнительную
    # инфу в файле doc/dovecot-sql.conf, тока такого файла нету :))) - не
    # инсталлится. В исходниках он есть. Там и смотрим.
    args = /usr/local/etc/dovecot-sql.conf
  }

  # LDAP database
  #passdb ldap {
    # путь для конфигурационного файла LDAP, примеры в  doc/dovecot-ldap.conf
    #args = 
  #}

  # vpopmail аутентификация
  #passdb vpopmail {
    # [cache_key=<key>] - Смотреть cache_key в PAM, для понимания.
    #args =
  #}

  #
  # БД пользователей, определяющая где расположена почта, и какие IDs
  # групп и пользователей имеют к ней доступ. Для single-UID
  # конфигурации используйте "static".
  #
  # http://wiki.dovecot.org/Authentication
  # http://wiki.dovecot.org/VirtualUsers
  #

  # /etc/passwd или similar, используется getpwnam().
  # В настоящее время, во многих системах, используется Name Service Switch,
  # сконфигуренное в /etc/nsswitch.conf.
  #userdb passwd {
  #}

  # passwd-подобный файл с указанием местоположения
  #userdb passwd-file {
    # путь к passwd-файлу
    #args =
  #}

  # Статические настройки, сгенерённые из шаблона
  #userdb static {
    # Шаблон для параметров настройки. CМожет вернуть что-то, что userdb
    # обычно возвращает, т.е.: uid, gid, home, mail, nice
    #
    # Пара примеров:
    #
    #  args = uid=500 gid=500 home=/var/mail/%u
    #  args = uid=500 gid=500 home=/home/%u mail=mbox:/home/%u/mail nice=10
    #
    #args =
  #}

  # SQL database
  userdb sql {
    # Путь к конфигурационному файлу SQL, велено смотреть дополнительную
    # инфу в файле doc/dovecot-sql.conf, тока такого файла нету :))) - не
    # инсталлится. В исходниках он есть. Там и смотрим.
    args = /usr/local/etc/dovecot-sql.conf
  }

  # LDAP database
  #userdb ldap {
    # путь для конфигурационного файла LDAP, примеры в  doc/dovecot-ldap.conf
    #args = 
  #}

  # vpopmail
  #userdb vpopmail {
  #}

  # "prefetch" (типа упреждающего чтения, чтоли :)) пользовательской БД,
  # что passdb уже достал всю необходимую информацию, и нет необходимости
  # делать ещё один поиск (запрос) в БД. Это работает и с SQL и с LDAP БД,
  # смотрите примеры их (для этих БД) конфигурационных файлов как это сделать.
  # http://wiki.dovecot.org/AuthSpecials
  #userdb prefetch {
  #}

  # Юзер от которого будет работать процесс. Этому юзеру нужен лишь доступ
  # к БД паролей. Только shadow и pam аутентификации реально нужны права рута,
  # работать, остальным можно подсунуть любого пользователя.
  # Заметтьте, что этому пользователю не нужен доступ к почте.
  # Этот юзер был задан выше (который по почте должен шариться :)).
  user = root

  # Директория где chroot`ится процесс. Многие аутентификации не работают,
  # если установить эту опцию, и вообще не имеет смысла это делать если для
  # аутентификации используется пользователь root.
  # Отметтьте, что valid_chroot_dirs не нужен для этой опции.
  #chroot = 

  # Число создаваемых аутентификационных процессов
  #count = 1

  # Требовать действительный клиентский SSL сертификат, или
  # аутентификация будет неудачной.
  #ssl_require_client_cert = no

  # Извлечь (взять) юзернэйм из клиентского SSL сертификата, ипользуя 
  # X509_NAME_oneline() который использует тему Distinguished Name.
  #ssl_username_from_cert = no
}

# Возможно экспортировать интерфейс аутентификации в другие программы,
# например, сервер SMTP который поддерживает Dovecot. Клиентский сокет
# обрабатывает фактическую аутентификацию, - вы можете передать ему имя
# пользователя и пароль и он вернёт OK или отказ. Таким образом можно
# довольно безопасно кому угодно обращаться к нему. Мастер сокет используется:
# a) для запроса, если клиент был успешно аутентифицирован
# b) для поиска в userdb.

# Слушающие сокеты будут созданы мастер-процессом Dovecot с использованием
# настроек из этого авторизационнго раздела
#auth default_with_listener {
#  mechanisms = plain
#  passdb pam {
#  }
#  userdb passwd {
#  }
#  socket listen {
#    master {
#      path = /var/run/dovecot/auth-master
#      # АХТУНГ: Предоставление недоверенным юзерам доступа к мастер-сокету 
#      # влечёт риск в безопасности, поэтому не давайте им слишком широкие
#      # (большие) полномочия!
#      #mode = 0600
#      # Деволтовые user/group от кого запускается dovecot-auth (root)
#      #user = 
#      #group = 
#    }
#    client {
#      path = /var/run/dovecot/auth-client
#      mode = 0660
#    }
#  }
#}

# Предполагается, что сокеты уже запущены, мастер-процесс Dovecot
# тока обрабатывает попытки соединится с ними. Им не нужны никакие
# настройки, кроме как путь до мастер-сокета, поскольку конфигурация сделана
# в другом месте.
# Отметьте, клиентские сокеты должны существовать в login_dir.
#auth external {
#  socket connect {
#    master {
#      path = /var/run/dovecot/auth-master
#    }
#  }
#}

plugin {
  # Тут можно задать некторые дополнительные переменные окружения для
  # майл-процессов. В основном это предназначено для параметров плагинов.
  # Расширение %variable сделано для всех значений.

  # Quota плагин. Много чё поддерживается:
  #   dirsize: Находит и сумирует все файлы в майл-директории
  #   dict: Сохранение квоты в словаре (т.е. SQL)
  #   maildir: Maildir++ квота
  #   fs: Поддержка квоты в ФС только-для-чтения (а как это?)
  #quota = maildir

  # ACL плагин. Конец vfile читает ACLs из "dovecot-acl" файла, в почтовой
  # директории. Также можно задать произвольный путь к глобальному каталогу ACL
  # где лежат ACL для применения на почтовые ящики всех пользователей.
  # Глобальный каталог ACL содержит один файл для каждого почтового ящика,
  # т.е. INBOX или sub.mailbox.
  #acl = vfile:/etc/dovecot-acls

  # Convert плугин. Если установлено, задаёт исходный путь, преобразованный
  # к месту нахождения (default_mail_env).
  #convert_mail = mbox:%h/mail
}

# P.S. 2006-05-29, 17:05 Заколебался... 963 строки...

После чего в этой же директории создаём файл dovecot-sql.conf с таким содержанием:
#!/bin/sh
# Для модуля sql passdb, вам необходима БД с таблицей, где содержатся поля,
# как минимум с userid и password. Если необходимо юзать синтаксис типа
# user@domain, вы должны иметь и поле domain (нелогично как-то...)
#
# Если все пользователи имеют одинаковый uig/gid, и меют предсказуемый
# домашний каталог, то можно использовать статический userdb модуль для
# создания домашних директорий, основанных на userid и domain. В этом случае
# поля home, uid, или gid не нужны в БД.
#
# Если вы предпочтёте использовать модуль sql userdb, то надо добавить
# поля home, uid, и gid. Пример таблицы:
#
# CREATE TABLE users (
#     userid VARCHAR(128) NOT NULL,
#     password VARCHAR(64) NOT NULL,
#     home VARCHAR(255) NOT NULL,
#     uid INTEGER NOT NULL,
#     gid INTEGER NOT NULL,
#     active CHAR(1) DEFAULT 'Y' NOT NULL
# );

# Драйвер БД: mysql, pgsql, sqlite
driver = mysql

# Строка соединения с БД. Специфична для каждого драйвера.
#
# pgsql:
#   Для доступных соединений смотрите документацию PostgreSQL,
#   PQconnectdb функцию libpq.
#
# mysql:
#   Основные операции эмулируют названия опций PostgreSQL:
#     host, port, user, password, dbname
#
#   Но также добавлены новые параметры настрйки:
#     client_flags        - Смотрите мануал по MySQL
#     ssl_ca, ssl_ca_path - Один, или оба пункта, чтобы разрешить SSL
#     ssl_cert, ssl_key   - Для отсыла клиентской части сертификата на сервер
#     ssl_cipher          - Минимально разрешённая безопасность
#                           шифра(default: HIGH)
# 
#   Вы можете соединитсья с UNIX сокетом с использованием его в переменной
#   host: host=/var/run/mysql.sock
#   Отметтьте, что в настоящее время вы не можете использовать
#   пробелы в параметрах.
#
# sqlite:
#   Путь к файлу базы данных.
#
# Примеры:
#   connect = host=192.168.1.1 dbname=users
#   connect = host=sql.example.com dbname=virtual user=virtual password=blarg
#   connect = /etc/dovecot/authdb.sqlite
#
connect = host=localhost dbname=exim user=exim password=exim

# Дефолтовая схема для пароля.
#
# Список поддерживаемых тем: http://wiki.dovecot.org/Authentication
#
default_pass_scheme = PLAIN

# Запрос на получение пароля.
#
# Этот запрос должен вернуть только одну строку с колонками "user" и
# "password". Колонка "user" нужна для того чтобы удостовериться, что
# достали то что надо :)
# Запрос может вернуть и другие поля, имеющие специальное значение.
# Подробности смотрите тут: http://wiki.dovecot.org/AuthSpecials
#
# Обычно используемые подстановки (переменные), полный список:
# http://wiki.dovecot.org/Variables
#   %u = имя пользователя (userid)
#   %n = Юзерская часть из user@domain
#   %d = Доменная часть из user@domain
# 
# Заметтьте, что они могут использоваться как входные данные к запросу
# SQL. Если вывод запроса - любая из этих замен, они не трогаются. Иначе
# былобы трудно иметь эквивалентные имена, содержащие символ '%'.
#
# Примеры:
#   password_query = SELECT `password` FROM `users` WHERE \
# `userid` = '%n' AND `domain` = '%d'
#   password_query = SELECT `pw` AS `password` FROM `users` \
# WHERE `userid` = '%u' AND `active` = 'Y'
# (не забудте убрать перевод строки, экранированный '/')
password_query = SELECT `username` as `user`, `password` FROM  \
`mailbox` WHERE `username` = '%n@%d' AND `active`='1'

# Запрос на извлечение инфы пользователя.
#
# Запрос может вернуть лишь одну строку. Колонки, что вернёт запрос:
#   home - Домашняя директория
#   mail - переменная(-нные) окуружения MAIL
#   system_user - Имя системного пользователя (чтобы получать
#   группы пользователя из /etc/group)
#   uid - системный UID
#   gid - системный GID
#
# Обязательно поле 'home' или 'mail'. 'uid' и 'gid' обязательны. Если
# запрос вернёт более одного ряда, или будут отсутствовать поля, то
# логин автоматически будет неудачным.
#
# Примеры
#   user_query = SELECT `home`, `uid`, `gid` FROM `users` WHERE \
# `userid` = '%n' AND `domain` = '%d'
#   user_query = SELECT `dir` AS `home`, `user` AS `uid`, `group` \
# AS `gid` FROM `users` where `userid` = '%u'
#   user_query = SELECT `home`, 26 AS `uid`, 26 AS `gid` \
# FROM `users` WHERE `userid` = '%u'
#
# (не забудте убрать перевод строки, экранированный '/')
user_query = SELECT `maildir` AS `home`, 26 AS `uid`, 26 AS `gid` \
FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'

# Если вы хотите обойтись одним запросом к БД, вместо двух
# (passdb + userdb), то можете использовать "userdb prefetch"
# в конфиге dovecot.conf. В этом случае надо будет выбрать всё
# одним запросом, и к полям второго запроса (про хомяк и прочее)
# надо будет добавить приставку "userdb_".
# Например:
# password_query = SELECT `userid` as `user`, `password`, `home` \
# as `userdb_home`, `uid` as `userdb_uid`, `gid` as `userdb_gid` \
# FROM `users` WHERE `userid` = '%u'

И пробуем запустить его:
/usr/home/lissyara/>echo 'dovecot_enable="YES"' >> /etc/rc.conf
/usr/home/lissyara/>/usr/local/etc/rc.d/dovecot start
Starting dovecot.

Можно добавлять в админке пользователей, и пробовать зайти. Конечно, почтой ещё и не пахнет, но папочки посоздавать можно :)
  Затем добавляем кое-какие строчки в /etc/make.conf для сборки и дальнейшей пересборки экзима с нужными нам параметрами:
# для exim (если уже задавалась PORTSDIR ранее, то второй раз
# её задавать не надо)
PORTSDIR?=      /usr/ports
.if ${.CURDIR} == ${PORTSDIR}/mail/exim
WITH_MYSQL=             yes
LOG_FILE_PATH?=         syslog
WITH_CONTENT_SCAN=      yes
WITH_DEFAULT_CHARSET?=  koi8-r
WITHOUT_IPV6=           yes
.endif

И устанавливаем exim:
/usr/home/lissyara/>cd /usr/ports/mail/exim
/usr/ports/mail/exim/>make && make install && make clean

После установки проверяем сендмайловую строку в /etc/rc.conf, должно быть так:
sendmail_enable="NONE"

Также надо подправить файл /etc/mail/mailer.conf до такого состояния:
sendmail        /usr/local/sbin/exim
send-mail       /usr/local/sbin/exim
mailq           /usr/local/sbin/exim -bp
newaliases      /usr/local/sbin/exim -bi
hoststat        /usr/local/sbin/exim
purgestat       /usr/local/sbin/exim

После чего приводим конфиг exim к такому виду:
#!/bin/sh
# моя конфига экзма. Будь проклят тот день,
# когда мне пришла в голову мысль подписать
# русские поясния ко всем пунктам! :) Хоть и
# делал я это в первую очередь для себя -
# чтоб лучше понять его, но работа эта оказалась
# слишком масштабная и неблагодарная...


# Имя хоста. Используется в EHLO.
# Фигурирует в других пунктах, если они не заданы -
# типа qualify_domain и прочих..
# Если тут ничё не установлено (строка закомметрована)
# то используется то, что вернёт функция uname()
primary_hostname = mx.lissyara.su

# Вводим данные для подключения к MySQL серверу.
# словечко `hide`, вначале, означает, что при
# вызове проверки конфига командой
# exim -bV config_file эти данные не будут отображаться.
# Если без него - то будут показаны... Формат записи:
# хост/имя_бд/пользователь/пароль
hide mysql_servers = localhost/exim/exim/exim

# Делаем список локальных доменов. Далее этот
# список будет фигурировать в виде +local_domains
# В данном случае домены выбираются из БД MySQL. Также
# можно их просто перечислить через двоеточие. Есть интересная
# возможность, можно указать юзер@[хост] - lissyara@[222.222.4.5]
domainlist local_domains = ${lookup mysql{SELECT `domain` \
                            FROM `domain` WHERE \
                            `domain`='${domain}' AND \
                            `active`='1'}}

# делаем список доменов с которых разрешены релеи.
# Далее этот список будет в виде +relay_to_domains
# Можно использовать символы подстановки, типа:
# .... = *.my.domen.su : !spam.my.domen.su : first.su
# тогда пропускается всё, что похоже на *.my.domen.su, но
# от spam.my.domen.su релеится почта не будет.
domainlist relay_to_domains = ${lookup mysql{SELECT `domain` \
                            FROM `domain` WHERE \
                            `domain`='${domain}' AND \
                            `active`='1'}}

# Составляем список хостов с которых разрешён неавторизованый
# релей. Обычно в нём находятся локальные сети, и локалхост...
# ЛокалХост в двух видах был внесён сознательно - пару раз
# сталкивался с кривым файлом /etc/hosts - результатом было
# непонимание `localhost` но пониманием 127.0.0.1/8
hostlist   relay_from_hosts = localhost:127.0.0.0/8:192.168.0.0/16

# Вводим названия acl`ов для проверки почты. (В общем-то, это
# необязательно, если вы делаете открытый релей, или хотите
# принимать вообще всю почту с любого хоста для любых
# получателей... Тока потом не жалуйтесь что у Вас спам
# и провайдер выкатывает немеряный счёт :))
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

# Прикручиваем антивирус - при условии, что exim собран
# с его поддержкой. В качестве антивиря юзаем ClamAV,
# ибо - ПО должно быть свободным! :)
# Итак, указываем местоположение сокета clamd.
av_scanner = clamd:/var/run/clamav/clamd

# Адрес куда слать на проверку спама (SpamAssasin), но я
# это не юзаю. Не так много у меня спама...
# spamd_address = 127.0.0.1 783

# Имя домена добавляемое для локальных отправителей (реальных
# юзеров системы) т.е. почта отправляемая от root, будет от
# root@домен_указанный_здесь. Если пункт незадан, то используется
# имя хоста из `primary_hostname`. Логичней было бы написать здесь
# lissyara.su, но мне удобней иначе:
qualify_domain = mx.lissyara.su

# Имя хоста для ситуации, обратной предыдущей, - это имя домена
# добавляемое к почте для системных юзеров, ну и вообще для почты
# пришедшей на адрес типа `root`, `lissyara`, & etc... Если этот
# пункт незадан то используется значение полученное из
# предыдущего пункта - `qualify_domain`
qualify_recipient = mx.lissyara.su

# А это как раз кусок вышеописанного анахронизма - про почту в
# виде user@[222.222.222.222] - принимать её или нет. По дефолту
# (когда строка закомментирована) значение - false. Если захотите
# поставить true то надо будет добавить в список доменов
# комбинацию @[] - она означает `все локальные адреса`
allow_domain_literals = false

# Пользователь от которого работает exim
exim_user = mailnull

# группа в кторой работает exim
exim_group = mail

# запрещаем работу доставки под юзером root - в целях безопасности
never_users = root

# Проверяем соответствие прямой и обратной зон для всех хостов.
# Тока зачем это нужно - даже и незнаю... Спам на этом не режется...
# Зато возможны проблемы - если сервер зоны скажет `сервер файлед`
# то почту от этого хоста Вы не получите :)
#host_lookup = *

# Тоже анахронизм (на самом деле, не такой уж анахронизм, но все давно
# забили на ident и закрыли файрволлом tcp:113...) Это проверка - Ваш
# хост спрашивает у удалённого, с которого было подключение, а кто
# собстно ко мне подключился на такой-то порт? Если на удалённом хосте
# работает identd - он может ответить (а может и не ответить - как
# настроить), скажет UID пользователя от которого установлено
# соединение, тип ОС, и имя пользователя. Теперь, понимаете, почему
# у всех оно зарублено и файрволлами позакрыто? :) Это же палево :)
# Тока на мой взгляд, если на сервере всё настроено правильно -
# то вовсе это и не страшно.
# Короче - если хостс поставить * то будет проверять все. Таймаут -
# если поставить 0 то не будет ждать ответа ни от кого. По
# вышеописанным причинам - отключаем
#rfc1413_hosts = *
rfc1413_query_timeout = 0s

# По дефолту, экзим отфутболивает все `неквалифицированные` адреса,
# состоящие тока из локальной части. Для того чтобы разрешить такие письма
# определённых хостов используются эти директивы:
# для `неквалифицированных` отправителей
sender_unqualified_hosts = +relay_from_hosts
# для `неквалифицированных` получателей
recipient_unqualified_hosts = +relay_from_hosts

# Интересный пункт, тока я не вполне понимаю его логику.
# Позволяет выполнять что-то типа - пришло сообщение на
# локальный ящик user%test.su@lissyara.su и
# переправляет его на user@test.su. Делается это для
# перечисленного списка доменов (* - все):
# percent_hack_domains = *

# Если сообщение было недоставлено, то генерится соощение
# об ошибке. Если сообщение об ошибке не удалось доставить
# то оно замораживается на указанный в этом пункте срок,
# после чего снова попытка доставить его. При очередной
# неудаче - сообщение удаляется.
ignore_bounce_errors_after = 45m

# Замороженные сообщения, находящиеся в очереди, дольше
# указанного времени удаляются и генерится сообщение
# об ошибке (при условии, что это не было недоставленное
# сообщение об ошибке :))
timeout_frozen_after = 15d

# собсно на этом штатный конфиг кончился, но
# меня-то это не устраивает... Поэтому пошли пункты,
# почёрпнутые из других источников.

# список адресов, через запятую, на которые засылаются
# сообщения о замороженных сообщениях (о замороженых
# уведомлениях о заморозке, сообщения не генерятся. - я
# надеюсь эта строка понятна :))
#freeze_tell = admin@lissyara.su

# Список хостов, почта от которых принимается, несмотря
# на ошибки в HELO/EHLO (тут указана моя подсеть)
helo_accept_junk_hosts = 192.168.0.0/16

# Через какое время повторять попытку доставки
# замороженного сообщения
auto_thaw = 1h

# Приветствие сервера
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"

# Максимальное число одновременных подключений по
# SMTP. Рассчитывать надо исходя из нагрузки на сервер
smtp_accept_max = 50

# максимальное число сообщений принимаемое за одно соединение
# от удалённого сервера (или пользователя). C числом 25
# я имел проблемы тока один раз - когда у меня три дня лежал
# инет и после его подъёма попёрли мессаги. Но у меня не так
# много почты - всего 30 пользователей.
smtp_accept_max_per_connection = 25

# чё-то про логи и борьбу с флудом - я так понимаю -
# максимальное число сообщений записываемых в логи
smtp_connect_backlog = 30

# максимальное число коннектов с одного хоста
smtp_accept_max_per_host = 20

# Ход ладьёй - для увеличения производительности,
# директория `spool` внутри, разбивается на
# директории - это ускоряет обработку
split_spool_directory = true

# Если у сообщения много адресатов на удалённых хостах,
# то запускатеся до указанного числа максимально число
# параллельных процессов доставки
remote_max_parallel = 15

# при генерации сообщения об ошибке прикладывать
# не всё сообщение, а кусок (от начала) указанного
# размера (иногда полезно и целиком - в таком случае
# просто закомментируйте эту строку)
return_size_limit = 70k

# размер сообщения. У меня стоит относительно большой
# размер (`относительно` - потому, что на большинстве
# хостов оно ограничено 2-5-10мб, либо стоит анлим.)
message_size_limit = 64M

# разрешаем неположенные символы в HELO (столкнулся
# с этим случайно - имя фирмы состояло из двух слов
# и какой-то раздолбай домен обозвал my_firme_name
# прям с подчёркиваниями... Виндовые клиенты при
# соединении радостно рапортовали о себе
# `vasya.my_firme_name` ну а экзим их футболил :))
helo_allow_chars = _

# Принудительная синхронизация. Если отправитель
# торопится подавать команды, не дождавшись ответа,
# то он посылается далеко и надолго :) Немного,
# спам режется.
smtp_enforce_sync = true

# Выбираем, что мы будем логировать
# + - писать в логи,
# - - Не писать в логи.
# +all_parents - все входящие?
# +connection_reject - разорваные соединения
# +incoming_interface - интерфейс (реально - IP)
# +lost_incoming_connections - потеряные входящие
# соединения
# +received_sender - отправитель
# +received_recipients - получатель
# +smtp_confirmation - подтверждения SMTP?
# +smtp_syntax_error - ошибки синтаксиса SMTP
# +smtp_protocol_error - ошибки протокола SMTP
# -queue_run - работа очереди (замороженные мессаги)
log_selector = \
    +all_parents \
    +connection_reject \
    +incoming_interface \
    +lost_incoming_connection \
    +received_sender \
    +received_recipients \
    +smtp_confirmation \
    +smtp_syntax_error \
    +smtp_protocol_error \
    -queue_run

# Убираем собственную временную метку exim`a из логов, её ставит
# сам syslogd - нефига дублировать
syslog_timestamp = no



### конфигурация ACL для входящей почты
begin acl

# Эти правила срабатывают для каждого получателя
acl_check_rcpt:


  # принимать сообщения которые пришли с локалхоста,
  # не по TCP/IP
  accept  hosts = :

  # Запрещаем письма содержащие в локальной части
  # символы @; %; !; /; |. Учтите, если у вас было
  # `percent_hack_domains` то % надо убрать.
  # Проверяются локальные домены
  deny    message       = "incorrect symbol in address"
          domains       = +local_domains
          local_parts   = ^[.] : ^.*[@%!/|]

  # Проверяем недопустимые символы для
  # нелокальных получателей:
  deny    message       = "incorrect symbol in address"
          domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

  # Принимаем почту для постмастеров локальных доменов без
  # проверки отправителя (я закомментировал, т.к. это -
  # основной источник спама с мой ящик).

  accept  local_parts   = postmaster
          domains       = +local_domains

  # Запрещщаем, если невозможно проверить отправителя
  # (отсутствует в списке локальных пользователей)
  # У себя я это закоментил, по причине, что некоторые
  # железяки (принтеры, & etc) и программы (Касперский, DrWEB)
  # умеют слать почту, в случае проблем но не умеют ставить
  # нужного отправителя. Такие письма эта проверка не пускает.
#  require verify        = sender

  # Запрещщаем тех, кто не обменивается приветственными
  # сообщениями (HELO/EHLO)
  deny    message       = "HELO/EHLO require by SMTP RFC"
          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}

  # Принимаем сообщения от тех, кто аутентифицировался:
  # Вообще, большинство конфигов в рунете - это один и тот же
  # конфиг написанный Ginger, в котором этот пункт расположен
  # внизу. Но при таком расположении рубятся клиенты с adsl,
  # ppp, и прочие зарезанные на последующих проверках. Но это
  # жа неправильно! Этом мои пользователи из дома! Потому
  # я это правило расположил до проверок.
  accept  authenticated = *

# Рубаем нах, тех, кто подставляет свой IP в HELO
  deny    message       = "Your IP in HELO - access denied!"
          hosts         =  * : !+relay_from_hosts : !81-196.lissyara.su
          condition     = ${if eq{$sender_helo_name}\
    {$sender_host_address}{true}{false}}


# Рубаем тех, кто в HELO пихает мой IP (2500 мудаков за месяц!)
  deny    condition     = ${if eq{$sender_helo_name}\
    {$interface_address}{yes}{no}}
          hosts         = !127.0.0.1 : !localhost : *
          message       = "main IP in your HELO! Access denied!"

# Рубаем тех, кто в HELO пихает только цифры
# (не бывает хостов ТОЛЬКО из цифр)
  deny    condition     = ${if match{$sender_helo_name}\
    {\N^\d+$\N}{yes}{no}}
          hosts         = !127.0.0.1 : !localhost : *
          message       = "can not be only number in HELO!"

  # Рубаем хосты типа *adsl*; *dialup*; *pool*;....
  # Нормальные люди с таких не пишут. Если будут
  # проблемы - уберёте проблемный пункт (у меня клиенты
  # имеют запись типа asdl-1233.zone.su - я ADSL убрал...)
  deny    message       = "your hostname is bad (adsl, poll, ppp & etc)."
          condition     = ${if match{$sender_host_name} \
                               {adsl|dialup|pool|peer|dhcp} \
                               {yes}{no}}

  # Задержка. (это такой метод борьбы со спамом,
  # основанный на принципе его рассылки) На этом рубается
  # почти весь спам. Единственно - метод неприменим на 
  # реально загруженных MTA - т.к. в результате ему
  # приходится держать много открытых соединений.
  # но на офисе в сотню-две человек - шикарный метод.
  #
  # более сложный вариант, смотрите в статье по exim и 
  # курьер имап. Т.к. там метод боле умный (просто правил
  # больше :), то можно и на более загруженные сервера ставить)
  warn
        # ставим дефолтовую задержку в 20 секунд
        set acl_m0 = 30s
  warn
        # ставим задержку в 0 секунд своим хостам и 
        # дружественным сетям (соседняя контора :))
        hosts = +relay_from_hosts:213.234.195.224/28:80.253.9.18/32
        set acl_m0 = 0s
  warn
        # пишем в логи задержку (если оно вам надо)
        logwrite = Delay $acl_m0 for $sender_host_name \
[$sender_host_address] with HELO=$sender_helo_name. Mail \
from $sender_address to $local_part@$domain.
        delay = $acl_m0

                          
  # Проверка получателя в локальных доменах.
  # Если не проходит, то проверяется следующий ACL,
  # и если непрошёл и там - deny
  accept  domains       = +local_domains
          endpass
          message       = "In my mailserver not stored this user"
          verify        = recipient

  # Проверяем получателя в релейных доменах
  # Опять-таки если не проходит -> следующий ACL,
  # и если непрошёл и там - deny
  accept  domains       = +relay_to_domains
          endpass
          message       = "main server not know how relay to this address"
          verify        = recipient

  # Рубаем тех, кто в блэк-листах. Серваки перебираются
  # сверху вниз, если не хост не найден на первом, то
  # запрашивается второй, и т.д. Если не найден ни в одном
  # из списка - то почта пропускается.
  deny    message       = you in blacklist: $dnslist_domain \n $dnslist_text
          dnslists      = opm.blitzed.org : \
                          cbl.abuseat.org : \
                          bl.csma.biz : \
                          dynablock.njabl.org

  # Разрешаем почту от доменов в списке relay_from_hosts
  accept  hosts         = +relay_from_hosts

  # Если неподошло ни одно правило - чувак явно ищет
  # открытый релей. Пшёл прочь. :)
  deny    message       = "Homo hominus lupus est"




# Тут идут ACL проверяющие содержимое (тело) письма.
# Без них будут пропускаться все сообщения.

acl_check_data:

  # Проверяем письмо на вирусы
  deny malware = *
  message = "In e-mail found VIRUS - $malware_name"

  # Если есть необходимость - тут проверки на спам

  # Пропускаем остальное
  accept



# чё делаем с почтой
begin routers

# Поиск маршрута к хосту в DNS. Если маршрут не найден в DNS -
# то это `унроутабле аддресс`. Не проверяются локальные
# домены, 0.0.0.0 и 127.0.0.0/8
dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more

# смотрим альясы
system_aliases:
    driver      = redirect
    allow_fail
    allow_defer
    data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
            `address`='${quote_mysql:$local_part@$domain}' OR \
                `address`='${quote_mysql:@$domain}'}}

# Всё что осталось - это локальные адресаты.
# Доставляем почту в dovecot
dovecot_user:
  driver = accept
  condition = ${lookup mysql{SELECT `goto` FROM \
  `alias` WHERE \
  `address`='${quote_mysql:$local_part@$domain}' OR \
  `address`='${quote_mysql:@$domain}'}{yes}{no}}
  transport = dovecot_delivery


# начинаются транспорты - как доставляем почту
begin transports

# Доставка на удалённые хосты - по SMTP
remote_smtp:
  driver = smtp

# Доставка локальным адресатам - в dovecot
# Надо заметить что тут использовалась ранее прямая доставка
# в директорию, но щас с портами стал-таки устанавливаться deliver
# программа dovecot занимающаяся доставкой мессаг.
# Соответственно юзаем его.
dovecot_delivery:
  driver = pipe
  command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
  message_prefix =
  message_suffix =
  delivery_date_add
  envelope_to_add
  return_path_add
  log_output
  user = mailnull


# Имя программы
address_pipe:
  driver = pipe
  return_output

# Транспорт для автоответов
address_reply:
  driver = autoreply



# Начинаются повторы недоставленных писем.
begin retry

# Этот кусок я не трогал. Думаю разработчики лучше знают,
# какие тут должны быть цифирьки. Если же вы это знаете
# лучше их - меняйте. Хотя... А какого, если Вы такой
# умный, читаете этот мануал? Может ну, их, цифирьки, а? :)
# Address or Domain  Error   Retries
# -----------------  -----   -------
*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h


# преобразование адресов. У меня такого нету.
begin rewrite


# Секция авторизации при отправке писем. Ввиду того,
# что почтовых клиентов много, и все всё делают
# по-своему, то и механизмов авторизации три...
begin authenticators

# А вот по какому методу авторизуется оутглюк - я уже и
# не помню... Хотя в своё время долго ковырялся,
# пока настроил... Толь plain, толь login...
auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$auth2}' AND `password` = \
                     '${quote_mysql:$auth3}'}{yes}{no}}
  server_prompts = :
  server_set_id = $auth2

# Вроде по этому оутглюк, а по предыдущему нетскейп.
auth_login:
  driver = plaintext
  public_name = LOGIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$auth1}' AND `password` = \
                     '${quote_mysql:$auth2}'}{yes}{no}}
  server_prompts = Username:: : Password::
  server_set_id = $auth1

# А так авторизуется "Летучая Мышь" - TheBat!
auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT `password` FROM \
                        `mailbox` WHERE `username` \
                        = '${quote_mysql:$auth1}'}{$value}fail}
  server_set_id = $auth2

# Фсё. Конфиг кончился. Два дня убил.
# &copy; lissyara       2006-02-25, 01:19

По окончании конфигурения экзима ставим ClamAV (вообще-то exim уже можно запускать ибо почта идущая с локалхоста на вирусы не проверяется и потому прекрасно будет уходить и раскладываться в директории. Но - снаружи ничё не отправить)
/usr/home/lissyara/>cd /usr/ports/security/clamav
/usr/ports/security/clamav/>make install && make clean

Все опции я оставил по-дефолту (не выбрал ни одной - ибо по-умолчанию они все пустые)/ После установки добавляем строку в /etc/rc.conf и запускаем exim, предварительно прибив sendmail, также запускаем и обновляем clamav:
/usr/home/lissyara/>echo 'exim_enable="YES"' >> /etc/rc.conf
/usr/home/lissyara/>killall -9 sendmail
/usr/home/lissyara/>killall -9 sendmail
No matching processes were found
/usr/home/lissyara/>
/usr/home/lissyara/>/usr/local/etc/rc.d/exim.sh start
Starting exim.
/usr/home/lissyara/>echo 'clamav_clamd_enable="YES"' >> /etc/rc.conf
/usr/home/lissyara/>/usr/local/etc/rc.d/clamav-clamd start
Starting clamav_clamd.
LibClamAV Warning: **************************************************
LibClamAV Warning: ***  The virus database is older than 7 days.  ***
LibClamAV Warning: ***        Please update it IMMEDIATELY!       ***
LibClamAV Warning: **************************************************
/usr/home/lissyara/>freshclam
freshclam: Команда не найдена.
/usr/home/lissyara/>rehash
/usr/home/lissyara/>freshclam
ClamAV update process started at Wed May 31 10:20:58 2006
main.cvd is up to date (version: 38, sigs: 51206, f-level: 7, builder: tkojm)
Downloading daily.cvd [*]
daily.cvd updated (version: 1500, sigs: 5826, f-level: 8, builder: arnaud)
Database updated (57032 signatures) from database.clamav.net
 (IP: 213.219.245.4)
Clamd successfully notified about the update.
/usr/home/lissyara/>

Также неплохобы воткнуть строку про обновление антивирусных баз в рутовый планировщик - пару раз в сутки. Теперь можно создавать виртуальные домены и ящики. Ну, и после этого пробуем отправить письмо:
May 31 11:02:56 bsd-6-1 exim[26788]: 2006-05-31 11:02:56 exim 4.62 daemon started: pid=26788, -q30m, listening for SMTP on port 25 (IPv4)
May 31 11:03:05 bsd-6-1 dovecot: IMAP(lissyara@test-1.su): Disconnected in IDLE
May 31 11:03:05 bsd-6-1 dovecot: imap-login: Login: user=<lissyara@test-1.su>, method=PLAIN, rip=192.168.20.141, lip=192.168.20.100
May 31 11:03:20 bsd-6-1 exim[26792]: 2006-05-31 11:03:20 1FlKjg-0006y8-7w <= lissyara@test-1.su H=(lissyara) [192.168.20.141] I=[192.168.20.100]:25 P=esmtpa A=auth_login:lissyara@test-1.su S=755 id=001701c68480$3d744c30$8d08a8c0@derzhava.ru from <lissyara@test-1.su> for liss@test-1.su
May 31 11:03:20 bsd-6-1 dovecot: imap-login: Login: user=<lissyara@test-1.su>, method=PLAIN, rip=192.168.20.141, lip=192.168.20.100
May 31 11:03:20 bsd-6-1 exim[26793]: 2006-05-31 11:03:20 1FlKjg-0006y8-7w => liss <liss@test-1.su> R=dovecot_user T=dovecot_delivery
May 31 11:03:20 bsd-6-1 exim[26793]: 2006-05-31 11:03:20 1FlKjg-0006y8-7w Completed
May 31 11:03:20 bsd-6-1 dovecot: IMAP(lissyara@test-1.su): Disconnected: Logged out

Всё нормально. Почта ходит.

Выводы: Сам dovecot мне оччень понравился, есть только два НО.
1. С ним в комплекте должна идти утилита delivery - она занимается доставкой почты в ящики пользователей. Её нет... Почему - непонятно. Поэтому пришлось раскладывать самим экзимом.
2. Trash (Корзина, или удалённые) - не работает... Написано что оно в тестовм режиме, да к тому же похоже что под формат mailbox а я юзаю maildir....

P.S. Разобрался с плагином trash - смысл такой - если у юзера приходит сообщение и получается оверквота - то удаляются мессаги из указанных в конфиге директорий, в указанном порядке. Выглядит примерно так:
/usr/local/etc/dovecot.conf
plugin {
 trash = /usr/local/etc/dovecot-trash.conf
}

/usr/local/etc/dovecot-trash.conf
1 Spam
2 Trash
3 Sent

Т.е. вначале удаляются из папки Spam, потом из Trash и т.д.
Короче, на мой взгляд, абсолютно бесполезная фича... Лучшеб нормальную папку "Удалённые" привернули, которая на стороне сервера, а не клиента...

P.S.2 Вылезли такие грабли - на новых MySQL (я на 5-м столкнулся) бывает что после установки такая ругань в логах:
Jul 5 00:09:21 lissyara dovecot: auth-worker(default): mysql: Connect failed to localhost (dovecot): Доступ закры
т для пользователя 'exim'@'localhost' (был использован пароль: ДА) - waiting for 1 seconds before retry

Причём ругань абсолютно необоснованная - пароль и пользователь верные. Лечится таким, примерно запросом:
SET PASSWORD FOR 'exim'@'localhost' = OLD_PASSWORD('exim');

Соответственно в нём подставить свои данные...



размещено: 2006-05-31,
последнее обновление: 2010-11-24,
автор: lissyara


Urgor, 2006-06-14 в 8:39:22

Ну Лисяра! Ну матерый человечище! Признаюсь едва дочитал до конца, а как представлю сколько времени ты на написание потратил — страшно делается. Респект тебе огромный! Я как раз сам пытался разобраться, а тут такая статья! :)

Urgor, 2006-06-16 в 16:39:25

Я убью тебя, лодочник.
"user_query = SELECT `maildir` AS `home`, 26 AS `uid`, 26 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'", т.е. uid всегда будет 26! А dovecot на это говорит: "Logins with UID 26 (user admin@test.ru) not permitted (see first_valid_uid in config file)"

lissyara, 2006-06-16 в 17:19:40

==========================
# Действительный диапазон UID для пользователей, дефолт от 500 и выше. Это
# необходимо для того, чтобы пользователи не смогли залогиниться как
# демоны или какие-либо системные пользователи. Запрет для логина `root`а
# жёстко забит в код `dovecot`а и не может быть разрешён даже если
# установить 'first_valid_uid' = 0.
first_valid_uid = 25
#last_valid_uid = 0
=========================
не умничаем, а делаем копи-пасте всего конфига :)))
P.S. Конечно, наверно это не совсем правильно, может даже совсем неправильно от этого UID делать... Но я так привык :(

Urgor, 2006-06-19 в 7:57:54

Лис, бля буду, так и делал, тока в начале адреса поменял... После того как завел юзера с UID=501, и first_valid_uid = 500... кот запустился, естессно ексим перевел под этого же юзера. странно. может это из-за винбинда? но у не го уиды старше 10000... Надо на нулевой машине попробовать будет.
Да, есть еще один коcячек. Почта падала в папку /var/mail/user@domain/ а забирать он пытался из /var/mail/user@domain/new (и говорил что писем нет), пришлось поправить папку на:
directory = /var/mail/exim/${lookup mysql{SELECT \
           `maildir` FROM `mailbox` WHERE `username` \
            = '${quote_mysql:$local_part@$domain}'}}new/

john, 2006-07-19 в 17:35:06

У меня проблема! Все сделал по вышим конфигамю. все запустилось без ошыбок, но при авторизации, dovecot выдает грабли!
Вот лог



dovecot: auth-worker(default): sql(john,10.100.1.100): query: SELECT `username` as `user`, `password` FROM  `mailbox` WHERE `username` = 'john@' AND `active`='1'

mail1 dovecot: auth(default): client in: AUTH   1       PLAIN   service=POP3    lip=10.100.1.105        rip=10.100.1.100      resp=AGpvaG4AMTIz

dovecot: auth-worker(default): sql(john,10.100.1.100): unknown user

dovecot: auth(default): client out: FAIL  1       user=john

dovecot: pop3-login: Disconnected: user=<john>, method=PLAIN, rip=10.100.1.100, lip=10.100.1.105


По этому логу я понял что переменная %d не содержит тот домен с который содержиться в адресе а должно бы писаться

dovecot: auth-worker(default): sql(john,10.100.1.100): query: SELECT `username` as `user`, `password` FROM  `mailbox` WHERE `username` = 'john@xxx.com' AND `active`='1'


Yanis.sql.ru, 2006-08-04 в 22:21:22

После установки postfixadmin не работал, на новый создаваемый домен ругался, что Домен уже существует, я добавил домен напрямую в БД, но он не мог его нормально открыть даже на редактирование, также не мог создать пользователя - ругался на пустой пароль и уже существующего пользоваетеля с таким именем.
Вылечилось установкой magic_quotes_gps = On в php.ini

razor, 2006-08-15 в 17:56:32

" но это не есть правильно, ибо при обновлении при помощи программы portupgrade это потеряется (сам влетел, собрал с кодировкой и коллатион cp1251, а после обновления клиента получил знаки вопроса вместо русских букв), правильно - добавить в файл /etс/make.conf примерно такую секцию:"

а почему б не юзать специальный для этого файлик /usr/local/etc/pkgtools.conf ?

vendigo, 2006-09-01 в 16:01:54

При запуске довекота столкнулся с такими граблями :
auth-worker(default): mysql: Connect failed to localhost (exim):Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) - waiting for 1 second before retry
причем не лечится путем запроса SET PASSWORD FOR 'exim'@'localhost' = OLD_PASSWORD('exim');

Юрий, 2006-10-12 в 14:32:24

Я делал по похожой статье и по своим мыслям , все вроде ОК , только проблема в dovecot  .. спасате мужики !!


unix# cat /usr/local/etc/dovecot.conf
## Dovecot configuration file

base_dir = /var/run/dovecot/
protocols = pop3
disable_plaintext_auth = no

ssl_disable = yes
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
login_process_size = 64
login_greeting = Hello there!
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
login_log_format = %$: %s
default_mail_env = maildir:/var/spool/mail/tradehouse.local/%n/Maildir
mail_extra_groups = mail
# mail_debug = yes
mail_log_prefix = "%Us(%u): "
verbose_proctitle = yes
first_valid_uid = 1000
first_valid_gid = 0

protocol pop3 {
login_executable = /usr/local/libexec/dovecot/pop3-login
mail_executable = /usr/local/libexec/dovecot/pop3
pop3_uidl_format = %08Xu%08Xv
pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
  }

 auth_executable = /usr/local/libexec/dovecot/dovecot-auth
 auth_process_size = 256
 auth_verbose = yes
 #auth_debug = yes
 #auth_debug_passwords = yes
 auth default {
 mechanisms = plain
 passdb passwd {
               }
 passdb sql {
 args = /usr/local/etc/dovecot-sql.conf
            }
 userdb passwd {
           }
 userdb sql {
 args = /usr/local/etc/dovecot-sql.conf
            }
   }
                                   unix#


unix# cat /usr/local/etc/dovecot-sql.conf
driver = mysql
connect = host=localhost dbname=maildb user=sqlmail password=dolphin.hfijcnrf
default_pass_scheme = PLAIN
password_query = SELECT clear_pw AS password FROM users WHERE username = '%n'
user_query = SELECT maildir AS home, 1981 AS uid, 1981 AS gid FROM users WHERE username = '%n'

Выдает ошибку при telnet localhost 110

unix# telnet localhost 110
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there!
user dolphin
+OK
pass .hfijcnrf
+OK Logged in.
-ERR No INBOX for user.
Connection closed by foreign host.


ЛОГ

Oct 12 13:31:43 unix dovecot: auth(default): passwd(dolphin,127.0.0.1): password mismatch
Oct 12 13:31:43 unix dovecot: pop3-login: Login: user=<dolphin>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, secured
Oct 12 13:31:43 unix dovecot: POP3(dolphin): lstat(/var/spool/mail/tradehouse.local/dolphin/Maildir/cur) failed: Permission denied
Oct 12 13:31:43 unix dovecot: POP3(dolphin): lstat(/var/spool/mail/tradehouse.local/dolphin/Maildir/cur) failed: Permission denied
Oct 12 13:31:43 unix dovecot: POP3(dolphin): Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2006-10-12 13:31:43]
Oct 12 13:31:43 unix dovecot: POP3(dolphin): No INBOX for user top=0/0, retr=0/0, del=0/0, size=0


unaos, 2006-10-25 в 16:22:01

john,  получилось разрулить с пустым доменом ?

tiger, 2006-11-30 в 21:43:23

замечание по поводу PHP. я сам использую 4ый. не поленился и посмотрел на 5ый (в портах). там кстати тоже по дефолту стоит APACHE "Build Apache module" off
Видимо дело не в желании перегнать на 5ую ветку, это какие личные соображения мейнтейнера
кроме того неясны причины отключения SSL. неужели он есть просит если присутствует?:)
Это так, по диагонали читал, в целом респект тебе lissyara

Daemony, 2006-12-10 в 16:26:55

Есть одно замечание:

В dovecot-sgl.conf используется тип авторизации PLAIN.
В /usr/local/www/postfixadmin/config.inc.php стоит по умолчанию

$CONF['encrypt'] = 'md5crypt';

Так вот, с такой постановой, при добавлении пользователей через веб-интерфейс, нифига работать не будет - Dovecot ругается на ошибки авторизации. У меня по крайней мере не заработало (ковырялся два часа :( ....)

а в логах одна хрень:

dovecot: pop3-login: Disconnected: user=<admin@myhost.org>, method=PLAIN, rip=bla.bla.bla.bla, lip=bla.bla.bla.bla, TLS

Проблема решилась так:
Нужно исправить postfixadmin/config.inc.php:

$CONF['encrypt'] = 'cleartext';

Правда в этом случае в MySQL пароли будут лежать в чистом виде, а нас это конечно не устраивает:

Поэтому в dovecot-sgl.conf пишем

default_pass_scheme = MD5

Авторизация проходит. Пароль пользователя в базе лежит в виде md5 хеша.

------------------

А вообще Lissyara спасибо тебе большое за труд.
Давно искал нормальный перевод конфига dovecot. Нашел его на твоем сайте. :)

Сергей, 2007-01-20 в 20:39:00

squirrelmail + subj кто-нить ставил?
у меня лично получается полная чушь
то есть не могу создать папку, в которой могут быть подпапки
точнее могу при использовании outlook... а вот squirrelmail обламывается :(

SGI, 2007-02-27 в 17:09:09

Ура!! Это первая статья, после которой я решился-таки попробовать Exim. Предыдущие пугали обилием непонятных настроек, а тут все разжевано. Собственно, была еще одна причина перехода - с новым ClamAV перестал работать скрипт проверки из-под Постфикса. Сейчас все ок. Все-таки Постфикс в части сопряжения с антивирусами кривоват. Перевел на Экзим два сервера - один с практически таким же конфигом (mysql, dovecot), второй - шлюз для Exchange. SpamAssassin отключил нафиК в обоих случаях :-) Посмотрю, сколько будет проходить спама, если что - dspam еще прикручу. СПАСИБО!!!

Ilya98, 2007-03-04 в 15:52:35

Уважаемый Лисяра!

Эта информация является не Вашей, а в том числе добытой из Инета! Да она собрана Вами по кускам, отлично обработана,
но не авторская :)

 например, форум Ginger
http://forum.ru-board.com/topic.cgi?forum=8&topic=4514&start=400  
в том числе решение                                    
SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('mypass');

А посему Ваше предложение (см. внизу и этой страницы) не совсем корректно :)
"Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу, откуда взяли."

Ilya98

Ilya98, 2007-03-04 в 15:58:58

В любом случае, за проделланную Вами работу огромное спасибо!

Иметь такой подстрочник очень приятно.

Иногда просто нет сил его вести, а тут .... Да еще с русскими комментами.

lissyara, 2007-03-04 в 16:26:06

Клёво... Спасибо конечно, но при таком подходе, ничто кроме написанного авторами программ не является авторским.
P.S. Информация об OLD_PASSWORD тоже не является вашей авторской, корректней было бы указать линк на документацию MySQL, а не ваш пост на форуме :))
===============
Ну и я всё же не понял претензий.
Не нравиться перевод конфигов? Переведи сам - лучше.
Не нравиться статья? Напиши сам - лучше.
Ещё что-то не нравиться? Ответ ты уже знаешь :)

Ilya98, 2007-03-05 в 15:34:36

1)В посте на форуме лежит, в том числе, ссылка на доку мускула :)
2)Претензий к содержимому нет, есть спасибо

IMHO. "Ничто кроме написанного авторами программ не является авторским"

lissyara, 2007-03-05 в 16:19:51

Конценсус :)))

Ilya98, 2007-03-05 в 22:55:54

Советую все же убрать приписку снизу. Т.к. Вы нарушаете GNU Free Documentation License.
Почитать об это подробнее можно здесь:
http://ru.wikipedia.org/wiki/GNU_Free_Documentation_License

lissyara, 2007-03-05 в 23:54:56

Вы уж извините, но ваш любимый форум, и те кто его поддерживают - они не нарушают никаких лицензий, тупо делая Сtrl+С и Ctrl+V со статей?
Ну ладно, что скопировал.
Ну ладно, что вместе с комментами, не отделив от текста.
Но какого ху... себя автором подписывать?
И потом не отвечать ни на письма, ни на формы обратной связи. Пока не пошёл на форум и прямо не спросил про воровство - никто не часался.
Зато после этого быстро удалили статьи и заодно мой аккаунт на форуме, видно, чтобы не смущал честных посетителей. Я ещё два раза регался чтобы высказать своё мнение - цивильно, без мата. Оба раза топики тут же удалялись, вместе с моей учёткой.
Я буду приписывать что угодно, и где считаю нужным, пока в инете не переведутся такие уроды.
А значит - всегда.
P.S. По правилам Русского Языка, слово 'вы' пишется с маленькой буквы. Иначе - это грамматическая ошибка :) (Просто вспомнилось - не в укор :). И вообще, всё вышесказанное относиться не к вам, а к первому линку.)

lissyara, 2007-03-06 в 0:05:45

Кстати, про документацию и прочий свободный софт - очень сложный вопрос как толковать документы типа моих мануалов - они  или производные  от собранного материала, или же что-то придуманное мною (тот же постфиксадмин никто вроде до меня не крутил к exim). Да и ушёл я довольно далеко от исходного конфига Ginger (Кстати - в одной из первых статей указано, что начинал с ёе конфига).
Короче вопрос спорный, но во избежание воровства, из-за которого это и появилось (опять же - сравнительно недавно, когда стали передирать прям вместе с меню сайта, тупо сохраняя HTML - благо графики у меня принципиально нет), оставлю как есть.
P.S. Больная мозоль: Вышеупомянутый же сайт требовал обязательного согласия автора на перепечатку (это моей же статьи!!). Так что хватит пустого спору...

Аноним, 2007-03-06 в 13:58:04

В тысячный раз повторяю, РОССИЯНЕ, не идите на поводу у  ПИНДОСИИ и её ДЕНЕГ. Нет там более ничего и небыло никогда.
Хочу предоставить лиц. Microsoft для windows/office и т.п. для России? Интересно? Смысл в следующем:

1. Есть факт покупки легально приобретённого Windows.
2. Есть наклеенный сертификат
3. Ключ на сертификате совпадает с установленным в системе.

ВСЁ. Никаких 500 миллонов видов лицензий. :-) Зачем идти на поводу у ПИНДОСИИ? Деньги, деньги. Они нужны не всем и не в таком количестве, которое навязывают.

Для Ильи посоветую адаптироваться не в сторону денег(пиндосии), а стать нормальным человеком без тараканов в голове.
И смысл поста мне несовсем понятен, если что-то помогает, интересно,то пусть буржуи переживают. Хватило бы ума РОССИИ вступить в ВТО и забить на авторские права(авторское бабло).

Хотите денег? Почитайте этого автора (Дмитрий Неведимов - Религия денег) и посмотрите, как на воздухе делают деньги

P.S. Если вам уже навязали что-то (будь то авторские права и т.п.), не значит кчто это круто, правильно и вообще необходимо. Просвещайтесь.

Ilya98, 2007-03-07 в 11:56:02

Это тянет на +++.
Но не смог сдержаться. Извини, Лисяра!
1) Вы с Большой буквы, как признак уважения :) писать Надо с Большой Буквы :) Это тоже по правилам русского языка :)
2) Аноном заткнись - ты не в теме. Прочитай содержимое по ссылке.
3) © имя (наименование) автора или иного правообладателя, год первого
опубликования документа
Каждый имеет право воспроизводить, распространять и/или вносить изменения в
настоящий Документ в соответствии с условиями GNU Free Documentation License,
Версией 1.2 или любой более поздней версией, опубликованной Free Software
Foundation;
данный Документ не содержит Неизменяемых разделов, не содержит
Текста, помещаемого на первой странице обложки и не содежит Текста,
помещаемого на последней страницы обложки.
Копия лицензионного соглашения включена в секцию, озаглавленную "GNU
Free Documentation License".
Так было бы честнее, да и правильнее.

Gruber, 2007-04-26 в 15:38:50

Небольшая поправочка:
Daemony  писал -
Поэтому в dovecot-sgl.conf пишем
default_pass_scheme = MD5

в новой версии dovecot нужно писать MD5-CRYPT
иначе ошибка остаётся

ALex_hha, 2007-04-26 в 18:29:36

Имхо, болле правильно запретить использовать plain text based методы аутентификации, если клиент не использует SSL/TLS. К счастью dovecot позволяет это. И не заморачиваться с шифрованием самих паролей в базе.

playnet, 2007-05-14 в 12:57:38

>По правилам Русского Языка, слово 'вы' пишется с маленькой буквы. Иначе - это грамматическая ошибка :)
"Вы" пишется с большой при обращении к конкретному человеку, признак уважения. "вы" с маленькой, когда обращение к группе лиц. И о каких ошибка ты говоришь, если сам писать не умеешь...
"И вообще, всё вышесказанное относиться не к вам, а к первому линку"
В данном случае получается "относИться", ибо мягкий знак говорит о том, что это неопределенная форма. (что делаТЬ) относиТЬся, (что делаеТ) относиТся.
И поправь плиз все подобные слова в тексте. Статьи хорошие, но твоя безграмотность просто поражает.
Хоть в ворд загружай перед вставкой, он тебе выделит ошибки.
И почисти уже комменты, перепалка про лицензии явный оффтоп.

lissyara, 2007-05-14 в 13:42:03

перепалку не уберу, а вот ошибки поправлю.
а ворда у меня нет :)
lissyara$ uname -v
FreeBSD 7.0-CURRENT #0: Tue May  8 08:57:57 MSD 2007

playnet, 2007-05-15 в 22:49:33

Хы, первый автор, который не трет неугодные комменты, а  нормально отвечает...
респект!
(оффтоп) у одного знакомого ОО стоял с проверкой грамматики...
Хотя я сам админ, и могу сказать: на рабочей машине фря — изврат. Для себя я выбрал генту, как вменяемый вариант pcBSD и подобные.

playnet, 2007-05-15 в 23:57:01

кстати, хорошая подборка факов по exim..
http://forum.ru-board.com/topic.cgi?forum=8&topic=4514&start=0

okkay, 2007-05-16 в 6:56:51

поставил exim и dovecot по статье,
как мне создавать почтовые аккаунты?
и что такое вообще: `goto` text NOT NULL - в таблице alias. Так как в ../exim/configure именно это поле goto участвует в выборке.
Создал пользователя таким образом:
insert into mailbox (username,password,name,quota,domain) values ('pupkin','pup'),'vasya',1024,'mydomain.ru'); - после чего в /var/mail/exim - ничего не создалось. Куда рыть?(пока во время испытаний использую plain аутентификацию)
Потом в рабочей станции в клиенте The Bat! создал почтовый ящик, прописал все настройки.
Жму: получить и доставить почту...
16.05.2007, 11:42:46: FETCH - Соединение с POP3 сервером прошло удачно
!16.05.2007, 11:42:48: FETCH - Сервер сообщает об ошибке: -ERR Authentication failed.
куда рыть?
спасибо за ответы

lissyara, 2007-05-16 в 8:58:19

2 playnet
я тоже тру. Когда с матом - бывает у человека что-то не получается, он в камментах такие перлы оставляет, что даже я, после 2 лет службы в стройбате, такого не слышал :))
А если идёт диалог - не вижу смысла тереть. Иначе нить потеряется :)
2 okkay
поставь админку. Там все таблицы взимосвязаны. Заодно про роутеры почитай и конфиг посмотри в их же части - много вопросов сами пропадут.

Mi©k, 2007-05-24 в 16:30:35

Рацпредложение
два правила
# Рубаем нах, тех, кто подставляет свой IP в HELO
# Рубаем тех, кто в HELO пихает мой IP (2500 мудаков за месяц!)
заменяем одним
# Рубаем тех, кто в HELO пихает IP (
 deny  message = Not accepted - IP as HELO
       hosts    = !127.0.0.1 : !192.168.1.0/24
       condition = ${if isip {$sender_helo_name}}

reLax, 2007-05-26 в 11:05:19

Ошибка в авторизации в SQL запросе. Надо так:

auth_plain:
 driver = plaintext
 public_name = PLAIN
 server_condition = ${lookup mysql{SELECT `username` FROM \
                    `mailbox` WHERE `username` = \
                    '${quote_mysql:$2}' AND `password` = \
                    '${quote_mysql:$3}'}{yes}{no}}
 server_prompts = :
 server_set_id = $2

lissyara, 2007-05-26 в 13:54:06

Исправил на ещё более корректный вариант - в соответствии с новой документацией (использовать $auth1 вместо $1 и т.д.).

sng, 2007-06-18 в 21:39:03

Спасибо, Лиссяра! Отличный повод для установки exim+dovecot, статья сподвигнула меня установить что-то новое. Только по поводу алиасов. Есть косячок. Если мы заводим в админке алиас с домена на домен @domain1.su -> @domain2.su то данный конфиг у меня не заработал, в логах пишет про отсутствующую local part. Предлагаю заменить на:
# Переадресация для пользователей                                              
user_aliases:                                                                  
   driver = redirect                                                          
   allow_fail                                                                  
   allow_defer                                                                
   data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \                    
           `address`='${quote_mysql:$local_part@$domain}'}{$value}fail}        
                                                                               
# Переадресация для доменов и catch-all                                        
domain_aliases:                                                                
   driver = redirect                                                          
   allow_fail                                                                  
   allow_defer                                                                
   data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \                    
           `address`='${quote_mysql:@$domain}'} \                              
           {${if eq {${local_part:$value}}{}{$local_part$value} \              
           {$value}}}fail}                                                    
Ежели чего - поправьте меня. Уж как смог.

RockerMan, 2007-06-21 в 15:26:29

На всех созданных таблицах phpmyadmin ругается
---
Проблемы с индексами таблицы `admin`
PRIMARY and INDEX keys should not both be set for column `username`
---
Проблемы с индексами таблицы `alias`
PRIMARY and INDEX keys should not both be set for column `address`
---
Проблемы с индексами таблицы `domain`
PRIMARY and INDEX keys should not both be set for column `domain`
---
Проблемы с индексами таблицы `mailbox`
PRIMARY and INDEX keys should not both be set for column `username`
---
Проблемы с индексами таблицы `vacation`
PRIMARY and INDEX keys should not both be set for column `email`
---

Это нормально? Если нет как исправить?

walker, 2007-06-21 в 22:14:22

структура БД далека от совершенства. возможно конечно это связано с вопросами быстродействия. но в данном случае полно избыточной информации и ссылочная целостность реализована не за счет субд а за счет винимательности админа

nk, 2007-07-11 в 11:20:46

при сборке Dovecot выбираем также опцию LDA Local delivery Agent чтоб нормально почта приходила
Раньше её небыло

variantolog, 2007-07-23 в 1:59:30

# Отключить команду LOGIN и все другие plaintext аутентификации если
# SSL/TLS не используется. (совместимо с LOGINDISABLED). Отметтьте, что
# 127.*.*.* и IPv6 ::1 адреса считаются безопасными, и установки этого пункта
#  не влияют на соединение с них.
disable_plaintext_auth = no

--------------------------------------------------------

Опечатка. Надо читать: Отключить команду LOGIN и все другие plaintext аутентификации если [b]используется SSL/TLS.

KaMa-CyTpA, 2007-07-26 в 20:38:10

Ловите "грабли" постфиксадмина:
function.inc.php редактируем:
В самом конце перед >? пишем строку
db_connect();

именно так - и никак иначе.
backup.php редактируем:
$path = "/tmp/"; - фиг там!
Он должен быть
$path = "/var/tmp/";

И ещё одна вещь. В файле function.inc.php перед строкой 131 (именно прямо перед ней!) добавляем пустую строку и в ней тоже пишем
db_connect();

mars, 2007-07-27 в 9:50:36

И ещё одна вещь. В файле function.inc.php перед строкой 131 (именно прямо перед ней!) добавляем пустую строку и в ней тоже пишем
db_connect();

мне хватило этого
по крайней мере пока что ;)

Yura, 2007-08-06 в 22:38:57

Так и не заработала отправка локальным хостам через dovecot_delivery, пишит deliver(test@ultrax.lan): Failed to create storage for 'test@ultrax.lan' with mail 'mbox:test@ultrax.lan//mail/:INBOX=/var/mail/test@ultrax.lan'. Ну и фиг с ним! Подредактировал штатный local_delivery и все работает на ура!

redbaron, 2007-08-09 в 7:02:00

Что-то я не понял один момент - а где создаются сами почтовые ящики под каждого пользователя? Их delivery должен создавать?

sergey, 2007-08-10 в 0:40:14

#!/bin/sh
# моя конфига экзма. Будь проклят тот день,
# когда мне пришла в голову мысль подписать
# русские поясния ко всем пунктам! :) Хоть и
# делал я это в первую очередь для себя -
# чтоб лучше понять его, но работа эта оказалась
# слишком масштабная и неблагодарная...
по мимо спасибо за проделанную работу, предлагаю автору сайта "пиво", если будет встреча лично проставляюсь....спасибо

guest, 2007-08-10 в 1:27:03

у меня в бд пассы лежат в мд5, как сделать чтобы dovecot их считывал от туда и авторизовывал юзеров?

Yura, 2007-08-10 в 22:48:58

2 redbaron:
Их Dovecot создает

dodger, 2007-09-28 в 11:23:55

1. Вообще не советую применять авторизацию по SMTP! Потому что юзеры пользуются MS-Win, в котором червяки появляются ооооочень часто. А червяки последнее время пишутся за бабки, и финансирует программирующих этих животных  - угадайте кто? Насколько быстро один из паролей попадет к спаммерам - вопрос времени и количества аккаунтов (по прошествии этого времени, вы - открытый релей).
2. Чтобы не попасть в списки rfc-ignorant очень рекомендую поправить сей конфиг! В частности это касается HELO с IP адресом (Лиссяра сделал правильно, а вот участнику Mi©k я советую читать RFC), почты user@[IP.add.re.ss] и фильтрации писем на postmaster@dom.ain.
3. Изучите политику RBL перед тем как использоватье его! Особенно это касается таких списков, как bl.csma.biz.

Вроде все. Если я не прав - пишите на мыло, а то может и мои знания уже устарели (BTW, все это - опыт работы в ISP).

Al, 2007-10-05 в 16:48:34

если в постфиксадмине при добавлении ящика говорит "неверное имя", то проверку мона отключить так:
/usr/local/www/postfixadmin/functions.inc.php
в функции function check_email ($email) заменить false на true. т.е. всегда правильно

AL, 2007-10-05 в 16:53:58

В postfixadmin правил templates/header.tpl на предмет charset в <head>. Я поставил 1251. Все по русски, никуда кодировка не уезжает.
С меню боролся отключением padding в stylesheet.css для #menu ul li
(автор - sst78rus)

Al, 2007-10-05 в 17:26:05

если ругается на /usr/local/libexec/dovecot/deliver, то ищем
local_delivery: в дефолтовом конфе и заменяем метод локальной доставки.Не забывая его при этом не только подставить,но и описать.

Al, 2007-10-05 в 18:55:17

если ругается на /usr/local/libexec/dovecot/deliver, то ниче не  ищем, а пересобираем dovecot:
make deinstall,make clean, make config, make all ,make install
в окне выбираем LDA

Al, 2007-10-08 в 15:56:52

если postfixadmin не добавляет пароль в базу (у меня пароль в !открытом! виде),то в /usr/local/www/postfixadmin/admin/create-mailbox.php - ищем строку "$password = pacrypt ($fPassword);" и меняем ее на "$password = $fPassword ;" этим мы убрали шифрование

Al, 2007-10-11 в 15:39:28

Если надо сделать автоответ(напр,когда сотрудник в отпуске) в конф exim дописываем:
## роутер автоответов
userautoreply:
     driver = accept
     condition = ${if eq{} {${lookup mysql{SELECT `recipient` FROM `autoreply` \
                           WHERE `recipient`='$local_part@$domain'}}}{no}{yes}}
     transport = userautoreply
     unseen
и
## транспорт для автоответов(не рекошет)
userautoreply:
       driver = autoreply
       headers = "Content-Type: text/plain; charset=windows-1251"
       to = ${sender_address}
       from = ${local_part}@${domain}
       subject = "Re: $h_subject"
       text = "testing user_autoreply"
в соотв. секции конфига
таблица SQL
CREATE TABLE `autoreply` (
`id` int(100) NOT NULL auto_increment,
`recipient` varchar(50) NOT NULL default '',
`subj` varchar(50) character set koi8r NOT NULL default '',
`message` varchar(50) character set koi8r collate koi8r_bin NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;
также можно брать текст и тему из автоответа из SQL
http://forum.lissyara.su/viewtopic.php?f=20&t=2134&p=13274&hilit=autoreply#p13274

Al, 2007-10-30 в 11:59:48

если в постфиксадмине хотим шифровать пароли-убираем коменты с $CONF['encrypt'] = 'md5crypt'; в /usr/local/www/postfixadmin/config.inc.php

deonisiy, 2007-11-06 в 18:42:57

При попытке запуска Dovecot, вываливается ошибка
/usr/local/etc/rc.d/dovecot start
Starting dovecot.
Error: Error in configuration file /usr/local/etc/dovecot.conf line 821: Unknown section type (section changed at line 821)
Fatal: Invalid configuration in /usr/local/etc/dovecot.conf

В этой стоке есть параметр: passdb sql

идеи?

friman, 2007-11-08 в 15:02:36

>С меню боролся отключением padding в stylesheet.css для >#menu ul li
Лучше имхо так - если вы выбрали русский язык, то придется немного подправить файл
/usr/local/www/postfixadmin/templates/admin_menu.tpl, т.к. иначе меню налезают друг на друга.
После строки
<li><a target="_top" href="backup.php"><?php print $PALANG['pAdminMenu_backup']; ?></a></li>
добавить следующее
<br><br><br><br>
P.S. По ошибкам в форум.

Al, 2007-11-08 в 15:10:45

>В этой стоке есть параметр: passdb sql
>идеи?

у меня так:
passdb sql {
 args = /usr/local/etc/dovecot-sql.conf
}
ну а dovecot-sql.conf - практически из статьи

AlkoGekS, 2007-11-13 в 14:49:31

Лис, добавил бы еще про пересылку почты, а то две статьи построчно сравнивать жестоко :)
# system filter
# А тут у начальства заскок - желание контролировать всё.
# Вот и пришлось сделать копию всей почты.
# Вот тока в IT отделе, как выяснилось, никто никому не пишет :)
system_filter = /usr/local/etc/exim/copy_mail.conf


CREATE TABLE `alias` (
 `address` varchar(255) NOT NULL default '',
 `goto` text NOT NULL,
 `domain` varchar(255) NOT NULL default '',
 `created` datetime NOT NULL default '0000-00-00 00:00:00',
 `modified` datetime NOT NULL default '0000-00-00 00:00:00',
 `active` tinyint(1) NOT NULL default '1',
 `copy_mail` int(1) NOT NULL default '1',
 PRIMARY KEY  (`address`),
 KEY `address` (`address`)
) TYPE=MyISAM COMMENT='Exim and Dovecot Admin - Virtual Aliases';

Schax, 2007-11-20 в 13:21:37

Когда переменная %d пустая нужно установить домен по умолчанию (у меня один домен)

auth_default_realm = domain.com.ua

и все работает

MAPTbIH, 2007-11-23 в 23:33:19

такая трабла у начальства заскок такой же как у начальства AlkoGekS, вот тока касается он только пары отделов, хотелось бы сделать чтоб мыло пересылалось или копировалось только с определенных боксов, а когда создаешь alias матюгается что такой бокс уже есть.
как решить траблу может кто вкурсе? был бы признателен за помощь.

Voldimar, 2007-11-25 в 10:35:22

В таблице alias есть поле copy_mail, как у AlkoGekS.

А дальше роутер:

begin routers
always_bcc:
 driver = redirect

 condition = ${lookup mysql{SELECT min(`copy_mail`) FROM `alias` WHERE \
           `address`='${quote_mysql:$local_part@$domain}' or `address`='${quote_mysql:$sender_address}'}}
 data = always_bcc@amstor.ua
 unseen

Все.

Сергей, 2007-12-01 в 19:38:18

Спасибо огромное!

sst78rus, 2007-12-19 в 11:57:47

Переставлял связку заново и нашел причину того, что в postfixadmin русские буевы кракозябрами. Там просто не определена переменная в ru.lang
Надо в файл languages/ru.lang добавить переменную:

$PALANG['charset'] = 'cp1251';

Правильно кодировка может по другому называется, но у меня сработало и так.

Sergey, 2008-01-07 в 3:21:53

Спасибо за статью. Есть два вопроса
1. Если письмо отправлено на несуществующий почтовый ящик причем с +local_domains в логах все же пишет Unrouteable address, и письмо замораживает, как сделать чтобы ответ писался что мол такого ящика нет.
2.Не могу отправить почту наружу"
2008-01-07 03:18:04 1JBfgq-0001pY-Ph == XXXX@mail.ru R=dnslookup T=remote_smtp defer (-46): SMTP error from remote mail server after end of data: host mxs.mail.ru [194.67.23.20]: 421 Please try again later
врядли у mail.ru трабла

Corwin, 2008-01-13 в 12:50:08

Я думаю можно и мне написать. В общем, это касается тех, у кого идёт задержка при отправлении почты. Список  (блэк-лист), который представлен в этом конфиге рабочий, однако, однако доступность этих серверов может быть затруднительной. Вероятно сервера загружены или на вашем провайдере глючит DNS. У моего провайдера, к примеру, нет доступа к домену .gov и ещё некоторым. Плюс доступ к некоторым настолько долгий, что почта уходила около минуты, а то и больше. В общем, я попросту убрал один из серверов и почта начала уходить махом, при этом  в логах теперь, идёт уведомление о том, что действительно, какие-то письма отбрасываются с помощью этих серверов. При этом мне пришлось переместить записи в конфиге повыше, сразу же после проверки о том, откуда посылается почта (adsl, pool и т д).

jahfar, 2008-02-05 в 11:26:27

Daemony, 2006-12-10 в 16:26:55

Есть одно замечание:

В dovecot-sgl.conf используется тип авторизации PLAIN.
В /usr/local/www/postfixadmin/config.inc.php стоит по умолчанию

$CONF['encrypt'] = 'md5crypt';

Так вот, с такой постановой, при добавлении пользователей через веб-интерфейс, нифига работать не будет - Dovecot ругается на ошибки авторизации. У меня по крайней мере не заработало (ковырялся два часа :( ....)

а в логах одна хрень:

dovecot: pop3-login: Disconnected: user=<admin@myhost.org>, method=PLAIN, rip=bla.bla.bla.bla, lip=bla.bla.bla.bla, TLS

Проблема решилась так:
Нужно исправить postfixadmin/config.inc.php:

$CONF['encrypt'] = 'cleartext';

Правда в этом случае в MySQL пароли будут лежать в чистом виде, а нас это конечно не устраивает:

Поэтому в dovecot-sgl.conf пишем

default_pass_scheme = MD5

Авторизация проходит. Пароль пользователя в базе лежит в виде md5 хеша.

------------------

А вообще Lissyara спасибо тебе большое за труд.
Давно искал нормальный перевод конфига dovecot. Нашел его на твоем сайте. :)

Gruber, 2007-04-26 в 15:38:50

Небольшая поправочка:
Daemony  писал -
Поэтому в dovecot-sgl.conf пишем
default_pass_scheme = MD5
в новой версии dovecot нужно писать MD5-CRYPT
иначе ошибка остаётся


В любом случае не проходит, пишет одно и тоже:
dovecot: pop3-login: Disconnected: user=<admin@myhost.org>, method=PLAIN, rip=bla.bla.bla.bla, lip=bla.bla.bla.bla

-=N.K=-, 2008-02-05 в 19:54:54

Ага, всё то хорошо, тока вот Outlook твой md5 вообще не  понимает и фиг с него почту почитаешь;) Так что тока cleartext везде:)

jahfar, 2008-02-06 в 15:35:46

всё вроде настроил на тестовой машине,но при отправлении говорит вот что:
Feb  6 14:26:50 test05 exim[39545]: 2008-02-06 14:26:50 H=(pasha) [192.168.xx.xx] sender verify fail for <test@test.com>: Unrouteable address
Feb  6 14:26:50 srv05 exim[39545]: 2008-02-06 14:26:50 H=(pasha) [192.168.xx.xx] F=<test@srv05.lesk.ru> rejected RCPT <test@test.com>: Sender verify failed


в чём заморочка может быть?

Ice, 2008-02-09 в 13:09:23

Респект за статью!

EKrava, 2008-02-13 в 18:50:39

если не поправить в postfixadmin/vacation.php
то оно "немного" корежит таблицу alias
изменяя user@domain.tld на user@domain.tld,user@autoreply.domain.tld
иза чего exim материться.
закомментил UPDATE alias в vacation.php, и все заработало.
ну и в базу vacation message на русском языке ложится уже в покорежном виде после escape_string,
пришлось чуть чуть подравить vacation_autoreply
acation_autoreply:
   driver = autoreply
   headers = "Content-Transfer-Encoding: base64 \nContent-Type: text/plain; charset=koi8-r \nMIME-Version:1.0"
   once = /var/mail/vacation/$local_part@$domain
   once_repeat = 2m
   user = mail
   group = mail
   to = ${sender_address}
   from = "${local_part}@${domain}"
   log = /var/log/exim4/vacation.log
   subject = "Auto Reply from ${local_part}@${domain}"
   text = ${lookup mysql {SELECT body FROM vacation WHERE email='${quote_mysql:$local_part@$domain}'}{$value}}
===
добавив вот такой вот headers - оно работает.
и в базу руками положить кусок тексту в koi8-r кодированный в base64
тогда письмо получается вполне читабельным, и на русском языке


жаль PHP не владею в достаточной мере, чтоб переписать vacation.php
на предмет того чтоб оно русский текст кодировало в base64, и в таком виде ложило в базу.

omega, 2008-02-19 в 18:56:19

Люди а кто пробовал мигрировать с dbmail на dovecot? и как можно перенести пользователей с тестовой машины на рабочий сервер?

lissyara, 2008-02-19 в 19:37:31

ссылка в этом же разделе
http://www.lissyara.su/?id=1195

кое, 2008-03-04 в 12:21:48

Извеняюсь.. Но как прикрутить postfixadmin к apache?? Что хотя бы устанавливать нужно? Установил php5, apache13 и postfixadmin... но что дальше делать??

HunTeR, 2008-03-05 в 8:44:15

Установи в hhtpd.conf :))
Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
<Directory "/usr/local/www/postfixadmin">
  Options Indexes FollowSymlinks MultiViews
  AllowOverride AuthConfig
allow from 192.168.0.0/255.255.255.0
deny from all
</Directory>

HunTeR, 2008-03-05 в 8:44:29

Установи в httpd.conf :))
Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
<Directory "/usr/local/www/postfixadmin">
  Options Indexes FollowSymlinks MultiViews
  AllowOverride AuthConfig
allow from 192.168.0.0/255.255.255.0
deny from all
</Directory>

koe, 2008-03-05 в 19:07:18

HunTeR. Спасибо, все запустилось. Но криво работает, то там то сям... вылезают какие то проблемы. Я так понимаю, без знания MySQL и apache почтовик нормально не поднять. Буду пытаться сростить exim с dovecot без MySQL и прочих довесков.

ashgdw, 2008-03-07 в 12:04:12

Товарищщи! Подскажите, чем dovecot deliver лучше если exim будет сам складывать почту в папочку??? Например таким образом(роутер):
dovecot_user:
 driver = appendfile
 user = dovecot
 group = dovecot
 mode = 0600
 directory=/home/dovecot/users/${lc:$local_part}/
 maildir_format = true
 mode_fail_narrower = false
 envelope_to_add = true
 return_path_add = true

jahfar, 2008-03-11 в 10:35:35

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

ashgdw, 2008-03-17 в 15:07:07

Насколько необходим кондишн в dovecot_router, если используется dovecot deliver?
Я так понял, что dovecot deliver сам смотрит пользователей в базе и если есть нужный, то складывает почту.. иначе он дает отлуп.. или нет?

VVEBER, 2008-03-25 в 11:49:17

Спасибо, очень полезная статья. Сделал, как описано, немного потоптался по граблям :) и всё заработало )

Morty, 2008-03-27 в 23:24:56

в dovecot-1.0.13 заметил такую вещ - при рестарте довекота пишет : "mail_extra_groups setting was often used insecurely so it is now deprecated, use mail_access_groups or mail_privileged_group instead" Перезапускается, работает, но просит заменить строчку (ссылаясь на безопасность):
mail_extra_groups = mail на
mail_privileged_group = mail
либо
mail_access_groups = mail

MAPTbIH, 2008-03-31 в 10:43:26

товарищи все пашет прекрасно, насчет пересылки вообще сильно заморачиваться не надо, в postfixadmin есть вход для юзеров, так вот там можно зайти и прописать мыло куда переслаться будет, и все.

еще немного не по теме, думаю стоило бы при создании стать на сайте, сразу же созадавать тему на форуме, а в  статье отсавлять ссылку, и уже вести обсуждение в форуме.
IMHO так удобнее.

barsykoff, 2008-04-17 в 17:20:53

>Началось всё с того, что подсказали мне MUA с богатыми возможностями

Только, наверное, MDA (Mail Delivery Agent), а не MUA ;)

miful, 2008-05-07 в 8:20:06

в экзиме в статье написано что если пользователь указал лишь имя - то прикрутить ему доменное имя по умолчанию какое то. Однако, когда забираешь через давкеот почту - требует не имя пользователя а полное имя пользователя типа  xx@xx.xx а было бы неплохо если так же было и здесь - не указал полное имя пользователя - чтобы до полного имени тоже брало по-умолчанию какое то определенно еимя

miful, 2008-05-16 в 7:25:21

А если несколько доменов, то хранение почты лучше сделать в таком виде
/var/mail/exim/<имя домена>/xxx@<имя домена>
вопрос только как правильно это сделать

cj_nik, 2008-05-30 в 15:27:13

>>
# Убираем собственную временную метку exim`a из логов, её ставит
# сам syslogd - нефига дублировать
syslog_timestamp = no
<<

Ну можно и оставить, если не напрягает двойная дата, в разных форматах и нужна поддержка eximstat.

cj_nik, 2008-05-30 в 15:29:54

Пардон
eximstats

FenX, 2008-06-16 в 2:22:22

Не могу понять, это так и надо, или очепятка?
Ибо как я понял (доков особо не читал), в этой строке устанавливается текущий юзер...
А здесь значение вообще (по-моему) пустое получается...

Или я не прав? Оо

auth_cram_md5:
 ....
 server_set_id = $auth2

Pr0x1ndei, 2008-06-26 в 8:00:38

Лисяра большущее спасибо за статью :) долго читал ибо многа букаф но понял всё что хотел и даже больше, такой вопрос
в некоторых блеклистах типо relays.ordb.org присутствуют извесные сервера типо google.com, yandex.ru, rambler.ru
хотелосьбы создать whitelist

accept condition     = ${lookup{$sender_host_address} \
                       wildlsearch{/usr/local/etc/exim/db/whitelist.txt} \
                       {yes}{no}}

это должно выглядеть так или я чтото забыл или пропустил ???

sergio, 2008-08-05 в 17:01:55

При обновлении dovecot до dovecot-1.1.2_1  возникла ошибка:
Error in configuration file /usr/local/etc/dovecot.conf line 254: Unknown setting: default_mail_env

Причина: поменялся синтаксис директив

Решение : default_mail_env заменить на mail_location

Прошу автора поправить в статье!

Tech, 2008-08-06 в 12:23:09

Хотел на FreeBSD 7 поднять все это дело, но не сложилось с рейдом: адаптековский asr падал поcтоянно, аналогично как и gmirror. Времени думать долго не было и пришлось лепить с г..на конфту (железо старое) в ускоренном темпе. Поставил Debian etch - и сконфигуировал там md. Пока вроде держится. Но я не об этом...
Поскольку постфиксадмин хранить данные в $CONF['encrypt'] = 'md5crypt'; а хранить в открытом виде как бы не особо и хотелось бы, плюс ко всему проверка логина/пароля на поп3 идет через dovecot, то почему бы не попользоваться им и для smtp auth ?

вот что получается у меня.
postfixadmin/config.inc.php
...
$CONF['encrypt'] = 'md5crypt';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';

/etc/dovecot/dovecot-sql.conf
...
default_pass_scheme = MD5
password_query = SELECT `username` as `user`,`password` FROM `mailbox` WHERE `username`='%n@%d' AND `active`='1'

user_query = SELECT `maildir` AS `home`, 102 AS `uid`, 104 AS `gid` FROM `mailbox` WHERE `username`='%n@%d' AND `active`='1'

102,104 - это дефолтный дебиановские Debian-exim. решил поставить их т.к. после апдейта или других манипуляций оно все права на спул и логи exim'a ставит в Debian-exim, вобщем не удобно что-то другое ставить.
соответсвенно, меняем чуток /etc/dovecot/dovecot.conf
...
 socket listen {
   master {
     path = /var/run/dovecot/auth-master
     mode = 0600
     user = Debian-exim
     #group = Debian-exim
   }
   client {
     path = /var/run/dovecot/auth-client
     mode = 0660
     user = Debian-exim
     #group = Debian-exim
   }
 }

ну и exim4.conf:
exim_user = Debian-exim
exim_group = Debian-exim
...
dovecot_delivery:
   driver = pipe
   command = /usr/lib/dovecot/deliver -d $local_part@$domain
   message_prefix =
   message_suffix =
   delivery_date_add
   envelope_to_add
   return_path_add
   log_output
   user = Debian-exim
...
auth_plain:
   driver = dovecot
   public_name = PLAIN
   server_socket = /var/run/dovecot/auth-client
   server_set_id = $auth1

auth_login:
   driver = dovecot
   public_name = LOGIN
   server_socket = /var/run/dovecot/auth-client
   server_set_id = $auth1

отмечу также что для нормальной работы dovecot_delivery мне пришлось на dovecot.conf и dovecot-sql.conf поставить группой Debian-exim и дать право на чтение, а то по-дефолту шло -rw-----—  1 root root и доставка не работала а в логе exim'a шли матюки на пермишены файла dovecot.conf
Также нужно поставить права на mail_location как Debian-exim:Debian-exim ну или какие там у вас узеры и группы.

Надеюсь, кому-то это будет полезным. Если что не так (может где глупости делаю) - поправьте меня плиз.

playnet, 2008-08-07 в 20:13:45

При создании мускуль базы я сделал проще, без правки системной базы:
grant all on mail.* to mail@localhost identified by 'mail';

Грамматика опять хромает, вордом проверил бы :) Кстати, в ООо проверка грамматики есть (вспоминая давний разговор).
И еще.. у тебя на сайте бага, если ФФ упал (3 это любит), часть страниц пытается открыться как octet-stream и больше эту страницу не открыть, она висит как "пустая". Пофикси плиз.

Tchk, 2008-08-26 в 17:50:55

если в постфиксадмине при добавлении ящика говорит "неверное имя", то проверку мона отключить так:
/usr/local/www/postfixadmin/config.inc.php
$CONF['emailcheck_resolve_domain']='NO';
(проблема вызвана желанием начальства параллельно настраивать сервер и регистрировать домен)

gavryuha, 2008-08-30 в 19:57:47

А тут condition разве правильный??
Помоему это копипаст из строки выше (system aliases)
С таким условием выдаёт Unrouteable address
<u>ГЛЮКИ!</u>


# Всё что осталось - это локальные адресаты.
# Доставляем почту в dovecot
dovecot_user:
 driver = accept
 condition = ${lookup mysql{SELECT `goto` FROM \
 `alias` WHERE \
 `address`='${quote_mysql:$local_part@$domain}' OR \
 `address`='${quote_mysql:@$domain}'}{yes}{no}}
 transport = dovecot_delivery

bayun, 2008-10-17 в 17:32:39

Не сталкивался до этого ни с exim ни c dovecot (откровенно говоря с почтовыми серверами сталкивался мало - по мере необходимости, а она возникала очень редко ;-)). Попробовал.В основном получилось (SMTP и POP 3 есть все проверяется как через клиент так и по tlnet).Не работает почему-то dovecot_delivery transport (не запускается с кодом ошибки 75), но я на форумах обнаружил, что данная проблема возникала не только у меня , так что думаю я ее победю ( или побежду Ж-)). А если серьезно - спасибо. По крайней мере в следующий раз уже без проблем смогу установить и отладить почту (правда когда разберусь с ошибкой LDA) :-)
Еще раз спасибо и желаю удачи.

mult, 2008-10-20 в 19:40:39

спасибо за статью, настроил сее почту именно таким образом и все раотает. но вот с trash - проблема )-;

ProFTP, 2008-12-07 в 20:04:04

аналог Postfxadmin

goto http://forum.lissyara.su/viewtopic.php?f=20&t=12348

Захаров Дмитрий, 2008-12-10 в 22:54:42

lissyara
Спасибо Вам за Ваши труды! пусть все у Вас всегда получается!

Sava, 2009-01-03 в 16:55:25

Спасибо, все завелось практически без напильника.
Тов. Лису огромное спасибо, но есть не то просьба, не то пожелание - неочевидные вещи хотя-бы раз в статье дохочдиво коментировать. Например структура АЦЛины. Не читая мануала синтаксис не очевиден.
И второе по теме. Видели у пофигс-одмина при создании домена галку "Резервный МХ". Так вот чтоб EXIM мог быть Backup MX то надо немножко исправить запрос
domainlist local_domains = ${lookup mysql{SELECT `domain` \
                           FROM `domain` WHERE \
                           `domain`='${domain}' AND \
                           `active`='1'}}


и дописать туда "AND `backupmx` = '0'"
Тогда почта приходящая на EXIM в случае падения основного МХ не будет пробовать доставиться локально, а будет висеть в очереди и раз в приблизительно 30 минут пытаться уходить на основной МХ. Время и интервалы повторов отправки не поборол.
Если мы в блоке retry попробуем прописать

# Address or Domain  Error   Retries
# ---------------—  ---—   -------
domain.tld           *       F,10h,1m
*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h
Что по мануалу значит "для любых ошибок домена domain.tld повторять отправку с фиксированным (F) инетрвалом в 1мин на протяжении 10 часов" то через 1-2 минуты он нифига не пробует повторить самостоятельно. Зато легко повторяет после его перезагрузки (а не ругается что retry интервал еще не наступил) что значит что 10h,1m все-же работает. А вот если его не трогать, то сам он одумывается приблизительно через 30 минут и успешно доставляет отложенную почту на оживший первый МХ. Кожет кто-то знает в чем загвоздка?


lissyara, 2009-01-03 в 17:07:14

Э, нет. Мануал всё равно читать надо - его чтения не отменяет никакое how-to. Иначе всё вернётся к винде - когда упало и незнаешь причин - лезешь искать очередной мануал. И так до бесконечности.
Лучше один раз прочесть доку.

Sava, 2009-01-03 в 17:46:54

Само собой. Но природа человека такова, что хочется всего и сразу. Кроме того существуют психологические барьеры: - мануал большой, информационная нагрузка не позволяет выделить сразу ту часть, которая необходима для "стандартной задачи". Т.к мануал - это справочник. А статья, особенно написанная грамотным дядькой дает единовременно общее понимание о системе. А дальше, когда уже вырисовались некоторые основы мануал читается и понимается на ура. И чет мне кажется что не я один такой. Так что спасибо тов. Лис за твои труды.

lissyara, 2009-01-03 в 17:58:29

Ну... Согласен =)
Но из собственного опыта - когда дошёл сам - гораздо лучше в память врезается, и куда доходчивей.

Константин, 2009-01-22 в 14:29:22

такая же беда как у john
dovecot: auth-worker(default): sql(john,10.100.1.100): query: SELECT `username` as `user`, `password` FROM  `mailbox` WHERE `username` = 'john@' AND `active`='1'

Вместо пустого параметра %d (где должен подставляться домен) написал сам домен ручками, теперь авторизуется. но это не правильно... у кого есть решение?

password_query = SELECT `username` as `user`, `password` FROM  \
`mailbox` WHERE `username` = '%n@mydomen.ru' AND `active`='1'

lissyara, 2009-01-22 в 14:36:50

Ребят, давайте в форум по проблемам.
Итак больше сотни камментов налепили к статье =)))
=======
по факту - у меня работает, именно в таком виде. Прямо щас.

fxpester, 2009-01-28 в 16:21:46

Константин, http://forum.lissyara.su/viewtopic.php?f=20&t=11384&start=0

Starsh, 2009-02-10 в 18:14:24

HELP!!!!
Сделал всё как написано в статье! Статья просто БОМБА! Но есть проблема и не знаю как её обойти!!
------------------------------------
Лог regectlog пример:
2009-02-10 16:45:27 H=(fr-end-02.iptelecom.net.ua) [213.159.224.232] I=[ххх.ххх.ххх.ххх]:25 F=<> rejected RCPT <star@temp.kiev.ua>: "А какого HELO пустое?! Не по RFC..."
В теле письма :
550 Sender verify failed
Это происходит с некоторыми хостами, не со всеми. Я как понял, есть проверка моих пользователе, а в этой конфе ексима этого нет! Подскажите как и где это исправить??? У меня 10 дней полёта, а результат 0.

Starsh, 2009-02-10 в 18:17:01

HELP!!!!
Сделал всё как написано в статье! Статья просто БОМБА! Но есть проблема и не знаю как её обойти!!
------------------------------------
Лог regectlog пример:
2009-02-10 16:45:27 H=(fr-end-02.iptelecom.net.ua) [213.159.224.232] I=[ххх.ххх.ххх.ххх]:25 F=<> rejected RCPT <star@temp.kiev.ua>: "А какого HELO пустое?! Не по RFC..."
В теле письма :
550 Sender verify failed
Это происходит с некоторыми хостами, не со всеми. Я как понял, есть проверка моих пользователе, а в этой конфе ексима этого нет! Подскажите как и где это исправить??? У меня 10 дней полёта, а результат 0.

alex, 2009-02-19 в 13:10:11

мозги набекрень, при вводе логина и пароля в postfixadmin пишет неправильное имя и пароль, где копать?

alex, 2009-02-19 в 14:16:51

пока ждал ответа вроде разобрался, тут другие грабли , постоянно денаить пользователя exim
DEBUG INFORMATION:
Connect: Access denied for user 'exim'@'localhost' (using password: YES)

Please check the documentation and website for more information.

Alive, 2009-02-19 в 17:34:05

Не флуди. Человеческим языком написано что юзер не подходит или пароль.

Max, 2009-03-04 в 14:41:58

Понятно автоответчик (без БД) здесь
http://wiki.exim.org/EximAutoReply

irr, 2009-03-07 в 8:25:23

Огромное спасибо за статью!
Предлагаю внести поправку: раз уж мы собираем exim с опцией
LOG_FILE_PATH?=         syslog
целесообразно дописать в конфиг
write_rejectlog = false
чтобы избежать дублей отфутболенных сообщений в maillog.

Gillian, 2009-03-21 в 1:54:07

в статье уважаемого lissyara допущена оплошность из-за которой мозги ВСТАЛИ блин, при сборки dovecot ОБЯЗАТЕЛЬНО указываеться опция LDAP , если её пропустить в /usr/local/libexec/dovecot - можете забыть о delivery и делать свои мозги ракообразными, у меня ВСЕ млять после трех дней такого кайфа ( еще clamd - не забывайте) мозги встали, но работает как часы
конфиг самомго clamav указывал на clamd.sock, конфиг exima на clamd , подправить конфиги

redkid, 2009-05-05 в 9:30:57

Релиз 7.1 точный копипаст конфигов, получение почты работает отлично и доставка писем из внешнего мира тоже, но вот отправка писем на сервер не работае ни в какую, причем что странно в логах ничего нет, почтовый клиент матерится о невозможности подключиться к серверу!

Luser, 2009-07-01 в 9:19:33

Получилось сделать авторизацию для отправки
dovecot.conf:
auth default {
mechanisms plain login
}
dovecot-sql.conf:
default-pass-scheme MD5
# Для CRAM-MD5 выдает такое:
Error: auth-worker(default): sql(test@mydomain.ru,10.10.10.15): Password in passdb is not in expected scheme CRAM-MD5

postfixadmin, config.inc.php:
$CONF['encrypt'] = 'md5crypt';

Пароли хранятся в MySql-базе в шифрованном виде

Drema, 2009-09-23 в 3:19:49

Делал по статье, dovecot 1.2.4, обнаружились следующие грабли:
в логе: dovecot: pop3-login: Internal login failure (auth failed, 1 attempts)
Лечится изменением запроса в dovecot-sql.conf:
user_query = SELECT CONCAT('/var/mail/exim/',maildir) AS `home`, 26 AS `uid`, 26 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'

Seltsam, 2009-10-20 в 19:28:17

Как обычно - хвала и благодарности статье =)
Вопрос только такой - права и владельцы на каталог /var/mail/exim/ какие, по дефолту?

karpekin, 2009-12-17 в 11:02:22

Делаю:/usr/local/etc/rc.d/dovecot start
Пишет:Unknown setting: umask
Наверное эта переменная для старого dovecot-a?

daggerok, 2009-12-24 в 13:53:20

># Этот кусок я не трогал. Думаю разработчики лучше знают,
># какие тут должны быть цифирьки. Если же вы это знаете
># лучше их - меняйте. Хотя... А какого, если Вы такой
># умный, читаете этот мануал? Может ну, их, цифирьки, а? :)
># Address or Domain  Error   Retries
># ---------------—  ---—   -------
>*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h

эти цифирьки указывают интервалы времени на протяжении которых будут производиться попытки отправить письма повторно

# Domain Error Retry     Then      Finaly
 *      *     F,2h,10m; F,24h,1h; F,4d,6h

# Retry - every 10 mins for 2 hours
# Then - every hour for 24 hours
# Finally - every 6 hours for 4 days

Abibas, 2009-12-30 в 17:59:19

Думаю что роутер dovecot_user наверное лучше бы выглядел так:
condition = ${lookup mysql{SELECT `username` FROM \
           `mailbox` WHERE \
           `active`='1' AND \
        `username`='${quote_mysql:$local_part@$domain}' OR \
           `username`='${quote_mysql:@$domain}'}{yes}{no}}

Так, как морда postfixadmin активирует юзерей именно в этой таблице.

v_d_v, 2010-01-12 в 0:24:42

Для Exim 4.71 нашелся такой баг: при отправке наружу с SMTP авторизацией уходят письма со следующими заголовками: MAIL FROM:"mailbox@domain.tld"@hostname.com.
Если отправлять письма с локальных сетей без SMTP авторизации, то заголовки правильные.

v_d_v, 2010-01-12 в 0:57:25

Упустил, в новом конфиге Exima
#control = submission

макс, 2010-04-26 в 11:47:10

Как попасть в постфиксадми какие там логин и пароль? Ведь еще не один пользователь не создан?

baton4eg., 2010-04-27 в 13:13:02

http://site.ru/postfixadmin/setup.php

Morty, 2010-07-07 в 16:34:45

dovec-sql:
password_query = SELECT password FROM mailbox WHERE username = \'%n@%d\' AND `active`=\'1\'
user_query = SELECT CONCAT(\'/var/mail/exim/\',maildir) AS `home`, 26 AS `uid`, 26 AS `gid` FROM `mailbox` WHERE `username` = \'%n@%d\' AND `active`=\'1\'
-----

maxsubzero, 2010-07-24 в 11:51:06

Спасибо за статью! С небольшой переделкой на использование Dovecot LDA (по их же вики) для доставки на виртуальные домены всё заработало с полоборота!
Спасибо, Лис, за труд и за такой хороший сайт по Фре :)

uriinf, 2010-07-29 в 16:51:10

# Рубаем тех, кто не пишет отправителя
#  deny    condition     = ${if eq{$sender_address}{}{yes}{no}}
#          hosts         = !127.0.0.1 : !localhost : *
#          message       = "А какого HELO пустое?! Не по RFC..."

## Рубаем тех, кто не пишет отправителя (пробел)
#  deny    condition     = ${if match{$sender_address}{\N^\s+$\N}{yes}{no}}
#          hosts         = !127.0.0.1 : !localhost : *
#          message       = "А какого HELO пустое (тока пробелы)?! Не по RFC..."

Разве тут вместо $sender_address не $sender_helo_name должно стоять?

Mikola, 2010-08-03 в 14:32:55

если у кого в начале косяк с установкой - по прилагаемым лиссярой дампам пользователю exim не хватает прав на две команды CREATE и ALTER.

было:
— БД: `exim`
GRANT SELECT, INSERT, DELETE, UPDATE ON exim.* TO exim@localhost;

надо:
GRANT SELECT, INSERT, DELETE, UPDATE, CREATE, ALTER ON exim.* TO exim@localhost;

может потому что MySQL 5.0

blitzkrieg, 2010-09-29 в 17:32:31

# Рубаем тех, кто не пишет отправителя
#  deny    condition     = ${if eq{$sender_address}{}{yes}{no}}
#          hosts         = !127.0.0.1 : !localhost : *
#          message       = "А какого HELO пустое?! Не по RFC..."

Если речь идет именно о $sender_address то данное acl нарушает RFC :-)
Сервер должен принимать почту с пустым отправителем. Читать тут: http://www.rfc-ignorant.org/policy-dsn.php

Alex Keda, 2010-09-29 в 21:02:52

ничё что оно закомментировано?

blitzkrieg, 2010-09-29 в 21:53:01

Это не так важно, правило есть в том виде в котором оно тут представлено. Более того у многих тех, кто будет пользоваться данной статьей возникнет непреодолимое желание его раскомментировать, так как оно вполне соответствует логике. Тот кто прочитает комментарии может избавить себя от ненужных возможных проблем с проверкой отправителя на сторонних серверах и попаданием в лист.

Саша, 2010-11-30 в 10:12:04

В начале показано как искать в портах и потом сразу запуск make..., а хорошо бы перейти в нужную директорию! Мало ли, юные админы в /usr/ports запустят make и будут ждать.. ;)

daggerok, 2010-11-30 в 10:40:47

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

adre, 2010-11-30 в 12:09:55

[code]dovecot --version
1.2.14
[/code]
Проколупался с кубом по поводу listen * - это не есть локал хост, localhost - это Listen:localhost,*

salimk, 2011-09-07 в 11:35:11

Всем привет,
я пользуюсь dovecot+postfix+postfixadmin, и мне нужно было сделать так, чтобы у каждого почтового ящика был свой id (не статичный),
расскажу как я сделал:
в таблицу mailbox (mysql), добавил 2 поля
Имя: u_id и g_id
тип данных: int
Ширина типа: 11

затем в create-mailbox.php:
над строкой 219 добавляем:
$genid=mt_rand(1000,2000); # диапазон от 1000 до 2000

после меняем сторку
$result = db_query ("INSERT INTO $table_mailbox ....
на
$result = db_query ("INSERT INTO $table_mailbox (username,password,name,maildir,local_part,quota,domain,created,modified,active,u_id,g_id) VALUES ('$fUsername','$password','$fName','$maildir','$local_part','$quota','$fDomain',NOW(),NOW(),'$sqlActive','$genid','$genid')");

В Postfix main.cf
virtual_uid_maps = mysql:$config_directory/uid.cf
virtual_gid_maps = mysql:$config_directory/gid.cf

в uid.cf:
host = unix:/tmp/mysql.sock
user = postfix
password = mysecret
dbname = mail
table = mailbox
select_field = u_id
where_field = username

в gid.cf

host = unix:/tmp/mysql.sock
user = postfix
password = mysecret
dbname = mail
table = mailbox
select_field = g_id
where_field = username

для dovecot

first_valid_uid = 1000
last_valid_uid = 2000
first_valid_gid = 1000
last_valid_gid = 2000

dovecot-sql.conf:
.....
user_query = SELECT u_id AS uid, g_id AS gid FROM mailbox WHERE username = '%n@%d' AND active='1'

Salimk, 2011-09-29 в 7:31:21

Вот еще одна фичя
в config.inc.php:

.............

$username=$_POST['fName'];
$secretpass=$_POST['fPassword'];
$milo=$_POST['fUsername'];
$domen=$_POST['fDomain'];

// Welcome Message
// This message is send to every newly created mailbox.
// Change the text between EOM.
$CONF['welcome_text'] = <<<EOM

Здравствуйте уважаемый(ая) $username

Добро пожаловать в домен $domen!

Вы можете просматривать вашу почту с помощью веб-браузера, для этого перейдите по ссылки http://mail.$domen , и введите в графе:

Имя пользователя: $milo

Пароль: $secretpass

С Уважением администрация домена $domen

EOM;

.....

massacrer, 2011-12-01 в 13:02:00

Спасибо Лисяре за материал. Около полугода пользовал во FreeBSD, немного доработал и был доволен, но недавно сервер приказал долго жить и пришлось купить новый. Решил отказаться от FreeBSD в пользу Ubuntu так как с ней мне работать комфортнее. При миграции конфигов возникли некоторые сложности, о которых хочу рассказать.
Особенности для Ubuntu 11.10. Программы ставим так:
# sudo apt-get install mysql-server mysql-client exim4-daemon-heavy dovecot-imapd dovecot-pop3d dovecot-mysql spamassassin
Dovecot встанет 2-й и при запуске предложит переработать конфиг. Не помню уже какой командой, но он выводит ее на экран. uid, от которого идет обращение к папкам и файлам с почтой, можно подправить в /etc/dovecot/dovecot-sql.conf (я переносил готовые конфиги, а потому совсем про это забыл).
С Exim хлопот немного больше. Для начала нужно дописать в начале /etc/exim4/update-exim4.conf.conf строку: dc_eximconfig_configtype=none и далее работать с /etc/exim4/exim4.conf. Может потребоваться рихтовка, так что см. логи. Если обращение к логам Exim'a будет идти не от пользователя Debian-exim, то нужно подставить нужного в /etc/logrotate.d/exim4-*
Вроде бы все. Извините, если что-то упустил.

Lol, 2011-12-21 в 9:08:03

Спасибо много букф аффтор жоот иду искать проще статью

i4iro, 2012-03-15 в 5:44:14

куда проще

i4iro, 2012-03-15 в 5:44:16

куда проще

i4iro, 2012-03-19 в 3:40:20

2 massacrer
ЕРЕТИК
на костер его :)

Demon, 2013-02-07 в 18:47:28

MySQL 5.5
TYPE=MyISAM
меняем на
ENGINE=MyISAM

Дмитрий, 2020-07-21 в 13:20:41

  deny    message       = "your hostname is bad (adsl, poll, ppp & etc)."
         condition     = ${if match{$sender_host_name} \
                              {adsl|dialup|pool|peer|dhcp} \
                              {yes}{no}}

А письма от glavpooltorg.su тоже будут блокироваться?



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.15 секунд
Из них PHP: 75%; SQL: 25%; Число SQL-запросов: 77 шт.
Исходный размер: 341690; Сжатая: 80555