 |
от Иво Гелов(26-01-2008)
рейтинг (38)
[ добре ]
[ зле ]
Вариант за отпечатване
Dovecot е мъничък и сравнително лесен за конфигуриране POP3
и IMAP сървър, вероятно мнозина от вас го използват и са
доволни от него. Колегите постепенно се отказват от POP3
клиентите си (обиквено Outlook Express или Mozilla
ThunderBird)
и използват WEB-интерфейса SquirrelMail като IMAP клиент.
Възникна нуждата от прилагане на правила към писмата -
например
писмата от различни клиенти да отиват в разлини подпапки на
INBOX. SquirrelMail има плъгини за такива правила,
главно
като мярка срещу SPAM. Тяхното използване обаче води до
забавяне, поради няколко причини:
1. Тези филтри се изпълняват от страна на IMAP клиента (в
случая SquirrelMail) в момента, когато потребителя реши
да
разгледа INBOX. Ако в него има голям брой писма - може да
се получи timeout
2. Тъй като SquirrelMail е написан на PHP, скоростта на
работа на филтрите е по-ниска, отколкото компилирана
програма
3. Филтрите не могат да реагират на писмата в реално време
- те се изпълняват при логване на потребителя в
SquirrelMail,
а не в момента на пристигане на писмата
Това би могло да се реши от LDA (Local Delivery Agent) -
програмата, която се извиква от пощенския сървър (в случая
това е
Postfix). Например maildrop, или procmail. При мен ролята
на LDA се изпълнява от самия Postfix, и тъй като нямам опит
нито
с maildrop, нито с procmail, пък и ми се сториха малко
сложнички и неудобни (говоря за мен самия) - реших да се
опитам да
настроя Dovecot като LDA, и да използвам един от неговите
плъгини като ManageSieve сървър. Това е сървър, който приема
Sieve скриптове по TCP/IP и ги изпълнява при нужда. Повече
информация може да намерите тук (http://sieve.info/overview)
MANAGESIEVE е стандартен протокол (както SMTP, FTP и т.н.)
Sieve скриптовете са обикновено текстови файлове с лесни
команди, предоставят малко повече от минимална
функционалност, но не предоставят "опасни"
команди, които биха могли да
повредят системата (например Buffer-Overflow) от
неподготвени или злонамерени потребители. ManageSieve
сървърите обикновено
компилират тези текстови файлове в собствен формат, за да
се изпълняват по-бързо. Ето един пример за Sieve скрипт:
require
["fileinto","envelope","comparator-i;ascii-numeric","regex"];
if
address :is "From"
"some_address@my_domain.com"
{
fileinto "Junk";
}
Сигурно вече сте се досетили, че този филтър премества
писмата от "some_address@my_domain.com" в папка
Junk :-)
Сега да пристъпим към инсталирането и конфигурирането.
Трябва да направим 2 неща:
I. Да добавим ManageSieve сървър
II. Да добавим плъгин за връзка с този сървър
III. Да конфигурираме Dovecot като LDA и да укажем, че
трябва да използва този плъгин
И вече по-подробно.
I.1. Сваляме пач за съответната версия на Dovecot (аз
използвам 1.0.10) от тук (http://sinas.rename-it.nl/~sirius/)
I.2. Записваме diff файла в същата папка, в която се намира
configure скрипта на Dovecot
Например, аз държа в "/usr/local/sources"
разархивираните изходни кодове на всички програми, които съм
инсталирал.
Съответно Dovecot се намира в
"/usr/local/sources/dovecot-1.0.10", и в тази
папка записвам файла
dovecot-1.0.10-MANAGESIEVE-v9.1.diff.gz (независимо от
разширението, това е обикновен текстов файл)
I.3. Осъществяваме пача по обичайния начин
patch -p1 <
./dovecot-1.0.10-MANAGESIEVE-v9.1.diff.gz
I.4. Преди да пристъпим към ./configure, make и make
install - трябва да обновим automake/autoconf
конфигурацията,
за да се добавят файловете за ManageSieve в процеса на
компилацията. Това става с поредицата команди
aclocal
autoreconf -i
automake
При мен обаче изгърмя с разни съобщения за липсващи M4
макроси. Ще ви спестя обясненията и ще пристъпя направо
към решението. При вас може да е по-различно (аз съм с
Fedora 4), при мен беше достатъчно да се снабдя с
файловете
iconv.m4 и aclocal.m4, да добавя текста на aclocal.m4 в
началото на iconv.m4 и да запиша iconv.m4 в папка
"/usr/share/aclocal" Файлът iconv.m4 го взех от
Midnight Commander - от папка m4, а пък aclocal.m4 успях да
открия
на този адрес (http://dev.splitbrain.org/download/darc...)
След това горните 3 команди се изпълниха без нито една
грешка.
I.5. Продължаваме по обичайния начин
./configure
make
sudo make install
II.1. Сваляме Sieve plugin от сайта на Dovecot (http://www.dovecot.org/download.html)
за съответната версия (в моя
случай това е версия 1.0.2)
II.2. Разархивираме съдържанието на архива в папка на
същото ниво, на което е папката с изходния код на
Dovecot.
В моя случай това е
"/usr/local/sources/dovecot-sieve-1.0.2"
II.3. Намирайки се в папката на плъгина, изпълняваме
командите
./configure --with-dovecot=../dovecot-1.0.10
make
sudo make install
По този начин освен плъгина (cmusieve) инсталираме sievec и
sieved - съответно компилатор и декомпилатор за Sieve
скриптове.
III.1. Указваме на Dovecot да използва cmusieve плъгина - в
/etc/dovecot.conf записваме следното
protocol lda {
# Address to use when sending rejection mails.
postmaster_address = postmaster@domain.com
mail_plugins = cmusieve
mail_plugin_dir =
/usr/local/dovecot/lib/dovecot/lda
# UNIX socket path to master authentication server
to find users.
auth_socket_path = /var/run/dovecot/auth-master
# remember to give proper permissions for these
files as well
log_path = /var/log/dovecot-deliver.log
info_log_path = /var/log/dovecot-deliver.log
# If there is no user-specific Sieve-script, global
Sieve script is
# executed if set. (v1.0.1 and older used
"global_script_path")
#sieve_global_path =
}
Тук също така съм указал, че Deliver (който всъщност
изпълнява ролята на LDA) трябва да използва собствен
лог-файл,
вместо основния лог-файл на Dovecot. Имайте впредвид, че
Deliver ще се изпълнява като непривилегирован потребител
(извикван от Postfix) и затова е добре предварително да
създадете лог-файловете с touch и да им прикачите
правилни
потребител и група. Освен това с командата
"auth_socket_path" указвам UNIX сокет, който да се
използва
от LDA за получаване на mail-папката на съответния
потребител, където трябва да се записват получените
писма.
Да не забравяме - трябва да пуснем и ManageSieve сървъра.
Това става чрез добавяне на параметър
"managesieve" в списъка с
протоколи:
protocols = imap pop3 managesieve
III.2. Указваме на ManageSieve сървъра къде да съхранява
Sieve скриптовете
protocol managesieve {
listen = localhost:2000
# Specifies the location of the symlink pointing to
the active script in
# the sieve storage directory. This must match the
SIEVE setting used by
# deliver (refer to http://wiki.dovecot.org/LDA/Sieve#locat...
for more
# info). Variable substitution with % is
recognized.
#sieve = ~/.dovecot.sieve
sieve = /var/mail/sieve/%d/%n/dovecot.sieve
# This specifies the path to the directory where the
uploaded scripts must
# be stored. In terms of '%' variable substitution
it is identical to
# dovecot's mail_location setting used by the mail
protocol daemons.
sieve_storage = /var/mail/sieve/%d/%n
}
Папка "/var/mail/sieve/" трябва да бъде създадена
от името на потребителя и групата, с които ще работи LDA
(deliver).
Това е необходимо, тъй като Dovecot работи като
ROOT-потребител и може да записва в тази папка без проблем -
обаче Deliver
се извиква от Postfix като непривилегирован потребител, и
трябва да може да записва файлове и да създава подпапки.
Файлове се създават при компилацията на Sieve скриптове, а
папки се създават динамично (ако дотогава не са
съществували)
за домейна и потребителското име от емайл адреса. При мен
цялата "/var/mail" е прикачена към mail:mail.
По-надолу ще
опиша как точно се настройва Postfix, за да използва
Dovecot като LDA, а също и за SASL оторизация при изпращане
на писма.
III.3. Указваме на cmusieve и на LDA къде да търсят Sieve
скриптовете. Ако искаме глобален скрипт, който да се
изпълнява
когато даден потребител няма собствен Sieve скрипт, тогава
по-горе задаваме пътя до файла с този скрипт в
"sieve_global_path".
За личните скриптове на потребителите имаме 2 варианта - да
укажем общ щаблон в /etc/dovecot.conf, или в противен
случай
ще се търси файл .dovecot.sieve в mail-папката на всеки
потребител. Аз използвам шаблон:
plugin {
sieve = /var/mail/sieve/%d/%n/dovecot.sieve
}
Забележете, че този файл трябва да е същия, който указахме
по-горе за ManageSieve сървъра - иначе просто нищо няма да
стане.
%d означава да се вземе всичко след '@' от емайл адреса, а
пък %n - всичко преди '@'.
III.4. Настройка на Postfix, за да използва Dovecot като
LDA
Във файла "/etc/postfix/main.cf" добавяме
следните редове
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
От файла могат да отпаднат няколко команди, които се
използват от Postfix LDA. С тях се указва идентификатора на
потребителя
и групата, на когото принадлежи папката, където ще се
записват писмата. При мен това е postfix:postdrop
(501:504)
virtual_minimum_uid = 501
virtual_uid_maps = static:501
virtual_gid_maps = static:504
Във файла "/etc/postfix/master.cf" добавяме
следните команди (това са 2 отделни реда, втория започва
поне от 2-ра колона)
dovecot unix - n
n -
- pipe
flags=DRhu user=mail:mail
argv=/usr/local/dovecot/libexec/dovecot/deliver -c
/etc/dovecot.conf -d ${recipient}
В конфигурацията на Dovecot (/etc/dovecot.conf) разрешаваме
достъпа до модула за оторизация от външни програми
(тоест
позволяваме на Deliver да разбира дали съществува такъв
потребител, и коя е неговата папка за получаване на
писма)
auth default {
# Space separated list of wanted authentication
mechanisms:
# plain login digest-md5 cram-md5 ntlm rpa
apop anonymous gssapi
# NOTE: See also disable_plaintext_auth setting.
mechanisms = plain digest-md5
# SQL database
<doc/wiki/AuthDatabase.SQL.txt>
passdb sql {
args = /etc/dovecot-sql.conf
}
# User database specifies where mails are located
and what user/group IDs
# own them. For single-UID configuration use
"static".
# <doc/wiki/UserDatabase.txt>
# UID = mail, GID = mail
userdb static {
args = uid=8 gid=12
home=/var/mail/vhosts/%d/%n allow_all_users=yes
}
user = mail
# It's possible to export the authentication
interface to other programs:
socket listen {
master {
# Master socket provides access to
userdb information. It's typically
# used to give Dovecot's local
delivery agent access to userdb so it
# can find mailbox locations.
path =
/var/run/dovecot/auth-master
mode = 0775
# Default user/group is the one who
started dovecot-auth (root)
user = mail
group = mail
}
}
}
III.5. Настройка на Postfix да използва Dovecot за SASL
оторизация
Това означава, че потребителите, които имат пощенска кутия
на сървъра, могат да изпращат писма през него със своите име
и парола.
Във файла "/etc/postfix/master.cf" добавяме
командите
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
В "smtpd_sasl_path" указваме UNIX-сокет, който
сме указали в подсекция "master" на секция
"socket listen" в раздел "auth
default"
в конфигурационния файл "/etc/dovecot.conf".
Сега остава да кажа няколко думи за AVELSIEVE - това е
плъгин за SquirrelMail, с негова помощ се създават Sieve
скриптове. Можете
да си го изтеглите от сайта на SquirrelMail. Плъгина на
места куца малко със съобщенията за грешки - не са
достатъчно
информативни, и понякога заблуждават. Но ако имате добре
настроен Dovecot - върви като пушка.
<< | >>
|
 |