Пакети за инсталиране:
dovecot-core - защитен пощенски сървър поддържащ mbox, maildir, dbox и mdbox mailboxes dovecot-imapd –Приставка на Dovecot за поддръжка на IMAP протокол dovecot-pop3d –Приставка на Dovecot за поддръжка на POP3 протокол dovecot-mysql –Приставка на Dovecot за поддръжка на MySQL dovecot-lmtpd –Приставка на Dovecot за поддръжка на LMTP протокол (връзка Postfix-Dovecot) dovecot-managesieved –Приставка на Dovecot за поддръжка на Sieve (филтриращи правила които Dovecot автоматично изпълнява)
# apt-get install dovecot-mysql dovecot-pop3d dovecot-imapd dovecot-managesieved dovecot-lmtpd
Самата инсталация протича бързо без въпроси. функцията на Dovecot e: - Получава поща от Postfix и я записва на диск - Изпълнява потребителски правила за филтриране (движи пощи между папките) - Позволява на потребителя след като се удостовери (log in) да си провери пощата използвайки POP3 или IMAP
/etc/dovecot/dovecot.conf /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/15-mailboxes.conf /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/conf.d/20-lmtp.conf
След инсгталацията, се генерираха много конфигурационни скриптове най-вече в директория
# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.original # cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.original # cp /etc/dovecot/conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/auth-sql.conf.ext.original # cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.original # cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.original # cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.original # cp /etc/dovecot/conf.d/15-mailboxes.conf /etc/dovecot/conf.d/15-mailboxes.conf.original # cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.original # cp /etc/dovecot/conf.d/20-lmtp.conf /etc/dovecot/conf.d/20-lmtp.conf.origianal
В предната статия създадохме потребител vmail (UID 5000) , член на групата vmail (GID 5000). Този потребител беше собственик на папката /home/vmail. Същия този потребител се ползва от Dovecot за да записва електронната поща в директория /home/vmail. Може и да се провери за всеки случай за наличието на потребителя
# id vmail uid=5000(vmail) gid=5000(vmail) groups=5000(vmail)
И да започнем с конфигурацията на файловете, един по един
/etc/dovecot/dovecot.conf - описва основните действия на Dovecot.
# vi /etc/dovecot/dovecot.conf !include_try /usr/share/dovecot/protocols.d/*.protocol
Зарежда файлове дефиниращи протоколите
!include conf.d/*.conf
Този ред задължително трябва да съществува. Той зарежда всички конфигурационни файлове от директория /etc/dovecot/conf.d.
!include_try local.conf
Този ред дефинира зареждане на конфигурационни файлове, които сме създали лично (не идват от инсталации).
/etc/dovecot/conf.d/10-auth.conf
# vi /etc/dovecot/conf.d/10-auth.conf ### Търсим реда: auth_mechanisms = plain ### Трябва да изглежда: auth_mechanisms = plain login
Ако потребителите все още ползват Outlook Express под Windows XP или Microsoft Mail на Windows Vista, то тогава механизма на удостоверение трябва да е LOGIN. Така позволявате двата механизма на удостоверение. Принципно LOGIN позволява предаване на паролите на потребителя явно (некриптирано). Това не може да е притеснително защото Dovecot по подразбиране е с disable_plaintext_auth = yes което гарантира, че се приемат само връзки с TLS криптация.
Търсим пасажа:
!include auth-system.conf.ext #!include auth-sql.conf.ext #!include auth-ldap.conf.ext
Трябва да изглежда:
#!include auth-system.conf.ext !include auth-sql.conf.ext #!include auth-ldap.conf.ext
Именно защото ползваме MySQL за удостоверяване.
/etc/dovecot/conf.d/auth-sql.conf.ext. В горния файл който редактирахме, указахме да се използва именно този файл чрез (!include auth-sql.conf.ext)
# vi /etc/dovecot/conf.d/auth-sql.conf.ext ### Търсим секцията userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } ### Трием горното и слагаме това: userdb { driver = static args = uid=vmail gid=vmail home=/home/vmail/%d/%n }
Така на практика твърдо се указва къде да бъде записана пощата. Тука важните моменти са домашната папка , че е в /home/vmail, %d – дефинира домейна a %n – дефинира потребителя от пощенския адрес (user@domain). Променливите на Dovecot могат да се проверят на http://wiki2.dovecot.org/Variables Този файл има още една секция която няма да се редактира
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext }
Тука се казва паролата за удостоверяване да се вземе от SQL, а заявката към SQL-а да се опише във файл /etc/dovecot/dovecot-sql.conf.ext
/etc/dovecot/conf.d/10-mail.conf
# vi /etc/dovecot/conf.d/10-mail.conf mail_location = mbox:~/mail:INBOX=/var/mail/%u ### променяме на: mail_location = maildir:/home/vmail/%d/%n/Maildir
Идеята е пощата примерно за tachko@home.tachko.com да се складира в /home/vmail/home.tachko.com/tachko/Maildir Още нещо. Ако до сега е имало пощенски сървър със същата топология на складиране на писмата и има записана стара поща по папките то може да се редактира следната секция:
namespace inbox { #separator =
Трябва да изглежда:
namespace inbox { separator = .
По подразбиране разделителя е / и примерно директорията е била /home/vmail/tachko.com/tachko/Maildir/INBOX/staff/marketin/simon след като се активира разделителя, директорията ще придобие вида /home/vmail/tachko.com/tachko/Maildir/.INBOX.staff.marketin.simon. В случая няма стара поща затова това остава в оригинален вид.
/etc/dovecot/conf.d/10-master.conf. Този файл се занимава с услуги които позволяват комуникация с други процеси. Примерно активира/деактивира POP3, IMAP. Не трябва да има притеснение за не криптираните TCP портове 110 (POP3) и 143 (IMAP). Те трябва да са достъпни. Ако потребител се върже към тези портове то ще трябва да използва StartTLS команда за да премине в криптиран режим преди да изпрати паролата си. Повечето от настройките в този файл са много старателно обмислени и не е много хубаво да се променят прекомерно. Въпреки това се налага в секцията „service auth“ (услуга за упълномощаване), защото трябва Postfix да позволи на Dovecot да е като услуга за аутотентикаия.
# vi /etc/dovecot/conf.d/10-master.conf ### Търсим пасажа: service auth { ### ……………………………. писано ……………………………. ### # Postfix smtp-auth #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} Трябва да изглежда: service auth { ### ……………………………. писано ……………………………. ### # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { #размаркирва се mode = 0660 #размаркирва се user = postfix group = postfix } #размаркирва се
Странен път. /var/spool/postfix/private/auth произлиза от това, че Postfix стартира в chroot обкръжение в /var/spool/postfix, и не може да достъпи нищо извън тази директория. Така се позволява комуникация на Pоstfix с Dovecot използвайки сокет файл. Има доста странни наименования (сокет файл) и ако всичко се обяснява няма да стигне времето за описване. В общи линии Postfix така използва механизма на аутотентикация от Dovecot. /etc/dovecot/conf.d/10-ssl.conf. Важно условие, трябва да има генерирани сертификатите (по време на инсталацията) или ръчно да сме генерирали.
# vi /etc/dovecot/conf.d/10-ssl.conf ### Търсим реда: ssl = no ### Трябва да изглежда: ssl = yes
Вместо yes можеше да се ползва required, но Dovecot забранява изпращането на пароли в текстов вид върху не криптирани връзки.
### Търсим още: #ssl_cert = </etc/dovecot/dovecot.pem #ssl_key = </etc/dovecot/private/dovecot.pem ### Трябва да изглежда: ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key
Внимание!!! Пътя до името на сертификата и ключа трябва да са еднакви с описаното в /etc/postfix/main.cf /etc/dovecot/conf.d/15-mailboxes.conf
# vi /etc/dovecot/conf.d/15-mailboxes.conf
# NOTE: Assumes "namespace inbox" has been defined in 10-mail.conf.
namespace inbox {
# These mailboxes are widely used and could perhaps be created automatically:
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Trash {
special_use = \Trash
}
# For \Sent mailboxes there are two widely used names. We'll mark both of
# them as \Sent. User typically deletes one of them if duplicates are created.
mailbox Sent {
special_use = \Sent
}
mailbox "Sent Messages" {
pecial_use = \Sent
}
# If you have a virtual "All messages" mailbox:
#mailbox virtual/All {
# special_use = \All
# comment = All my messages
#}
# If you have a virtual "Flagged" mailbox:
#mailbox virtual/Flagged {
# special_use = \Flagged
# comment = All my flagged messages
#}
}
### Там където се дефинира секцията „namespace inbox“ някъде вътре преди да се затвори секцията се поставя указания текст.
# NOTE: Assumes "namespace inbox" has been defined in 10-mail.conf.
namespace inbox {
# These mailboxes are widely used and could perhaps be created automatically:
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Trash {
special_use = \Trash
}
# For \Sent mailboxes there are two widely used names. We'll mark both of
# them as \Sent. User typically deletes one of them if duplicates are created.
mailbox Sent {
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
# If you have a virtual "All messages" mailbox:
#mailbox virtual/All {
# special_use = \All
# comment = All my messages
#}
# If you have a virtual "Flagged" mailbox:
#mailbox virtual/Flagged {
# special_use = \Flagged
# comment = All my flagged messages
#}
mailbox INBOX.Junk {
auto = subscribe
special_use = \Junk
}
mailbox INBOX.Trash {
auto = subscribe
special_use = \Trash
}
}
Това гарантира, че Junk (спам) и Trash (кошче) се намират в рамките на папка InBox (входящата поща) когато се използва протокола IMAP
/etc/dovecot/dovecot-sql.conf.ext. Този файл е дефиниран от /etc/dovecot/conf.d/auth-sql.conf.ext В него се описва начина на достъп на Dovecot до MySQL, и къде се намира информацията за потребители/акаунти. Целия файл на практика е само от коментари, затова най отгоре се добавя следното:
# vi /etc/dovecot/dovecot-sql.conf.ext driver = mysql connect = host=127.0.0.1 dbname=pfdb user=pfuser password=pfpass default_pass_scheme = SHA256-CRYPT password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
driver – вида на базата данни
connect – къде се намира базата данни и как да се свърже с нея
default_pass_scheme – форма в която се съхраняват паролите. В случая SHA256 hashes
password_query – изявление на SQL, че се връщат на потребителя (=пощенския адрес) и паролата (SHA256 hash) от базата данни където %u е логин името.
И накрая в завършек трябва да сме сигурни, че само root има права върху SQL конфигурационния файл.
# chown root:root /etc/dovecot/dovecot-sql.conf.ext # chmod go= /etc/dovecot/dovecot-sql.conf.ext # ls -l /etc/dovecot/dovecot-sql.conf.ext -rw------- 1 root root 5813 Apr 14 20:05 /etc/dovecot/dovecot-sql.conf.ext
Следва рестарт на Dovecot, но преди това изчистваме логовете. Може и без да се чистят но стават дълги и мъчно се проследяват.
# > /var/log/mail.log # > /var/log/mail.err
Рестарт на Dovecot
# /etc/init.d/dovecot restart # /etc/init.d/dovecot status
Без видими забележки. За всеки случай проверка на лога
# vi /var/log/mail.log --- Много информация докато достигнем до най-долния ред: --- Apr 14 20:11:30 home dovecot: master: Dovecot v2.2.27 starting up for imap, lmtp, sieve, pop3 (core dumps disabled)
Стартирали са imap, lmtp, sieve, pop3 и то без забележки. Супер до тука всичко работи като хората.
Преди се уверихме , че Postfix знае кое писмо може да се получи. Сега обаче излиза въпроса какво да го прави. На практика и Postfix може да съхрани това писмо използвайки вградения си (MDA) агент наречен „виртуален“. Въпреки това в сравнение с възможностите които разполага Dovecot като квоти, филтрации и т.н. , Postfix изглежда посредствен. И без това се ползва Dovecot за услугите IMAP, POP3, (също проверява имена и пароли) така че защо да не се ползва и за тази цел. Връзката между Postfix и Dovecot се осъществява по два начина 1. Dovecot-lda (local delivery agent) процес. Може да се обработва едно писмо в даден момент. И започва нов процес за ново писмо. Това е дългия път по подразбиране. 2. Втория начин е използването на LMTP протокол. Може да се обработва множество получатели в едно и също време. Има по добра производителност от LDA.. Именно този метод ще се ползва.
/etc/dovecot/conf.d/10-master.conf. По горе дефинирахме Postfix да позволи на Dovecot да е като услуга за удостоверяване.
# vi /etc/dovecot/conf.d/10-master.conf ### Търсим пасажа: service auth { ### ……………………………. писано ……………………………. ### # Postfix smtp-auth #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} Трябва да изглежда: service auth { ### ……………………………. писано ……………………………. ### # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { #размаркирва се mode = 0660 #размаркирва се user = postfix group = postfix } #размаркирва се
За да се случи горното решение, а и за други цели трябва да се укаже как да се изгради връзката Postfix-Dovecot. Сега ще укажем къде Dovecot да слуша за LMTP връзка с Postfix
# vi /etc/dovecot/conf.d/10-master.conf service lmtp { unix_listener lmtp { # lmtp трябва да се премахне #mode = 0666 } # Create inet listener only if you can't use the above UNIX socket #inet_listener lmtp { # Avoid making LMTP visible for the entire internet #address = #port = #} } ### Трябва да изглежда така service lmtp { #unix_listener lmtp { #mode = 0666 #} unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } # Create inet listener only if you can't use the above UNIX socket #inet_listener lmtp { # Avoid making LMTP visible for the entire internet #address = #port = #} }
Това прави Dovecot на lmtp daemon и създаде unix socket в /var/spool/postfix/private/dovecot-lmtp. По същата идеология както се дефинира Postfix да позволи на Dovecot да е като услуга за оповестяване Рестартираме Dovecot
# /etc/init.d/dovecot restart # /etc/init.d/dovecot status
Отново без забележки.
Сега да укажем на Postfix да изпраща писмата до Dovecot използвайки LMTP протокола
# postconf virtual_transport=lmtp:unix:private/dovecot-lmtp
Така отново се създаде нов ред във файла /etc/postfix/main.cf. С променливата virtual_transport в Postfix се дефинира услуга за предаване на поща в локалната система. Dovecot създаде сокет файл и е готов да слуша за входящи LMTP връзки. По просто казано накарахме Postfix да използва LMTP протокол за връзка с Dovecot. За повече информация http://wiki2.dovecot.org/LDA/Postfix.
Sieve, това е скрипт филтриращ пощата. Филтрацията се изпълнява от LMTP агента в момента на получаване на писмото от Postfix (MTA). Скрипта позволява да се поставя пощата в различни папки ориентирани по съдържание - тема на писмото, получател на писмото, подател и т.н. Може да изтрие писмото, да го препрати в друга папка или да уведоми подателя. Клиентите на практика нищо не правят, те просто се логват и ползват сортирането на пощата. За да се ползва Sieve са нужни и добавките dovecot-siece и dovecot-manageseieved, които инсталирахме по рано. Една от прекрасните функци на Dovecot са правилата на входящата поща, които се обработват на сървъра. Може да се сортират входящите писма в специални папки. Може да се отхвърлят определени податели. Може даже да се настрои автоматично да отговаря. И всичко това без да има пощенски клиент, всичко става автоматично без намесата на клиента. В стандарта на отворения код това се нарича Sieve. По прост начин казано Sieve (сито) е начин на управление на електронната поща от страна на сървъра. За дадени потребители тези правила могат да се дефинират на сървъра и Dovecot ще се грижи те да се изпълнят автоматично. Тъй като се ползва LMTP то трябва да се укажете на услугата lmtp, че иска да ползва Sieve плъгин за Dovecot. Това се постига като се редактира файла /etc/dovecot/conf.d/20-lmtp.conf
/etc/dovecot/conf.d/20-lmtp.conf. За да го има файла /etc/dovecot/conf.d/20-lmtp.conf трябва да е инсталирана и добавката dovecot-lmtpd. Плъгина dovecot-lmtpd активира услугата lmtp
# vi /etc/dovecot/conf.d/20-lmtp.conf ### Търсим секцията protocol lmtp { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins } ### Трябва да изглежда така protocol lmtp { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins mail_plugins = $mail_plugins sieve }
Така дефинирахме услугата LMTP да ползва добавката Sieve (Сито) на Dovecot. Рестарт на Dovecot
# /etc/init.d/dovecot restart # /etc/init.d/dovecot status
Отново без забележки Следва връзка между Postfix и Dovecot за удостоверения