Dovecot 0.9: sigurni i brzi POP3/IMAP poslužitelj

 Ovaj članak se odnosi na inačicu dovecota 0.9. U novijim inačicama neki parametri se drugačije zovu, ili imaju malo drugačiji kontekst. Molimo provjerite dokumentaciju dovecota!

S vremena na vrijeme moramo se oprostiti od starih stvari i otići dalje. Tako se uskoro opraštamo i od CARNetovog paketa uw-imap-ssl-cn u korist novog, dovecot-cn.

Što je Dovecot? Dovecot je relativno novi (prvi public release je bio 2002. godine) POP3/IMAP poslužitelj, s određenim poboljšanjima u odnosu na druge poslužitelje. Dovecot zadržava kompatibilnost sa starim UW-IMAP-om, ali donosi poboljšanja u vidu sigurnosti, brzine, manjeg zauzimanja memorije i jednostavnosti konfiguriranja. Program podržava i module za proširenje funkcionalnosti, samooptimirajuće indekse te mnoge načine autentikacije uključujući i razne baze podataka.

Prvo je odmah uočljivo: jedan program umjesto dva zasebna, svaki sa svojim konfiguracijskim datotekama. Dovecot sve definira u datoteci /etc/dovecot/dovecot.conf, i gotovo da ne treba dodatnu konfiguraciju, sve radi odmah nakon instalacije.

Potrebno je napomenuti da paket uw-imap-ssl-cn_1.0 izdan 6. lipnja 2007. više ne sadrži UW-IMAP, nego je samo dummy paket napravljen s ciljem da donese dovecot-cn na sustav. Nakon toga paket uw-imap-ssl-cn možete slobodno obrisati sa sustava. Isto napravite i ako uopće ne želite dovecot na svom sustavu, jer tako nećete ni dobiti ovaj dummy paket, ali imajte na umu da podršku za WU imapd i ipopd nećemo još dugo pružati.

Od konfiguracije, skoro da nije ništa potrebno učiniti. Jedino treba provjeriti varijablu default_mail_env, jer možda na vašem sustavu nije postavljena kako treba. Ona je bitna, jer određuje gdje Dovecot traži vašu elektroničku poštu.

Preporučena (default) vrijednost varijable default_mail_env je:

default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u

Ukoliko su Vaši mail folderi direktno u $HOME svakog korisnika i ne želite to mijenjati, promijenite varijablu default_mail_env u

default_mail_env = mbox:~:INBOX=/var/mail/%u

Nakon toga, naravno, treba napraviti

# /etc/init.d/dovecot restart

Pravi, i u konačnici uredniji, način je prebaciti sve mail foldere unutar $HOME/mail (/home/korisnik/mail) direktorija svakog korisnika. Kod ovog načina bi se mogli pojaviti određeni problemi, a pokušat ćemo ih raščlaniti i objasniti.

Kroz godine su se mijenjali IMAP i POP3 poslužitelji, koji su donosili svaki svoje default postavke. Tako u korisnikovom direktoriju može postojati jedan ili dva mail direktorija ($HOME/mail, $HOME/Mail), ili se mboxovi nalaze direktno u $HOME. Treba utvrditi koji su mboxovi aktualni, što možete učiniti preko datuma ili pregledom same datoteke. Da ne bi narušavali privatnost korisnika, možda je najbolje to učiniti preko datuma same datoteke.

Svakako prije daljnjih akcija napravite backup korisničkih podataka kako bi mogli vratiti eventualne greškom obrisane mailove.

Najjednostavniji backup /home direktorija možete napraviti ako napravite:

# tar cf /dev/st0 /home  # backup na traku

ili

# tar czf /negdje/homes.tgz /home # backup u datoteku

1. Rješenje prvog problema, koji se javlja kod jednog dijela korisnika koji su u nekom trenutku rabili neki mail klijent iz shella, pine, elm ili mutt se može provesti bez opasnosti.

Mail shell korisnika je nakon čitanja obično bio premještan u $HOME/mbox, umjesto u direktorij $HOME/mail. Ovaj problem će riješiti donja skripta, i neće prouzrokovati probleme korisnicima koji nemaju tu datoteku:

cd /home
/etc/init.d/postfix stop
for user in *; do
if [ -d $user -a -e $user/mbox ]; then
cat $user/mbox >> /var/mail/$user
mv $user/mbox $user/mbox.backup
fi
done
/etc/init.d/postfix start

Najgore što se može dogoditi kod pokretanja ove skripte je da će pojedini korisnici možda dobiti stare poruke, ali njih mogu lako obrisati.

2. Drugi problem se javlja ukoliko vam se mailbox folderi (datoteke INBOX.Drafts, INBOX.Sent i slično) ne nalaze u $HOME/mail, nego primjerice u $HOME ili $HOME/Mail.

Sljedeća skripta prebacuje sve mailbox datoteke iz $HOME u $HOME/mail, i ujedno čuva sve stare datoteke tog imena u $HOME/mail, ako postoje (uz nastavak .old). Skripta kreira direktorij $HOME/mail ukoliko ga nema, te prepravlja .mailboxlist popis foldera i kopira ga/preimenuje u $HOME/mail/.subscriptions. Nadalje, skripta kreira simbolički link Mail -> mail, kako bi svi budući programi spremali svoje mboxove baš u $HOME/mail. Skripta se može više puta pokretati, jer neće dirati već obrađene direktorije.

#!/bin/sh

/etc/init.d/dovecot stop
cd /home
export SIMPLE_BACKUP_SUFFIX=.old

for user in *
do
if [ -d "$user" -a -e "$user/.mailboxlist" ]; then
if [ -d "$user/Mail" -a -d "$user/mail" ]; then
echo "UPOZORENJE: korisnik $user ima i direktorij Mail i mail!"
echo "Prebacite (ili ostavite) novije mboxove u \$HOME/mail i"
echo "obrisite Mail i napravite 'ln -s mail Mail'"
fi

if [ -d "$user/Mail" -a ! -d "$user/mail" ]; then
echo "Preimenujem direktorij $user/Mail -> $user/mail..."
mv --backup=existing $user/Mail $user/mail
fi

if [ ! -d "$user/Mail" -a -d "$user/mail" ]; then
echo "Kreiram simbolicki link $user/Mail -> $user/mail..."
cd $user
ln -s mail Mail
cd ..
fi

if [ ! -d "$user/mail" -a ! -d "$user/Mail" ]; then
echo "Kreiram direktorij $user/mail..."
mkdir $user/mail
fi

# konvertiramo .mailboxlist
sed 's#[mM]ail/##g' < $user/.mailboxlist \
> $user/mail/.subscriptions.tmp

while read line
do
# izuzeci
if [ "$line" = "MailINBOX.Drafts" ]; then
mv --backup=existing "$user/$line" $user/mail/INBOX.Drafts
continue
fi
if [ "$line" = "MailINBOX.Sent" ]; then
mv --backup=existing "$user/$line" $user/mail/INBOX.Sent
continue
fi
if [ "$line" = "MailINBOX.Trash" ]; then
mv --backup=existing "$user/$line" $user/mail/INBOX.Trash
continue
fi

# premjestamo mboxove...
if [ -e "$user/$line" ]; then
mv --backup=existing "$user/$line" $user/mail
fi

done < $user/mail/.subscriptions.tmp

sed 's#MailINBOX\.#INBOX\.#g' < $user/mail/.subscriptions.tmp \
> $user/mail/.subscriptions
rm -f $user/mail/.subscriptions.tmp
mv --backup=existing $user/.mailboxlist $user/mailboxlist.old

# postavljamo pravo vlasnistvo
uid=`getent passwd $user | awk -F: '{print $3}'`
gid=`getent passwd $user | awk -F: '{print $4}'`
chown -R $uid:$gid $user/mail
fi
done
/etc/init.d/dovecot start

(više o naredbi getent pročitajte u ovom članku)

Kako bi se svi folderi prikazali u mail klijentu, možda će biti potrebno resetiranje popisa IMAP mapa u klijentima. U OE je to Tools -> IMAP folders -> Reset list. Za Squirrelmail, potrebno je definirati sljedeće u /etc/squirrelmail/config.php:

$default_folder_prefix = ''; 

Ovo će omogućiti da Squirrelmail prikaže sve foldere na koje ste pretplaćeni, u protivnom, kreirat će se direktorij $HOME/mail/Mail (s INBOX.* datotekama), a dostupan će biti samo /var/mail/korisnik.

3. Sljedeći do sad detektirani problem je problem koji leži u klijentskoj strani. Outlook Express bi se mogao zbuniti nakon prelaska na novi POP3/IMAP poslužitelj. Ako je broj poruka neodgovarajući, ili se mailbox ne može otvoriti, probajte obrisati te ponovo dodati korisnika u OE. Ako se pronađe bolje rješenje od ovog, bit će objavljeno. Dodatno, ukoliko korisnik rabi "leave messages on server" opciju, morat će ponovo skinuti sve poruke. Razlog tomu je što su i stari qpopper i ipop3d rabili malo drugačiji format POP3 UIDL zastavice, koji dovecot ne prepoznaje. Nakon preuzimanja svih poruka toga problema više neće biti.

Alternativno, u dovecot.conf možete upisati

pop3_uidl_format = %08Xv%08Xu

što će omogućiti Dovecotu da rabi UIDL zastavice u UW-POP3 formatu, pa se ovaj problem neće javiti.

Ukoliko u vašoj mreži ima miješanih starijih i novijih Outlook klijenata, možda bi bilo dobro ubaciti u dovecot.conf i ovaj redak:

client_workarounds = oe6-fetch-no-newmail outlook-idle outlook-pop3-no-nuls 

Za kraj, u dovecot je izuzetno lagano dodati certifikat, dovoljno je imati ove tri postavke:

ssl_disable = no
ssl_cert_file = /etc/ssl/certs/mojserver.pem
ssl_key_file = /etc/ssl/certs/mojserver.key

Ne treba napominjati da je potrebno datoteku s vašim ključem zaštititi od čitanja tako da je čitljiva samo vlasniku (obično root).

Dodatne informacije potražite na adresi http://www.dovecot.org. Na kraju ćemo kao kuriozitet spomenuti da autor Dovecota nudi 1000 EUR bilo kome tko otkrije sigurnosni propust u njegovom programu! Pa, navalite....

 

Kuharice: 
Kategorije: 
Vote: 
0
No votes yet

Komentari

Parametar default_mail_env je u Dovecotu 1.0.x (Etch distribucija) promijenjen u mail_location tako da se lokacija mail direktorija postavlja sa:

mail_location = mbox:~/mail:INBOX=/var/mail/%u

ili

mail_location = mbox:~/:INBOX=/var/mail/%u

u slučaju da se mail direktoriji nalaze u $HOME.

Također, ukoliko su korisnici kreirali neke direktorije unutar mailboxa, oni se neće vidjeti jer uw-imapd za njihov popis koristi datoteku .mailboxlist, a dovecot koristi .subscriptions. Potrebno je kopirati sadržaj .mailboxlist datoteke u .subscriptions datoteku za svakog korisnika:

for hdir in `cat /etc/passwd|cut -d: -f6` ; do
if [ -f "$hdir/.mailboxlist" ]; then
cp -a "$hdir/.mailboxlist" "$hdir/.subscriptions"
fi
done