Значит так, поскольку dovecot это родственник cyrus'a, сильно невникал в родственные связи, но идейный точно. Так вот, есть два вида настройки связки postfix'a и dovecot'a - это как две отдельные системы, которые пересикаются между собой только в почтовой директории, когда работают с файлами либо настройка doverco'a как транспорт postfix'a. На мой взгляд когда постфикс и доверкот работают отдельно лучший вареант, но у второго тоже есть плюсы, например sieve, поэтому я его и использую, но об этом потом.
Такс, постфикс. Впринципи virtual ненужен, но я его оставил на тот случай если доверкот загнется и нужно будит чтобы постфикс принимал письма. Мне просто надо будит поменять транспорт и авторизацию и постфикс забудит про доверкот. Да и тестировать так проще, настраиваем постфикс, смотрим принимает ли он письма а потом настраиваем доверкот.
Postfix собираем так
[X] PCRE Perl Compatible Regular Expressions
[X] SASL2 Cyrus SASLv2 (Simple Auth. and Sec. Layer)
[X] DOVECOT Dovecot SASL authentication method
[X] TLS Enable SSL and TLS support
[X] MYSQL MySQL maps (choose version with WITH_MYSQL_VER)
[X] VDA VDA (Virtual Delivery Agent 32Bit)
создаем одного пользователя, можно и без него
# id virtual
uid=1001(virtual) gid=6(mail) groups=6(mail)
main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
mynetworks_style = host
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfix
myhostname = mail.domain.lt
mydomain = domain.lt
myorigin = $mydomain
smtpd_banner = DOMAIN.LT ESMTP
virtual_mailbox_base = /mail/virtual
mail_spool_directory = /mail
transport_maps = mysql:/usr/local/etc/postfix/mysql-transport.cf
virtual_transport = $transport_maps
# dovecote on
dovecot_destination_recipient_limit = 1
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql-users.cf
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql-aliases.cf
#virtual_mailbox_limit_override = yes
#virtual_maildir_extended = yes
#virtual_create_maildirsize = yes
#virtual_overquota_bounce = yes
#virtual_create_maildirsize = yes
#virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql-quota.cf
virtual_uid_maps = static:125
virtual_gid_maps = static:6
smtpd_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = PLAIN, LOGIN
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_use_tls = yes
smtpd_tls_key_file = /usr/local/etc/ssl/private/dovecot.pem
smtpd_tls_cert_file = /usr/local/etc/ssl/certs/dovecot.pem
smtpd_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
local_recipient_maps = $virtual_mailbox_maps $transport_maps
smtpd_sender_login_maps = $virtual_mailbox_maps $virtual_alias_maps $transport_maps
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8
relay_domains = $transport_maps
smtpd_helo_required = yes
strict_rfc821_envelope = yes
smtpd_sender_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_non_fqdn_recipient,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
reject_unknown_recipient_domain,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client xbl.spamhaus.org
master.cf - ничего не менял, просто в конце добавил
dovecot unix - n n - - pipe
flags=DRhu user=virtual:mail argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${recipient}
Структура файлов у меня такая, причем неважно есть ли уже "domain.lt/pupkin.v" или нет, если пользователь vitrual может писать в "/mail/virtual/" то как postfix так и dovecot все создадут сами. (дириктории неумеет создавать maildrop о нем подробнее тут https://unix-forum.ru/topic419.html)
mail# pwd
/mail/virtual/domain.lt/pupkin.v
mail# ls -la
total 50
drwx------ 8 virtual mail 512 Mar 5 00:17 .
drwx------ 4 virtual mail 512 Mar 4 23:20 ..
drwx------ 5 virtual mail 512 Mar 4 23:14 .Drafts
drwx------ 5 virtual mail 512 Mar 5 00:15 .Sent Items
drwx------ 5 virtual mail 512 Mar 5 00:17 .share
drwx------ 2 virtual mail 1024 Mar 5 00:16 cur
-rw------- 1 virtual mail 552 Mar 5 00:16 dovecot-uidlist
-rw------- 1 virtual mail 8 Mar 5 00:17 dovecot-uidvalidity
-rw------- 1 virtual mail 0 Mar 4 23:12 dovecot-uidvalidity.4b903e78
-rw------- 1 virtual mail 20480 Mar 5 00:16 dovecot.index.cache
-rw------- 1 virtual mail 5380 Mar 5 00:16 dovecot.index.log
-rw------- 1 virtual mail 171 Mar 5 00:17 maildirsize
drwx------ 2 virtual mail 512 Mar 5 00:16 new
-rw------- 1 virtual mail 30 Mar 5 00:17 subscriptions
drwx------ 2 virtual mail 512 Mar 5 00:16 tmp
Теперь dovecot
собераем так
[X] KQUEUE kqueue(2) support
[X] SSL SSL support
[X] MANAGESIEVE ManageSieve support
[X] MYSQL MySQL support
dovecot.conf
protocols = imap pop3 imaps pop3s
disable_plaintext_auth = no
ssl = yes
ssl_cert_file = /usr/local/etc/ssl/cert.pem
ssl_key_file = /usr/local/etc/ssl/key.pem
login_greeting = POP/IMAP Server Ready.
mail_location = maildir:/mail/virtual/%d/%n
mail_uid =1001
mail_gid =1001
mail_privileged_group = mail
mail_debug = yes
dotlock_use_excl = yes
verbose_proctitle = yes
first_valid_uid = 1001
last_valid_uid = 1001
first_valid_gid = 6
last_valid_gid = 6
maildir_copy_with_hardlinks = yes
protocol imap {
mail_plugins = quota imap_quota
}
protocol pop3 {
mail_plugins = quota
}
protocol lda {
sendmail_path = /usr/sbin/sendmail
postmaster_address = [email protected]
hostname = mail.domain.lt
mail_plugins = quota
uota_full_tempfail = no
}
auth_username_format = %n@%d
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
auth default {
mechanisms = plain login
passdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
userdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0660
user = virtual
group = mail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = mail
}
}
}
plugin {
quota = maildir
}
dovecot-sql.conf (я не переделывал свою базу пользователей со старых времен, поэтому пришлось немного подправить sql запросы.)
driver = mysql
connect = host=HOST dbname=BASE user=USER password=PASSWORD
default_pass_scheme = PLAIN
user_query = SELECT \
CONCAT ("/mail/virtual/",maildir) AS home, \
concat('*:bytes=',quota) AS quota_rule, \
"1001" AS uid, \
"6" AS gid \
FROM users WHERE login = '%u' AND allow_imap = '1'
password_query = SELECT \
login AS user, \
plainpass AS password, \
maildir AS userdb_home, \
concat('*:bytes=',quota) as userdb_quota_rule, \
"1001" AS userdb_uid, \
"6" AS userdb_gid \
FROM users WHERE login = '%u' AND allow_imap = '1'
помойму ничего не забыл...
Добавлено: 07-03-2010 12:42:10
Продолжаем танцы с бубном, ставил sieve
порты dovecot-managesieve и dovecot-sieve после установки добавляем в dovecot.conf
protocols = imap pop3 imaps pop3s managesieve
и в lda
mail_plugins = quota sieve
После перезагрцзки должен прослушиватся порт
mail# sockstat -l|grep 2000
dovecot managesiev 2305 4 tcp4 10.0.0.18:2000 *:*
dovecot managesiev 2304 4 tcp4 10.0.0.18:2000 *:*
dovecot managesiev 2303 4 tcp4 10.0.0.18:2000 *:*
root dovecot 2300 10 tcp4 10.0.0.18:2000 *:*
и в почтовой директори появится sieve файлы
mail# pwd
/mail/virtual/domain.lt/pupkin.v
mail# ls -la
total 54
drwx------ 9 virtual mail 512 Mar 7 12:24 .
drwx------ 3 virtual mail 512 Mar 6 19:59 ..
drwx------ 5 virtual mail 512 Mar 6 20:37 .INBOX.Drafts
drwx------ 5 virtual mail 512 Mar 6 20:40 .INBOX.Sent
drwx------ 5 virtual mail 512 Mar 6 21:03 .INBOX.Trash
lrwx------ 1 virtual mail 50 Mar 6 21:11 .dovecot.sieve -> /mail/virtual/domain.lt/pupkin.v/sieve/phpscript.sieve
-rw------- 1 virtual mail 273 Mar 7 12:24 .dovecot.svbin
drwx------ 2 virtual mail 512 Mar 6 21:03 cur
-rw------- 1 virtual mail 233 Mar 7 12:20 dovecot-uidlist
-rw------- 1 virtual mail 8 Mar 6 20:37 dovecot-uidvalidity
-rw------- 1 virtual mail 0 Mar 6 19:59 dovecot-uidvalidity.4b92b439
-rw------- 1 virtual mail 20480 Mar 7 12:20 dovecot.index.cache
-rw------- 1 virtual mail 5848 Mar 7 12:20 dovecot.index.log
-rw------- 1 virtual mail 170 Mar 7 12:20 maildirsize
drwx------ 2 virtual mail 512 Mar 7 12:20 new
drwx------ 3 virtual mail 512 Mar 6 21:11 sieve
-rw------- 1 virtual mail 36 Mar 6 20:36 subscriptions
drwx------ 2 virtual mail 512 Mar 7 12:20 tmp
Для администрирования фильтров пользователем я использую
Avelsieve or Sieve Mail Filters Plugin for Squirrelmail is a Squirrelmail plugin for creating Sieve scripts on a Sieve-compliant mail server.
Добавлено: 07-03-2010 12:45:21
Вычитал что надо поменять немного в master.cf команду, а именно добавить -a ${recipient}
dovecot unix - n n - - pipe
flags=DRhu user=virtual:mail argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${recipient} -a ${recipient}