Страница 1 из 4

Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota + DSP

Добавлено: 2013-05-28 13:27:47
freeman_tnu
У меня долгое время трудился почтовый сервер настроенный по этой статье. Но, как говориться, ничто не вечно :) По ряду многих причин было решено организовать новый сервер, в совершенно другом месте и с отличной от старого конфигурацией. От Exim-a не отказались, а агентом доставки почты был выбран Dovecot 2-й версии и причин тому достаточно:
  • поддержка форматов почтовых ящиков mbox и Maildir;
    высокое быстродействие благодаря индексации содержимого почтовых ящиков;
    полное соответствие стандартам IMAP;
    возможность работы с почтовыми языками и их индексами с нескольких компьютеров, что позволяет хранить данные на кластерных файловых системах и NFS;
    возможность расширения функционала с помощью плагинов;
    поддержка Sieve;
    поддержка различных хранилищ аутентификационной информации и режимов аутентификации;
    Postfix и Exim могут проводить аутентификацию пользователей через Dovecot;
    простота миграции с большинства других IMAP и POP3 серверов.
Немаловажным в настройке было хранение зашифрованных паролей в MySQL и поддержка механизма аутентификации CRAM-MD5. В качестве спам-фильтра остановился на DSPAM, благодаря которому одним гениальным германским студентом был написан плагин для интеграции с Dovecot-ом, его основная фишка - обучение/переобучение DSPAM посредством простого перемещения писем из/в imap-папки Spam. Также будут настроенны квоты на размер почтового ящика и отправка уведомлений о пороге квоты пользователю. Ну и последней заметкой статьи будут описаны нюансы ускорения работы с перловым скриптом синхронизации почтовых ящиков imapsync при переходе со старого сервера.

Все будет устанавливаться на FreeBSD 9.1-RELEASE, предварительно обновив порты. База пользователей MySQL используется из postfixadmin-2.3.6, установленного из портов.

Установку и настройку начнем с Dovecot:

Код: Выделить всё

# cd /usr/ports/mail/dovecot2
# make install clean
# dovecot --version 
    2.1.15
Параметры сборки оставлены по умолчанию, выбрав только MySQL.

Для поддержки работы Sieve-фильтров (в том же Roundcube) необходимо установить еще один порт:

Код: Выделить всё

# cd /usr/ports/mail/dovecot2-pigeonhole
# make install clean
Устанавливаем dovecot-antispam плагин

Код: Выделить всё

# cd /usr/ports/mail/dovecot2-antispam-plugin/
# make install clean
Конфигурационный файл dovecot-а второй версии в отличии от первого разбит на много отдельных конфигов, относящихся к настройке того или иного сервиса, мне это показалось удобным, поэтому наберемся терпения и приступим к их редактированию (все они лежат в одном каталоге /usr/local/etc/dovecot, комментарии будут минимальны, т.к. они хорошо задокументированы в самих файлах, здесь на сайте и на оф. вики). Настоятельно рекомендую не копипастить, т.к. многие закоментированные опции не приведены здесь, отображено только то, что я включил в конфиги, поэтому вдумчиво редактируйте свои конфиги по умолчанию:

Основной конфигурационный файл /usr/local/etc/dovecot/dovecot.conf

Код: Выделить всё

# Какие протоколы будут работать
protocols = imap pop3 
# Список интерфейсов, обрабатывающих подключения
listen = *
# Каталог, в котором работает Dovecot
base_dir = /var/run/dovecot/
# Приветственное сообщение
login_greeting = IMAP server ready.
# Информативность заголовка процесса
verbose_proctitle = no
# Завершение всех процессов Dovecot после завершения главного
shutdown_clients = yes
dict {
}
# Подключаем остальные конфиги из каталога conf.d
!include conf.d/*.conf
!include_try local.conf
Файл подключения к базе данных /usr/local/etc/dovecot/dovecot-sql.conf.ext

Код: Выделить всё

# Тип используемой СУБД
driver = mysql
# Строка подключения к БД
connect = host=localhost dbname=exim user=exim password=eximsecretpass
# Схема хранения паролей
default_pass_scheme = CRAM-MD5
# Запрос, возвращающий пароль
password_query = SELECT `username` as `user`, `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`, concat('dict:storage=', \
CAST(ROUND(quota / 1024) AS CHAR), '::proxy::sqlquota') \
AS quota, CONCAT('*:storage=', CAST(quota AS CHAR), 'B') AS quota_rule \
FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
Файл словаря SQL квот /usr/local/etc/dovecot/dovecot-dict-sql.conf.ext

Код: Выделить всё

# Строка подключения к БД
connect = host=localhost dbname=exim user=exim password=eximsecretpass
# Описание полей и указание таблицы quota2, 
# именно эта таблица используется для Dovecot 2-й версии
map {
  pattern = priv/quota/storage
  table = quota2
  username_field = username
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = quota2
  username_field = username
  value_field = messages
}
Файл аутентификации /usr/local/etc/dovecot/conf.d/10-auth.conf

Код: Выделить всё

# Пока настраивал оставил включенным PLAIN тип аутентификации
disable_plaintext_auth = no
# Отключаем кэш аутентифкации
auth_cache_size = 0
# Список разрешенных символов в имени пользователя
auth_username_chars = abcdefghijklmnopqrstuvwxyzAB \
CDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
# Преобразование формат имени пользователя в нижний регистр
auth_username_format = %Lu
# Максимальное количество работающих процессов аутентификации
auth_worker_max_count = 30
# Количество секунд перед повторной аутентификацией
auth_failure_delay = 2 secs
# Отказать в аутентификации, если у клиента неверный SSL сертификат
auth_ssl_require_client_cert = no
# Не брать имя пользователя из SSL сертификата 
auth_ssl_username_from_cert = no
# Список разрешенных методов аутентификации
auth_mechanisms = plain login cram-md5
# Включить конфиг аутентификации для SQL пользователей 
!include auth-sql.conf.ext
Файл /usr/local/etc/dovecot/conf.d/auth-sql.conf.ext

Код: Выделить всё

passdb {
  driver = sql

  args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  driver = sql
  args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
}
Файл настройки логирования /usr/local/etc/dovecot/conf.d/10-logging.conf

Код: Выделить всё

# Путь к основному лог файлу
log_path = /var/log/dovecot/mainlog
# Логировать неудачные попытки входа
auth_verbose = yes
# Не выводить при этом в лог пароли
auth_verbose_passwords = no
# На момент настройки лучше включить более подробное логирование
auth_debug = yes
mail_debug = yes
# Возможность добавлять плагины mail_log
plugin {
}
Файл путей к ящикам и пространства имен /usr/local/etc/dovecot/conf.d/10-mail.conf

Код: Выделить всё

# Расположение почтовых ящиков
mail_location = maildir:/var/mail/exim/%d/%u
# Разделяемое пространство имен для имап каталога INBOX
namespace inbox {
  inbox = yes
}
# Системные пользователь и группа для доступа
# к почтовым ящикам
mail_uid = mailnull
mail_gid = mail
# Группа для привилегированных операций
mail_privileged_group = mail
# Не предоставлять клиентам полный доступ к файловой системе
mail_full_filesystem_access = no
# Не использовать системный вызов mmap()
mmap_disable = no
# Использовать флаг O_EXCL, когда создаются файлы блокировки (dotlock)
dotlock_use_excl = yes
# Использовать системные вызовыfsync() или fdatasync() при необходимости
mail_fsync = optimized
# NFS  я не использую
mail_nfs_storage = no
# Метод блокировки индексов
lock_method = fcntl
# Временная директория входящих сообщений размером более 128Кб
mail_temp_dir = /var/tmp
# Допустимые диапазоны UID для пользователей и групп
first_valid_uid = 26
first_valid_gid = 26
# Каталог, в котором лежат плагины Dovecot-а
mail_plugin_dir = /usr/local/lib/dovecot
# Список подключаемых плагинов
mail_plugins = $mail_plugins quota
# Во время копирования письма создавать жесткую ссылку
# для увеличения производительности
maildir_copy_with_hardlinks = yes
# Хэш функция для генерации имен файлов вложений
mail_attachment_hash = %{sha1}
Файл сервисов и сокетов /usr/local/etc/dovecot/conf.d/10-master.conf

Код: Выделить всё

# Ограничение числа процессов
default_process_limit = 100
default_client_limit = 1000
# Внутренний пользователь для процесса логона
default_login_user = dovenull
# Внутренний пользователь для непривилегированных процессов
default_internal_user = dovecot
# Секция сервиса имап логона
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
# Количество активный соединений
  service_count = 1
# Количество процессов, ждущих соединений
  process_min_avail = 3 
#  Количество памяти на 1 соединение (service_count)
  vsz_limit = 64M
}
# Секция сервиса поп3 логона
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
# Параметры сетевого сокета
service lmtp {
  unix_listener lmtp {
#mode = 0666
  }

}
# Сервис имап
service imap {
# память для вложений
  vsz_limit = 256M
# Макс. количество процесов обрабатывающих имап подключения
  process_limit = 128
}
# Сервис поп3
service pop3 {
  process_limit = 256
}
# Сервис аутентификации
service auth {
  unix_listener auth-userdb {
    mode = 0666
    user = mailnull
    group = mail
  }
    unix_listener auth-client {
    mode = 0600
    user = mailnull
    group = mail
  }
  user = $default_internal_user
}
# Сервис воркера
service auth-worker {
  user = $default_internal_user
}
# Сервис обслуживания и оповещения о пользовательской квоте
service quota-warning {
# Скрипт, который отсылает письмо о превышении квоты пользователю
# написан по примеру из оф. вики http://wiki2.dovecot.org/Quota/Configuration
# его содержимое представлено ниже
  executable = script /usr/local/etc/dovecot/overquoted
  unix_listener quota-warning {
    user = mailnull
    group = mail
    mode = 0777
  }
}
# Сокет dict proxy для слежения за квотами
service dict {
  unix_listener dict {
    mode = 0600
    user = mailnull
    group = mail
  }
}
Файл настройки SSL /usr/local/etc/dovecot/conf.d/10-ssl.conf

Код: Выделить всё

# Включаем поддержку
ssl = yes
# SSL сертификаты у меня были готовые
# Для создания сертификатов можно использовать следующий скрипт
# http://dovecot.org/doc/mkcert.sh предварительно изменив пути к файлам
ssl_cert = </usr/local/etc/exim/exim.crt
ssl_key = </usr/local/etc/exim/exim.pem
# Не проверять сертификат пользователя
ssl_verify_client_cert = no
# Используемые типы шифров
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL
Файл мастер сокета аутентификации для доставки корреспонденции /usr/local/etc/dovecot/conf.d/15-lda.conf

Код: Выделить всё

# ящик постмастера
postmaster_address = mailer-daemon@domain.com.ua
# Доменное имя Вашего сервера
hostname = mx.domain.com.ua
# Если превышена квота - отправлять отлуп
quota_full_tempfail = no
# Отправлять письма через указанный параметр вместо утилиты sendmail
submission_host = localhost:25
# Автоматически создавать несуществующие имап папки
# при приему на них почты
lda_mailbox_autocreate = yes
# автоматически подписываться на них
lda_mailbox_autosubscribe = yes
# Сам протокол доставки
protocol lda {
# Добавляем плагин фильтров и квот
  mail_plugins = $mail_plugins sieve quota
    log_path =
  info_log_path =
  syslog_facility = mail
}
Файл протокола IMAP /usr/local/etc/dovecot/conf.d/20-imap.conf

Код: Выделить всё

protocol imap {
# максимальное количество соединений, разрешенных
# с каждого IP адреса
  mail_max_userip_connections = 5
# Подключаем плагин имап квоты и dovecot-antispam плагин
  mail_plugins = $mail_plugins imap_quota antispam
# Формат логов
  imap_logout_format = bytes=%i/%o
# Время ожидания ответа от клиента
  imap_idle_notify_interval = 2 mins
}
Файл параметров ManageSieve /usr/local/etc/dovecot/conf.d/20-managesieve.conf

Код: Выделить всё

# Включение ManageSieve
protocols = $protocols sieve
service managesieve-login {
  inet_listener sieve {
# Порт, на котором будет запущен сервис
    port = 4190
  }
# Количество активных соединений
# подробнее здесь http://wiki2.dovecot.org/LoginProcess
  service_count = 1
# Память на одно соединение
  vsz_limit = 64M
}
service managesieve {
}
protocol sieve {
# максимальное количество соединений, разрешенных
# с каждого IP адреса
  mail_max_userip_connections = 5
# Формат логов
  managesieve_logout_format = bytes=%i/%o
# Указываем фиктивную версию ManageSieve для клиентов, т.к.
# не все правильно работают с реализацией Sieve от Dovecot
  managesieve_implementation_string = Cyrus timsieved v2.2.13
# количество попыток компиляций скрипта sieve, который
# отправляет клиент.
  managesieve_max_compile_errors = 5
}
Файл протокола POP3 /usr/local/etc/dovecot/conf.d/20-pop3.conf

Код: Выделить всё

protocol pop3 {
# Блокирование ящика на время pop3  сессии
  pop3_lock_session = yes
# максимальное количество соединений, разрешенных
# с каждого IP адреса
  mail_max_userip_connections = 5
}
Файл настройки квот /usr/local/etc/dovecot/conf.d/90-quota.conf

Код: Выделить всё

plugin {
# Когда и сколько слать ворнингов пользователю
  quota_warning = storage=100%% quota-exceeded 100 %u
  quota_warning2 = storage=95%% quota-warning 95 %u
  quota_warning3 = storage=90%% quota-warning 90 %u
  quota_warning4 = storage=85%% quota-warning 85 %u
  quota_warning5 = storage=80%% quota-warning 80 %u
  quota_warning6 = storage=75%% quota-warning 75 %u
  quota_warning7 = storage=70%% quota-warning 70 %u
  quota_warning8 = storage=65%% quota-warning 65 %u
}
plugin {
# Откуда брать инфу о квоте, в нашем случаем из MySQL словаря
        quota = dict:User quota::noenforcing:proxy::sqlquota
# Правила ограничения по размеру мейлдира
        quota_rule = *:storage=1G
# Для корзины добавляем + 100 мб сверх квоты
        quota_rule2 = Trash:storage=+100M
# Игнорируем каталог со спамом (он будет очищаться скриптом,
# удаляя весь спам старше 30 дней)
        quota_rule3 = Junk:ignore
}
# Описываем SQL словарь
dict {
  sqlquota = mysql:/usr/local/etc/dovecot/dovecot-dict-sql.conf.ext
}
Файл настройки фильтров Sieve /usr/local/etc/dovecot/conf.d/90-sieve.conf

Код: Выделить всё

plugin {
# Месторасположения файла и каталога с правилами фильтров
  sieve = /var/mail/exim/%d/%u/.dovecot.sieve
  sieve_dir = /var/mail/exim/%d/%u/sieve
# Макс. размер скрипта фильтрации
  sieve_max_script_size = 1M
# Макс. количество действий в фильтре
  sieve_max_actions = 32
# Макс. количество редиректов в фильтре
  sieve_max_redirects = 8
# Макс. количество скриптов самих фильтров
  sieve_quota_max_scripts = 30
}
Файл настройки плагинов, в нашем случае настраиваем подключенный dovecot-antispam (также в этом файле можно настроить любой другой подключаемый плагин) /usr/local/etc/dovecot/conf.d/90-plugin.conf

Код: Выделить всё

plugin {
# Указываем наш бэкенд
antispam_backend = dspam 
# Задаем параметры обучения hum-а для DSPAM
antispam_dspam_notspam = --class=innocent
# Задаем параметры обучения spam-а для DSPAM
antispam_dspam_spam = --class=spam 
# Обозначаем каталог спама
antispam_spam = JUNK;Junk;junk
# Обозначаем каталог корзины
antispam_trash = trash;Trash;Deleted Items;Deleted Messages
antispam_spam_pattern_ignorecase = Junk;Junk.*
antispam_trash_pattern_ignorecase = Trash;Deleted Items;Deleted Messages
# Какой хидер и подпись использовать для определения спамового письма
antispam_dspam_result_header = X-DSPAM-Result
antispam_signature = X-DSPAM-Signature
# Что делать с письмом после переобучения:
# в нашем случаем перемещать в указанный каталог
antispam_signature_missing = move
# Путь к бинарнику DSPAM
antispam_dspam_binary = /usr/local/bin/dspam
# Параметры обучения
antispam_dspam_args = --user;%u;--deliver=;--source=error;--signature=%%s
}
Содержимое скрипта /usr/local/etc/dovecot/overquoted для отправки квот, указанного в конфиге /usr/local/etc/dovecot/conf.d/10-master.conf

Код: Выделить всё

#!/usr/local/bin/bash
PERCENT=$1
USER=$2
SUBJECT="=?UTF-8?B?$(echo "$SUBJECT" | base64 -w0)?="
# Этот текст у себя пишите в одну строку
cat << EOF | /usr/local/libexec/dovecot/dovecot-lda -d $USER -o \
"plugin/quota=maildir:User quota:noenforcing"

MIME-Version: 1.0
From: Administrator <free_m@camion.com.ua>
Subject: Вы исчерпали квоту почтового ящика на $PERCENT%
Content-Type: text/plain; charset=UTF-8;format=flowed
Content-Transfer-Encoding: 8bit

Доступное пространство Вашего ящика исчерпано на $PERCENT%.
EOF


Ну вот вроде бы и закончили с конфигами Dovecot-а, аж не вериться :) Теперь для автостарта довекота добавляем в rc.conf

Код: Выделить всё

# echo 'dovecot_enable="YES"' >> /etc/rc.conf
Запускаем и проверяем

Код: Выделить всё

# /usr/local/etc/rc.d/dovecot start
# sockstat -4 -l | grep dovecot
root     dovecot    42460 15 tcp4   *:4190                *:*
root     dovecot    42460 24 tcp4   *:110                 *:*
root     dovecot    42460 25 tcp4   *:995                 *:*
root     dovecot    42460 32 tcp4   *:143                 *:*
root     dovecot    42460 33 tcp4   *:993                 *:*

Итак, проверим работу dovecot на примере POP3

Код: Выделить всё

# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK IMAP server ready.
user username@domain.com.ua
+OK
pass yoursecretpass
+OK Logged in.
stat
+OK 3006 380337139
quit
+OK Logging out.
Connection closed by foreign host.

Если что-то пошло не так, смотрим лог tail -f /var/log/dovecot/mainlog и исправляем ошибки.


Во время настройки DSPAM столкнулся с фичей нехватки прав на бинарник DSPAM и его конфигурационный файл после установки. По умолчанию в файле Makeconf порта DSPAM указаны параметры сборки с владельцем root, когда я первый раз установил порт, то напролося на кучу ошибок в логах Dovecot-a о нехватке прав на запуск DSPAM. Поэтому, чтобы избежать не нужных нам проблем, перед установкой добавьте в /etc/make.conf следующее

Код: Выделить всё

DSPAM_OWNER=mailnull
DSPAM_GROUP=mail
DSPAM_HOME_OWNER=mailnull
DSPAM_HOME_GROUP=mail
Саму установку и настройку DSPAM я делал по этой статье

Установку и настройку EXIM с пользователями в MySQL описывать не буду, т.к. здесь есть множество статей на эту тему, остановлюсь только на настройке роутеров и транспорта для Dovecot, DSPAM а также аутентификации CRAM-MD5.

Роутеры проверки спама, необходимо вставить перед роутером локальной доставки Dovecot, это очень важно! Итак правим конфиг екзима /usr/local/etc/exim/configure
В секции begin routers после роутера system_aliases добавляем следующее:

Код: Выделить всё

# DSPAM ROUTERS
dspam_spamscan_router:
  driver = accept
  domains                      = +local_domains
  no_verify
  condition = "${if and {{!eq {$received_protocol}{spam-scanned}} \
                {!eq {$received_protocol}{local}} } {1}{0}}"
  transport = dspam_spamcheck_transport
  require_files = /usr/local/bin/dspam
  address_test = false
  user = mailnull
  group = mail

local_delivery_spam_router:
  driver                       = accept
  domains                      = +local_domains
  condition                    = ${if match{$h_X-DSPAM-Result:}{Spam}}
  transport                    = local_delivery_spam_transport
  no_more
  user = mailnull
  group = mail

# LOCAL DELIVERY
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 порядок добавления не важен, просто вставляем:

Код: Выделить всё

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

# DSPAM TRANSPORT
dspam_addspam_transport:
  driver = pipe
  command = "/usr/local/bin/dspam --user \
                $local_part@$domain --class=spam --source=error"
  return_path_add = false
  return_fail_output = true
  log_output = true
  home_directory = "/var/db/dspam"
  current_directory = "/var/db/dspam"
  user = mailnull
  group = mail

dspam_notspam_transport:
  driver = pipe
  command = "/usr/local/bin/dspam --user \
                $local_part@$domain --class=innocent \
                --source=error --deliver=innocent %u"
  return_path_add = false
  return_fail_output = true
  log_output = true
  home_directory = "/var/db/dspam"
  current_directory = "/var/db/dspam"
  user = mailnull
  group = mail

dspam_spamcheck_transport:
  driver = pipe
  command = /usr/local/bin/dspam --deliver=innocent \
                --user "$local_part@$domain" -- %u
  user = mailnull
  group = mail
  return_path_add = false
  log_output = true
  return_fail_output = true
  headers_remove        = X-DSPAM-Result

local_delivery_spam_transport:
  driver = pipe
# Команда перемещения писем распознанных как спам в каталог спама
# у меня этот каталог Junk
  command = /usr/local/libexec/dovecot/deliver -d \
                $local_part@$domain -m Junk
  message_prefix =
  message_suffix =
  delivery_date_add
  envelope_to_add
  return_path_add
  log_output
  user = mailnull

Аутентификация у меня работает через Dovecot, правим секцию begin authenticators

Код: Выделить всё

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

dovecot_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1

dovecot_cram_md5:
driver = dovecot
public_name = CRAM-MD5
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
Настройка Exim закончена.

Теперь, к примеру, если Вы получили письмо, которое является заведомо спамом, но попало по ошибке фильтра во входящие, то чтобы переучить спамфильтр и сказать ему, что это письмо спамовое, достаточно просто переместить его в папку Спам(Junk) и после этого в логе соответствующего пользователя появиться запись свидетельствующая о переобучении спам-фильтра

Код: Выделить всё

# tail -f /var/db/dspam/data/username@domain.com.ua/username@domain.com.ua.log

1369209224      I       spammail@pisem.net    519c7988278601581114498 dddddd  Delivered       <2afbf94cd4594c6f22610d8c18fc63cad334e4c2@mail.qip.ru>

1369209324      M       <None Specified>        519c7988278601581114498 <None Specified>        Retrained
А если письмо снова вернуть во Входящие, то письмо будет считаться не спамом.


Пользователей в базе я создаю из веб-панели postfixadmin, оттуда пароли автоматически криптуются в CRAM-MD5. Есть одна важная особенность в конфиге postfixadmin, касающаяся именно второй версии Dovecot, это путь к бинарнику создания криптованого пароля для пользователя, в отличии от первой версии Dovecot используется другой бинарник с параметрами. Вот собственно параметры конфига, отвечающие за вышесказанное:

Код: Выделить всё

$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['authlib_default_flavor'] = 'md5raw'
$CONF['dovecotpw'] = "/usr/local/bin/doveadm pw";
Аутентификацию по механизму CRAM-MD5 можно проверить из того же Roundcube, вот кусок лога довекот:

Код: Выделить всё

# tail -f /var/log/dovecot/mainlog
May 24 13:48:59 auth: Debug: auth client connected (pid=42864)
May 24 13:48:59 auth: Debug: client in: AUTH    1       CRAM-MD5        service=imap    secured session=HWXci3TdfgBOLsbU        lip=1.2.3.4       rip=1.2.3.4       lport=993       rport=10878
May 24 13:48:59 auth: Debug: client passdb out: CONT    1       PDI2NzU0ODY2Mjg3MTE0MjguMTM2OTM5MjUzOUBteHZtLm1hbmZyZWUua2lldi51YT4=
May 24 13:48:59 auth: Debug: client in: CONT<hidden>
May 24 13:48:59 auth-worker(42818): Debug: sql(username@domain.com.ua,1.2.3.4): query: SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = 'username@domain.com.ua' AND `active`='1'
May 24 13:48:59 auth: Debug: client passdb out: OK      1       user=username@domain.com.ua
May 24 13:48:59 auth: Debug: master in: REQUEST 3470262273      42863   1       a88e3cf4ba52caee8dae888e230985b6
May 24 13:48:59 auth: Debug: master userdb out: USER    3470262273      username@domain.com.ua      home=/var/mail/exim/domain.com.ua/username@domain.com.ua/ uid=26  gid=26  quota=dict:storage=100000::proxy::sqlquota      quota_rule=*:storage=102400000B
May 24 13:48:59 auth-worker(42818): Debug: sql(username@domain.com.ua,1.2.3.4): SELECT CONCAT('/var/mail/exim/', `maildir`) AS `home`, 26 AS `uid`, 26 AS `gid`, concat('dict:storage=', CAST(ROUND(quota / 1024) AS CHAR), '::proxy::sqlquota') AS quota, CONCAT('*:storage=', CAST(quota AS CHAR), 'B') AS quota_rule FROM `mailbox` WHERE `username` = 'username@domain.com.ua' AND `active`='1'
May 24 13:48:59 imap-login: Info: Login: user=<username@domain.com.ua>, method=CRAM-MD5, rip=1.2.3.4, lip=1.2.3.4, mpid=42866, TLS, session=<HWXci3TdfgBOLsbU>
Как видно из лога все прошло без ошибок.

Переходя на новый сервер, необходимо переместить все пользовательские ящики, таким образом, чтобы мейлдиры после Courier-а лягли в структуру Dovecot, сразу начал читать оф. вики довекота http://wiki2.dovecot.org/Migration/Courier но процедура оказалась слишком монструозной и длительной. Я решил отказаться от такого метода и вспомнил про перловый скрипт imapsync, как оказалось не напрасно. Нагуглил красивое решение для массовой синхронизации всех почтовых ящиков, выдергивая в цикле логины и пароли пользователей из базы старого сервера (соединяться с базой можна по сети либо импортнуть ее на новый сервер под другим именем). На новом сервере перед синхронизацией все пользователи должны быть созданы предварительно либо скриптом, либо вручную, т.к. пароли в базу будут ложиться в криптованом виде. Я у себя создал вручную, по причине небольшого количества пользователей. Вот сам скрипт:

Код: Выделить всё

#! /usr/bin/perl
#Параметры MySql
$dbuser = 'user';
$dbpass = 'password';
$db = 'database';
$dbhost = 'localhost';
$domain = 'domain.com.ua';
#Параметры Courier
$server = '192.168.0.1';
$domain1 = 'domain.com.ua';

use DBI;
#Создаем SQL запрос
#login - логин пользователя без указания домена (например vova)
#decrypt - пароль почтового ящика в открытом виде
#domain - почтовый домен пользователя (domain.com.ua)
#status - признак активности пользователя
$query = 'SELECT login, decrypt FROM users WHERE \
 domain=\''.$domain.'\' AND status=\'1\'';
#Подключаемся к базе данных
$dbh = DBI->connect("DBI:mysql:database=$db;host=$dbhost",$dbuser, \
$dbpass) || die print "Can't connect";
#Выполняем SQL запрос
$sth = $dbh->prepare(qq{$query});
$sth -> execute;
# Выполняем синхронизацию
# делать выборку данных
# пока ничего не останется
while (my ($m_user, $m_pass) = $sth->fetchrow_array())
        {
$user1=$m_user.'@'.$domain1;
$user2=$m_user.'@'.$domain;
       #Сообщаем, над каким ящиком трудимся в данный момент
        print "Syncronize mail for ".$user2."\n";
$r_sync=`imapsync --host1 $server --user1 $user1 --password1 $m_pass \
--host2 $dbhost --user2 $user2 --password2 $m_pass`;

}
$sth->finish();
$dbh->disconnect();
exit;
Тестовая синхронизация двух ящиков суммарным объемом 900мб заняла очень большое время - порядка 2 часов, поэтому почитав фак на страничке разработчика я добавил в строку синхронизации кеширование, отменил подсчет размера папок и изменил временный каталог для кэша в итоге кусок скрипта отвечающий за imapsync выглядит так:

Код: Выделить всё

$r_sync=`imapsync --host1 $server --user1 $user1 --password1 $m_pass --host2 $dbhost --user2 $user2 --password2 $m_pass` --authmech2 CRAM-MD5 --tmpdir /var/tmp --nofoldersizes --usecache;
Вторичный запуск синхронизации рекомендуется запускать вместо --usecache с параметром --useuid - собственно для использования построенных индексов в кеше:

Код: Выделить всё

$r_sync=`imapsync --host1 $server --user1 $user1 --password1 $m_pass --host2 $dbhost --user2 $user2 --password2 $m_pass` --authmech2 CRAM-MD5 --tmpdir /var/tmp --nofoldersizes --useuid;
Вот собственно и все, чем я хотел поделиться с общественностью, т.к. сам в свое время не нашел в едином месте материала объединяющего все моменты и нюансы настройки данной связки.

Используемые материалы:
http://wiki2.dovecot.org/
http://www.lissyara.su/
http://www.info-x.org
http://extmemory.blogspot.com/2009/10/imapsync.html

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-09-23 12:58:11
Oleg_M
На текущий момент меня интересует Exim и DSPAM, статья на которую Вы дали ссылку http://www.lissyara.su/articles/freebsd ... n_to_exim/ была написана 6 лет назад, как практика показала при настройке по статье такой давности возникает потом куча ошибок, как по вине отличия в версиях так и по вине неправильно принятых решений во время установки в пунктах отличающихся от описания.

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-09-23 13:09:15
freeman_tnu
Особо отличий нету, я думаю, Вас интересует вот это:

Код: Выделить всё

cd /usr/ports/mail/dspam

Код: Выделить всё

# make showconfig | grep =on
     CLAMAV=on: ClamAV support
     CLAMAV_LOCAL=on: RUN_DEPEND on selected ClamAV
     DAEMON=on: Daemonize dspam; speaks LMTP or DLMTP
     DEBUG=on: Install debug symbols
     HASH=on: Hash driver
     LONG_USERNAMES=on: Usernames longer that OS supports
     SYSLOG=on: Syslog support
     VIRT_USERS=on: Virtual users (needs SQL back-end)
     MYSQL55=on: MySQL 5.5.x as back-end
     PGSQL=on: PostgreSQL as back-end
     SQLITE3=on: SQLite v3.x as back-end

Код: Выделить всё

# cat /usr/local/etc/dspam.conf | grep -v # | sed '/^$/d' 
Home /var/db/dspam
StorageDriver /usr/local/lib/dspam/libmysql_drv.so
OnFail error
Trust root
Trust dspam
Trust dovecot
Trust mail
Trust mailnull 
Trust smmsp
Trust daemon
Debug *
TrainingMode teft
TestConditionalTraining on
Feature whitelist
Feature noise
Algorithm graham burton
Tokenizer chain
PValue graham
AllowOverride enableBNR
AllowOverride enableWhitelist
AllowOverride fallbackDomain
AllowOverride ignoreGroups
AllowOverride ignoreRBLLookups
AllowOverride localStore
AllowOverride makeCorpus
AllowOverride optIn
AllowOverride optOut
AllowOverride optOutClamAV
AllowOverride processorBias
AllowOverride RBLInoculate
AllowOverride showFactors
AllowOverride signatureLocation
AllowOverride spamAction
AllowOverride spamSubject
AllowOverride statisticalSedation
AllowOverride storeFragments
AllowOverride tagNonspam
AllowOverride tagSpam
AllowOverride trainPristine
AllowOverride trainingMode
AllowOverride whitelistThreshold
AllowOverride dailyQuarantineSummary
MySQLServer             localhost
MySQLPort               3306
MySQLUser               dspam
MySQLPass               dspam_Pass
MySQLDb                 dspam
MySQLConnectionCache    1000
HashRecMax              98317
HashAutoExtend          on  
HashMaxExtents          0
HashExtentSize          49157
HashPctIncrease         10
HashMaxSeek            100
HashConnectionCache    100
IgnoreHeader X-Spam-Status
IgnoreHeader X-Spam-Scanned
IgnoreHeader X-Virus-Scanner-Result
IgnoreHeader Date
IgnoreHeader Envelope-to
IgnoreHeader Delivery-date
IgnoreHeader Received
IgnoreHeader User-Agent
IgnoreHeader Content-Type
IgnoreHeader Content-Transfer-Encoding
IgnoreHeader To
Notifications   off
LocalMX 127.0.0.1
SystemLog       on
UserLog         on
Opt out
MaxMessageSize 200000
ProcessorURLContext on
ProcessorBias on
StripRcptDomain off

Код: Выделить всё

 # cat /var/db/dspam/group
system:shared:*

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-09-29 18:40:47
Oleg_M
Совершенно нет, меня интересует установка Exim с пользователями в БД MySQL,а именно совместимая с выше изложенной инструкцией, что бы не было дописанных лишних конфигов которые повлекут нежелательные последствия.

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-09-30 11:08:27
freeman_tnu
Полностью совместима http://www.lissyara.su/articles/freebsd ... rier-imap/ изменения касаемые dovecot в моей статье.
Никаких нежелательных последствий, главное не копипастить, а вдумчиваю править конфиги.

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-08 15:53:47
Oleg_M
Почему то не работает алиас почты, в мускуле прописано с какого и на какой перенаправить, а в логах пишет следуюущее (адрес домена скрыл):

Код: Выделить всё

/var/log/dovecot/mainlog (странно что ругается – не найден каталог /var/mail/exim/МОЙ_ДОМЕН/test/ он ведь есть)
Oct 08 14:29:49 auth: Debug: master in: USER    1       postmaster@МОЙ_ДОМЕН        service=lda
Oct 08 14:29:49 auth-worker(3199): Debug: Loading modules from directory: /usr/local/lib/dovecot/auth
Oct 08 14:29:49 auth-worker(3199): Debug: sql(postmaster@МОЙ_ДОМЕН): SELECT CONCAT('/var/mail/exim/', `maildir`) AS `home`, 26 AS `uid`, 26 AS `gid`,
Oct 08 14:29:49 auth-worker(3199): Info: sql(postmaster@МОЙ_ДОМЕН): Unknown user
Oct 08 14:29:49 auth: Debug: userdb out: NOTFOUND       1
Oct 08 14:29:49 auth: Debug: master in: USER    1       test@МОЙ_ДОМЕН      service=lda
Oct 08 14:29:49 auth-worker(3199): Debug: sql(test@МОЙ_ДОМЕН): SELECT CONCAT('/var/mail/exim/', `maildir`) AS `home`, 26 AS `uid`, 26 AS `gid`, conca
Oct 08 14:29:49 auth: Debug: userdb out: USER   1       test@МОЙ_ДОМЕН      home=/var/mail/exim/МОЙ_ДОМЕН/test/ uid=26  gid=26  quota=dict:storag
Oct 08 14:29:52 auth: Debug: auth client connected (pid=3208)
Oct 08 14:29:52 auth: Debug: client in: AUTH    1       PLAIN   service=pop3    session=VoVaFjnoUgDAqHkh        lip=192.168.0.97      rip=192.168.0.3
Oct 08 14:29:52 auth-worker(3199): Debug: sql(test@МОЙ_ДОМЕН,192.168.0.33): query: SELECT `username` as `user`, `password` FROM `mailbox` WHERE `us
Oct 08 14:29:52 auth: Debug: client passdb out: OK      1       user=test@МОЙ_ДОМЕН
Oct 08 14:29:52 auth: Debug: master in: REQUEST 2525233153      3208    1       6de47c8a58d7cf8467a76e6766fa50f7
Oct 08 14:29:52 auth-worker(3199): Debug: sql(test@МОЙ_ДОМЕН,192.168.0.33): SELECT CONCAT('/var/mail/exim/', `maildir`) AS `home`, 26 AS `uid`, 26
Oct 08 14:29:52 auth: Debug: master userdb out: USER    2525233153      test@МОЙ_ДОМЕН      home=/var/mail/exim/МОЙ_ДОМЕН/test/ uid=26  gid=26  q
Oct 08 14:29:52 pop3-login: Info: Login: user=<test@МОЙ_ДОМЕН>, method=PLAIN, rip=192.168.0.33, lip=192.168.0.97, mpid=3209, session=<VoVaFjnoUgD
Oct 08 14:29:52 pop3: Debug: Loading modules from directory: /usr/local/lib/dovecot
Oct 08 14:29:52 pop3: Debug: Module loaded: /usr/local/lib/dovecot/lib10_quota_plugin.so
Oct 08 14:29:52 pop3: Debug: Added userdb setting: plugin/quota=dict:storage=0::proxy::sqlquota
Oct 08 14:29:52 pop3: Debug: Added userdb setting: plugin/quota_rule=*:storage=0B
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Effective uid=26, gid=26, home=/var/mail/exim/МОЙ_ДОМЕН/test/
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Home dir not found: /var/mail/exim/МОЙ_ДОМЕН/test/
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota root: name=storage=0 backend=dict args=:proxy::sqlquota
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota rule: root=storage=0 mailbox=* bytes=0 messages=0
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota rule: root=storage=0 mailbox=Trash bytes=+104857600 messages=0
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota rule: root=storage=0 mailbox=Junk ignored
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (100%) messages=0 reverse=no command=quota-warning 100 test@МОЙ_ДОМЕН
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (95%) messages=0 reverse=no command=quota-warning 95 test@МОЙ_ДОМЕН
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (90%) messages=0 reverse=no command=quota-warning 90 test@МОЙ_ДОМЕН
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (85%) messages=0 reverse=no command=quota-warning 85 test@МОЙ_ДОМЕН
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (80%) messages=0 reverse=no command=quota-warning 80 test@МОЙ_ДОМЕН
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (75%) messages=0 reverse=no command=quota-warning 75 test@МОЙ_ДОМЕН
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (70%) messages=0 reverse=no command=quota-warning 70 test@МОЙ_ДОМЕН
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Quota grace: root=storage=0 bytes=0 (10%)
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: dict quota: user=test@МОЙ_ДОМЕН, uri=proxy::sqlquota, noenforcing=0
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: Namespace inbox: type=private, prefix=, sep=, inbox=yes, hidden=no, list=yes, subscriptions=yes location
Oct 08 14:29:52 pop3(test@МОЙ_ДОМЕН): Debug: maildir++: root=/var/mail/exim/МОЙ_ДОМЕН/test@МОЙ_ДОМЕН, index=, indexpvt=, control=, inbox=/var
Oct 08 14:29:54 pop3(test@МОЙ_ДОМЕН): Info: Disconnected: Logged out top=0/0, retr=1/1963, del=1/1, size=1946

Код: Выделить всё

/var/log/debug.log 
Oct  8 14:29:49 gate dovecot: lda: Debug: Loading modules from directory: /usr/local/lib/dovecot
Oct  8 14:29:49 gate dovecot: lda: Debug: Module loaded: /usr/local/lib/dovecot/lib10_quota_plugin.so
Oct  8 14:29:49 gate dovecot: lda: Debug: Module loaded: /usr/local/lib/dovecot/lib90_sieve_plugin.so
Oct  8 14:29:49 gate dovecot: lda: Debug: auth input:
Oct  8 14:29:49 gate dovecot: lda: Debug: Loading modules from directory: /usr/local/lib/dovecot
Oct  8 14:29:49 gate dovecot: lda: Debug: Module loaded: /usr/local/lib/dovecot/lib10_quota_plugin.so
Oct  8 14:29:49 gate dovecot: lda: Debug: Module loaded: /usr/local/lib/dovecot/lib90_sieve_plugin.so
Oct  8 14:29:49 gate dovecot: lda: Debug: auth input: test@МОЙ_ДОМЕН home=/var/mail/exim/МОЙ_ДОМЕН/test/ uid=26 gid=26 quota=dict:storage=0::prox
Oct  8 14:29:49 gate dovecot: lda: Debug: Added userdb setting: plugin/quota=dict:storage=0::proxy::sqlquota
Oct  8 14:29:49 gate dovecot: lda: Debug: Added userdb setting: plugin/quota_rule=*:storage=0B
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Effective uid=26, gid=26, home=/var/mail/exim/МОЙ_ДОМЕН/test/
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Home dir not found: /var/mail/exim/МОЙ_ДОМЕН/test/
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota root: name=storage=0 backend=dict args=:proxy::sqlquota
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota rule: root=storage=0 mailbox=* bytes=0 messages=0
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota rule: root=storage=0 mailbox=Trash bytes=+104857600 messages=0
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota rule: root=storage=0 mailbox=Junk ignored
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (100%) messages=0 reverse=no command=quota-warning 100 test@partner.
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (95%) messages=0 reverse=no command=quota-warning 95 test@partner.ck
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (90%) messages=0 reverse=no command=quota-warning 90 test@partner.ck
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (85%) messages=0 reverse=no command=quota-warning 85 test@partner.ck
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (80%) messages=0 reverse=no command=quota-warning 80 test@partner.ck
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (75%) messages=0 reverse=no command=quota-warning 75 test@partner.ck
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=0 (70%) messages=0 reverse=no command=quota-warning 70 test@partner.ck
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota grace: root=storage=0 bytes=0 (10%)
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: dict quota: user=test@МОЙ_ДОМЕН, uri=proxy::sqlquota, noenforcing=0
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Namespace inbox: type=private, prefix=, sep=, inbox=yes, hidden=no, list=yes, subscriptions
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: maildir++: root=/var/mail/exim/МОЙ_ДОМЕН/test@МОЙ_ДОМЕН, index=, indexpvt=, control
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota root: name=User quota backend=dict args=:noenforcing:proxy::sqlquota
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota rule: root=User quota mailbox=* bytes=1073741824 messages=0
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota rule: root=User quota mailbox=Trash bytes=+104857600 messages=0
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota rule: root=User quota mailbox=Junk ignored
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=1073741824 (100%) messages=0 reverse=no command=quota-warning 100 raw
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=1020054732 (95%) messages=0 reverse=no command=quota-warning 95 raw ma
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=966367641 (90%) messages=0 reverse=no command=quota-warning 90 raw mai
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=912680550 (85%) messages=0 reverse=no command=quota-warning 85 raw mai
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=858993459 (80%) messages=0 reverse=no command=quota-warning 80 raw mai
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=805306368 (75%) messages=0 reverse=no command=quota-warning 75 raw mai
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota warning: bytes=751619276 (70%) messages=0 reverse=no command=quota-warning 70 raw mai
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Quota grace: root=User quota bytes=107374182 (10%)
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: dict quota: user=raw mail user, uri=proxy::sqlquota, noenforcing=1
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: none: root=, index=, indexpvt=, control=, inbox=, alt=
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: Destination address: test@МОЙ_ДОМЕН (source: user@hostname)
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: sieve: Pigeonhole version 0.4.1 initializing
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: sieve: include: sieve_global_dir is not set; it is currently not possible to include `:glob
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: sieve: script file /var/mail/exim/МОЙ_ДОМЕН/test@МОЙ_ДОМЕН/.dovecot.sieve not found
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: sieve: user's script /var/mail/exim/МОЙ_ДОМЕН/test@МОЙ_ДОМЕН/.dovecot.sieve doesn't
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: sieve: no default script configured for user
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: sieve: user has no valid location for a personal script
Oct  8 14:29:49 gate dovecot: lda(test@МОЙ_ДОМЕН): Debug: sieve: no scripts to execute: reverting to default delivery.
Странно .dovecot.sieve и на самом деле нету :-(

Exim mainlog:

Код: Выделить всё

/var/log/exim/mainlog 
2013-10-08 14:29:47 no host name found for IP address 192.168.0.33
2013-10-08 14:29:48 1VTVU4-0000pO-1R <= test@МОЙ_ДОМЕН H=(systweak.com) [192.168.0.33] P=esmtp S=747 id=1886984594.20131008142951@МОЙ_ДОМЕН
2013-10-08 14:29:48 1VTVU4-0000pU-RO <= test@МОЙ_ДОМЕН U=mailnull P=spam-scanned S=958 id=1886984594.20131008142951@МОЙ_ДОМЕН
2013-10-08 14:29:48 1VTVU4-0000pO-1R => postmaster <postmaster@МОЙ_ДОМЕН> R=dspam_spamscan_router T=dspam_spamcheck_transport
2013-10-08 14:29:48 1VTVU4-0000pO-1R Completed
2013-10-08 14:29:49 1VTVU4-0000pU-RO ** postmaster@МОЙ_ДОМЕН R=dovecot_user T=dovecot_delivery: Child process of dovecot_delivery transport returned
2013-10-08 14:29:49 1VTVU5-0000pc-2t <= <> R=1VTVU4-0000pU-RO U=mailnull P=local S=1797
2013-10-08 14:29:49 1VTVU4-0000pU-RO Completed
2013-10-08 14:29:49 1VTVU5-0000pc-2t => test <test@МОЙ_ДОМЕН> R=dovecot_user T=dovecot_delivery
2013-10-08 14:29:49 1VTVU5-0000pc-2t Completed

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-09 10:10:38
freeman_tnu
Покажите содержимое файлов
/usr/local/etc/dovecot/conf.d/90-sieve.conf
/usr/local/etc/dovecot/dovecot-sql.conf.ext
желательно без коментариев.
И меня смущает вот это:

Код: Выделить всё

Oct 08 14:29:49 auth-worker(3199): Info: sql(postmaster@МОЙ_ДОМЕН): Unknown user
Oct 08 14:29:49 auth: Debug: userdb out: NOTFOUND       1

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-09 10:17:11
freeman_tnu
У Вас в каталоге структура хранения почтовых акаунтов user или user@domain?
/usr/local/etc/dovecot/conf.d/10-mail.conf
переменные
mail_home
mail_location

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-11 17:16:45
Oleg_M
Пардон что по долгу не отвечаю, занимаюсь этой настройкой только по свободном времени.
На днях этот сервер умудрился перестать пускать демонов в базу МуСКУЛ, причем вручную только под рутом мог входить, почле 3-х дней тупого простаивания системы все заработало вновь без каких либо видимых причи (в винде в это я бы еще поверил, в фряхе - я в шоке).
И так отвечаю на вопросы выше:

Код: Выделить всё

/usr/local/etc/dovecot/conf.d/90-sieve.conf
plugin {
  sieve = /var/mail/exim/%d/%u/.dovecot.sieve
  sieve_dir = /var/mail/exim/%d/%u/sieve
  sieve_max_script_size = 1M
  sieve_max_actions = 32
  sieve_max_redirects = 8
  sieve_quota_max_scripts = 30
}

Код: Выделить всё

/usr/local/etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=exim user=ЛОГИН СЕКРЕТ password=ПАРОЛЬ ТОЖЕ
default_pass_scheme = CRAM-MD5

password_query = SELECT `username` as `user`, `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`, concat('dict:storage=', \
CAST(ROUND(quota / 1024) AS CHAR), '::proxy::sqlquota') \
AS quota, CONCAT('*:storage=', CAST(quota AS CHAR), 'B') AS quota_rule \
FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
На счет смущения, меня тоже оно смущает, так как алиас есть (юзер создать одновременно с алиасом непозволяет)
И последний ответ:
Структура:
mail_home нету

Код: Выделить всё

mail_location = maildir:/var/mail/exim/%d/%u

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-15 4:15:46
Oleg_M
1. Нашел что укладывало мне аутентификацию с MySQL, это dspam, он подымал 1000 конектов одновременно к мускулу и тот само собой зависал, в итоге по приоритету root заходит, а почтовые приложения не могут соединиться и отваливаются по таймауту. Как временное решение в /usr/local/etc/dspam.conf уменьшил значение MySQLConnectionCache 1000 до минимума, пока что почта бегает, вопрос только в корректности работы дспама.
2. Вот еще что пишет сейчас:

Код: Выделить всё

2013-10-15 04:02:07 failed to expand condition "${if eq{$tls_cipher}{}{false}{true}" for dovecot_login authenticator: missing or misplaced { or }
2013-10-15 04:02:07 failed to expand condition "${if eq{$tls_cipher}{}{false}{true}" for dovecot_plain authenticator: missing or misplaced { or }
2013-10-15 04:02:07 failed to expand condition "${if eq{$tls_cipher}{}{false}{true}" for dovecot_cram_md5 authenticator: missing or misplaced { or }
2013-10-15 04:04:22 1VVt3e-0000F1-F6 failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='m
ail.МОЙ_ДОМЕН' AND `active`='1'" gave DEFER: MYSQL connection failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
2013-10-15 04:04:22 1VVt3e-0000FV-S9 failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='m
ail.МОЙ_ДОМЕН' AND `active`='1'" gave DEFER: MYSQL connection failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Может что-то не установил или не туда прописал?

Код: Выделить всё

#Аутентификация через Dovecot
dovecot_login:
driver = dovecot
public_name = LOGIN
server_advertise_condition = ${if eq{$tls_cipher}{}{false}{true}
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1

Код: Выделить всё

root@gate:/usr/ports/mail/exim # make showconfig
===> The following configuration options are available for exim-4.80.1_2:
     ALT_CONFIG_PREFIX=off: Restrict the set of configuration files
     AUTH_CRAM_MD5=on: Enable CRAM-MD5 authentication mechanisms
     AUTH_DOVECOT=on: Enable Dovecot authentication mechanisms
     AUTH_PLAINTEXT=on: Enable plaintext authentication
     AUTH_RADIUS=off: Enable radius (RFC 2865) authentication
     AUTH_SASL=off: Enable use of Cyrus SASL auth library
     AUTH_SPA=on: Enable Secure Password Authentication
     CDB=on: Enable CDB-style lookups
     CONTENT_SCAN=on: Enable exiscan email content scanner
     DAEMON=on: Install scripts to run as a daemon
     DCC=off: Enable DCC at ACL support via dccifd
     DEBUG=off: Install debug symbols
     DISABLE_D_OPT=on: Disable macros overrides using option -D
     DKIM=on: Enable support for DKIM
     DNSDB=on: Enable DNS-style lookups
     DSEARCH=on: Enable directory-list lookups
     EMBEDDED_PERL=on: Enable embedded Perl interpreter
     EXIMON=off: Build eximon monitor (require XFree86!)
     GNUTLS=off: Use GnuTLS instead of OpenSSL for TLS
     ICONV=on: Enable header charset conversion
     IPV6=on: IPv6 protocol support
     KAS=off: Build with Kaspersky AntiSpam local scan
     LISTMATCH_RHS=off: Enable pre-4.77 behaviour for match_*
     LMTP=on: RFC2033 SMTP over command pipe transport
     LSEARCH=on: Enable wildcarded-file lookups
     MAILDIR=on: Enable Maildir mailbox format
     MAILSTORE=on: Enable Mailstore mailbox format
     MBX=on: Enable MBX mailbox format
     MYSQL=on: Link against libmysqlclient library
     NIS=on: Enable NIS-style lookups
     OLD_DEMIME=on: Enable old, deprecated "demime" ACL
     OPENLDAP=off: Link against libldap
     PAM=on: Enable PAM authentication mechanisms
     PASSWD=off: Enable /etc/passwd lookups
     PGSQL=off: Link against libpq
     READLINE=on: Enable readline(3) library
     SASLAUTHD=off: Enable use of Cyrus SASL auth daemon
     SA_EXIM=off: SA-Exim support
     SO_1024=off: Build with Spamooborona-1024 local scan
     SPF=on: Enable Sender Policy Framework checking
     SQLITE=off: Enable SQLite lookups
     SRS=on: Enable Sender Rewriting Scheme
     SRS_ALT=off: Enable alternative SRS library
     SUID=on: Install the exim binary suid root
     TCP_WRAPPERS=off: Enable /etc/hosts.allow access control
     TLS=on: TLS support
     WISHLIST=off: Include the unsupported patches
     XCLIENT=off: Enable XCLIENT command in exim
===> Use 'make config' to modify these settings
Для MySQL mk.conf имеется (по статье http://www.bsdportal.ru/kb.php?a=3)
mysql.sock лежит где ему указано.

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-15 17:29:25
Oleg_M
Решил обе ошибки, в одной добавил недостающую скобку } , во второй заменил

Код: Выделить всё

WHERE `domain`='${domain}'
на
WHERE `domain`='mail.имя_домена'
Если что-то сделал не правильно прошу написать как правильно устранить...

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-16 11:14:23
freeman_tnu
По повду вот этого
/var/log/dovecot/mainlog (странно что ругается – не найден каталог /var/mail/exim/МОЙ_ДОМЕН/test/ он ведь есть)
Попробуйте вот такой запрос
/usr/local/etc/dovecot/dovecot-sql.conf.ext

Код: Выделить всё

user_query = SELECT CONCAT('/var/mail/exim/', `domain`, '/', `maildir`) \
AS `home`, 26 AS `uid`, 26 AS `gid`, concat('dict:storage=', \
CAST(ROUND(quota / 1024) AS CHAR), '::proxy::sqlquota') \
AS quota, CONCAT('*:storage=', CAST(quota AS CHAR), 'B') AS quota_rule \
FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-16 15:04:11
boffin
Ни как не могу заставить dspam работать от mailnull:mail

Код: Выделить всё

Oct 16 13:44:42 mz dspam[9541]: Could not bind to :24: Permission denied
Oct 16 13:44:42 mz dspam[9541]: Daemon mode failed to start
Oct 16 13:44:42 mz dspam[9541]: Daemon process exiting
PS. Спасибо большое за статью.

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-16 17:53:40
Oleg_M
freeman_tnu писал(а): Попробуйте вот такой запрос
...
Если по поводу того что не было доступа к каталогам то все заработало раньше, не помню уже как но давно решил ошибку, а вот перенаправление почты так и не работает:

Код: Выделить всё

auth-worker(1906): Info: sql(admin@мой_домен): Unknown user
Oct 16 17:47:39 auth: Debug: userdb out: NOTFOUND       1
И еще одно, исправь в статье пункт

Код: Выделить всё

# vi /usr/local/etc/dspam.conf
MySQLConnectionCache    1000
дело в том что при таком раскладе вешается аутентификация других демонов в мускуле, заходит только рут, судя по описанию и другим инструкция вполне достаточно 10-20 подключений.

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-17 15:26:03
boffin
/var/log/dovecot/mainlog (странно что ругается – не найден каталог /var/mail/exim/МОЙ_ДОМЕН/test/ он ведь есть)
Тут дело в запросе. Это Postfixadmin при создании ящика создает неверную хомдиру которую потом Dovecot получает из базы.
В конфиге Postfixadmin поправить надо тут

Код: Выделить всё

// Mailboxes
// If you want to store the mailboxes per domain set this to 'YES'.
// Examples:
//   YES: /usr/local/virtual/domain.tld/username@domain.tld
//   NO:  /usr/local/virtual/username@domain.tld
$CONF['domain_path'] = 'YES';
// If you don't want to have the domain in your mailbox set this to 'NO'.
// Examples:.
//   YES: /usr/local/virtual/domain.tld/username@domain.tld
//   NO:  /usr/local/virtual/domain.tld/username
// Note: If $CONF['domain_path'] is set to NO, this setting will be forced to YES.
$CONF['domain_in_mailbox'] = 'YES';
Новые ящики создадутся с правилным путем, а старые надо править в базе.

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-17 20:36:59
Oleg_M
С каталогом разобрался и уже забыл давно, а что с неработающим перенаправлением почты делать?

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-19 13:11:28
Oleg_M
Где я натупил что при отправке почты в мир выдает следующее?

Код: Выделить всё

2013-10-19 13:02:50 1VXTMw-0000cj-K5 <= "test@МОЙ_ДОМЕН.UA"@МОЙ_ДОМЕН.ua H=([192.168.137.101]) [77.121.198.194] P=esmtpsa X=TLSv1:AES256-SHA:256 A=dovecot_cram_md5:test@МОЙ_ДОМЕН.UA S=833 id=1039231371.20131019130245@МОЙ_ДОМЕН.UA
2013-10-19 13:02:51 1VXTMw-0000cj-K5 == моя_почта@mail.ru R=dnslookup T=remote_smtp defer (-45): SMTP error from remote mail server after MAIL FROM:<"test@МОЙ_ДОМЕН.UA"@МОЙ_ДОМЕН.UA> SIZE=1882: host mxs.mail.ru [94.100.176.20]: 421 DNS problem (МОЙ_ДОМЕН.UA"@МОЙ_ДОМЕН.UA). Try again later

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-19 21:52:07
Oleg_M
Поднастроили сервак, убрали задвоенные домены, почта начала отправляться в мир, но из-за неверноей настройки ДНС на стороне провайдера пока что из мира не принимаю, когда все отлажу напишу некоторые уточнения к конфигу

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-22 10:58:40
Oleg_M
С ssl разобрался, все работает шикарно, в мир и с мира бегает, алиасы тоже заработали.
Добрый день.
Не удается запустить уведомление о квотах, ящик достиг своего предела но сообщения на ящик не присылаются.

Код: Выделить всё

Oct 22 10:35:32 auth: Debug: auth client connected (pid=9517)
Oct 22 10:35:32 auth: Debug: client in: AUTH    1       PLAIN   service=pop3    session=mJoTck/ptgDAqHkh        lip=192.168.121.97      rip=192.168.121.33   lport=110    rport=53686     resp=<hidden>
Oct 22 10:35:32 auth-worker(9282): Debug: sql(test@partner.ck.ua,192.168.121.33): query: SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = 'test@partner.ck.ua' AND `active`='1'
Oct 22 10:35:32 auth: Debug: client passdb out: OK      1       user=test@partner.ck.ua
Oct 22 10:35:32 auth: Debug: master in: REQUEST 473300993       9517    1       3fa1d54e56f1a4fc98528c366db495a7db
Oct 22 10:35:32 auth-worker(9282): Debug: sql(test@partner.ck.ua,192.168.121.33): SELECT CONCAT('/var/mail/exim/', `maildir`) AS `home`, 26 AS `uid`, 26 AS `gid`, concat('dict:storage=', CAST(ROUND(quota / 1024) AS CHAR), '::proxy::sqlquota') AS quota, CONCAT('*:storage=', CAST(quota AS CHAR), 'B') AS quota_rule FROM `mailbox` WHERE `username` = 'test@partner.ck.ua' AND `active`='1'
Oct 22 10:35:32 auth: Debug: master userdb out: USER    473300993       test@partner.ck.ua      home=/var/mail/exim/partner.ck.ua/test/ uid=26  gid=26  quota=dict:storage=0::proxy::sqlquota        quota_rule=*:storage=0B
Oct 22 10:35:32 pop3: Debug: Loading modules from directory: /usr/local/lib/dovecot
Oct 22 10:35:32 pop3: Debug: Module loaded: /usr/local/lib/dovecot/lib10_quota_plugin.so
Oct 22 10:35:32 pop3: Debug: Added userdb setting: plugin/quota=dict:storage=0::proxy::sqlquota
Oct 22 10:35:32 pop3: Debug: Added userdb setting: plugin/quota_rule=*:storage=0B
Oct 22 10:35:32 pop3-login: Info: Login: user=<test@partner.ck.ua>, method=PLAIN, rip=192.168.121.33, lip=192.168.121.97, mpid=9518, session=<mJoTck/ptgDAqHkh>
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: Effective uid=26, gid=26, home=/var/mail/exim/partner.ck.ua/test/
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: Home dir not found: /var/mail/exim/partner.ck.ua/test/
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: Quota root: name=storage=0 backend=dict args=:proxy::sqlquota
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: Quota rule: root=storage=0 mailbox=* bytes=0 messages=0
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: Quota rule: root=storage=0 mailbox=Trash bytes=+104857600 messages=0
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: Quota rule: root=storage=0 mailbox=Junk ignored
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: Quota warning: bytes=0 (100%) messages=0 reverse=no command=quota-warning 100 test@partner.ck.ua
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: Quota warning: bytes=0 (95%) messages=0 reverse=no command=quota-warning 95 test@partner.ck.ua
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: Quota grace: root=storage=0 bytes=0 (10%)
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: dict quota: user=test@partner.ck.ua, uri=proxy::sqlquota, noenforcing=0
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: Namespace inbox: type=private, prefix=, sep=, inbox=yes, hidden=no, list=yes, subscriptions=yes location=maildir:/var/mail/exim/partner.ck.ua/test@partner.ck.ua
Oct 22 10:35:32 pop3(test@partner.ck.ua): Debug: maildir++: root=/var/mail/exim/partner.ck.ua/test@partner.ck.ua, index=, indexpvt=, control=, inbox=/var/mail/exim/partner.ck.ua/test@partner.ck.ua, alt=
Oct 22 10:35:34 pop3(test@partner.ck.ua): Info: Disconnected: Logged out top=23/28696, retr=0/0, del=0/23, size=1031165212
И еще одно, строка с

Код: Выделить всё

 Debug: Home dir not found: 
ей не смог найти объяснение на форумах.

П.С.
Помогите пожалуйста разобраться со всем и после выложу цельный рабочий конфиг.

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-24 11:04:32
mak_v_
ещё непонятная грабля с dspam вылезла...вроде как транспорт работает, то в лог валиться:
1813: [10/24/2013 10:38:00] No such feature '%s'
Подозреваю - что с с параметрами вызова что-то не то, dspam_spamcheck_transport ковыряю....может кто подскажет?

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-25 10:20:47
freeman_tnu
mak_v_ писал(а):
1813: [10/24/2013 10:38:00] No such feature '%s'
Вообще не ясно как у Вас все настроенно, поэтому сложно подсказать, но на вскидку %s встречается только в шаблоне сигнатур параметров обучения dspam, у меня вот так

Код: Выделить всё

antispam_dspam_args = --user;%u;--deliver=;--source=error;--signature=%%s

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-25 10:25:03
freeman_tnu
Oleg_M
покажи dspam.conf и /etc/dovecot/conf.d/90-plugin.conf

по поводу быстрого обучения man dspam_train

Код: Выделить всё

dspam_train mailnull /path/to/spam /path/to/ham
кормишь ему нужное количество писем, сколько надо смотреть так

Код: Выделить всё

 dspam_stats -H
поле TL Training Left:

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-25 10:38:02
mak_v_
все практически идентично статье, только везде от пользователя exim....
Уже и так и сяк изголялся....No such feature '%s' .....как в "ручном режиме" отдебажить?

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-25 10:48:18
freeman_tnu
mak_v_ писал(а):все практически идентично статье
Вы хотябы сказали в каком логе это сообщение вылазит, если иденичто статье настроенно то покажите Ваш /etc/dovecot/conf.d/90-plugin.conf

Re: Exim и Dovecot2 c аутентификацией CRAM-MD5 + SQL quota +

Добавлено: 2013-10-25 10:58:40
mak_v_

Код: Выделить всё

cat /usr/local/etc/dovecot/conf.d/90-plugin.conf | grep -v "^#"
plugin {
antispam_backend = dspam
antispam_dspam_notspam = --class=innocent
antispam_dspam_spam = --class=spam
antispam_spam = JUNK;Junk;junk
antispam_trash = trash;Trash;Deleted Items;Deleted Messages
antispam_spam_pattern_ignorecase = Junk;Junk.*
antispam_trash_pattern_ignorecase = Trash;Deleted Items;Deleted Messages
antispam_dspam_result_header = X-DSPAM-Result
antispam_signature = X-DSPAM-Signature
antispam_signature_missing = move
antispam_dspam_binary = /usr/local/bin/dspam
antispam_dspam_args = --user;%u;--deliver=;--source=error;--signature=%%s
}

Код: Выделить всё

tail -f /var/log/dspam/dspam.log
3495: [10/24/2013 13:09:01] No such feature '%s'
3560: [10/24/2013 13:10:12] No such feature '%s'
3599: [10/24/2013 13:13:05] No such feature '%s'
3622: [10/24/2013 13:13:18] No such feature '%s'
3638: [10/24/2013 13:14:27] No such feature '%s'
3639: [10/24/2013 13:14:32] No such feature '%s'
3640: [10/24/2013 13:14:42] No such feature '%s'
3641: [10/24/2013 13:14:46] No such feature '%s'
3642: [10/24/2013 13:14:50] No such feature '%s'
3650: [10/24/2013 13:15:01] No such feature '%s'

Код: Выделить всё

tail -f /var/db/dspam/system.log
1382609667      M       <None Specified>        5268f2be36221788855033  <None Specified>        0.010518        test1@test.com.ua     Retrained
1382609672      F       <None Specified>        5268f2be36221788855033  <None Specified>        0.017364        test1@test.com.ua     Retrained