LINUX-BG Адрес : http://www.linux-bg.org |
Dovecot като LDA плюс ManageSieve и SASL |
От: Иво Гелов Публикувана на: 26-01-2008 Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=programs&key=400458676 |
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 - върви като пушка. |
Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук,
но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора,
както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.
All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
|