postfix+dovecot+sieve

Fórumok

Sziasztok!

Feltettem a postfix+dovecot+sieve triót. Az imap rész már megy rendesen. Viszont a szűrés nem akar működni. A felhasználó könyvtárában van egy ilyen simlink fájl.
.dovecot.sieve -> Maildir/sieve/roundcube.sieve

Tartalma:
# rule:[Teszt]
if anyof (header :contains "From" "xy@gmail.com")
{
fileinto "teszt";
}

Tud valaki ebben segíteni, hogy mit kell vagy lehet még beállítani? Köszönettel.

Hozzászólások

# Base directory where to store runtime data.
base_dir = /var/run/dovecot/

# Protocols we want to be serving: imap imaps pop3 pop3s managesieve
# If you only want to use dovecot-auth, you can set this to "none".
protocols = imap managesieve

mail_location = maildir:%h/Maildir

protocol managesieve {
# Login executable location.
#login_executable = /usr/libexec/dovecot/managesieve-login
login_executable = /usr/lib/dovecot/managesieve-login

# ManageSieve executable location. See IMAP's mail_executable above for
# examples how this could be changed.
#mail_executable = /usr/libexec/dovecot/managesieve
mail_executable = /usr/lib/dovecot/managesieve

# Maximum ManageSieve command line length in bytes. This setting is
# directly borrowed from IMAP. But, since long command lines are very
# unlikely with ManageSieve, changing this will not be very useful.
#managesieve_max_line_length = 65536

# ManageSieve logout format string:
# %i - total number of bytes read from client
# %o - total number of bytes sent to client
managesieve_logout_format = bytes=%i/%o

# If, for some inobvious reason, the sieve_storage remains unset, the
# ManageSieve daemon uses the specification of the mail_location to find out
# where to store the sieve files (see explaination in README.managesieve).
# The example below, when uncommented, overrides any global mail_location
# specification and stores all the scripts in '~/mail/sieve' if sieve_storage
# is unset. However, you should always use the sieve_storage setting.
# mail_location = mbox:~/mail
mail_location = maildir:%h/Maildir

# To fool ManageSieve clients that are focused on timesieved you can
# specify the IMPLEMENTATION capability that the dovecot reports to clients
# (default: "dovecot").
#managesieve_implementation_string = Cyrus timsieved v2.2.13
}

plugin {
# Sieve plugin (http://wiki.dovecot.org/LDA/Sieve) and ManageSieve service
#
# Location of the active script. When ManageSieve is used this is actually
# a symlink pointing to the active script in the sieve storage directory.
#sieve=~/.dovecot.sieve
sieve=%h/.dovecot.sieve
#
# The path to the directory where the personal Sieve scripts are stored. For
# ManageSieve this is where the uploaded scripts are stored.
#sieve_dir=~/Maildir/sieve
sieve_dir=%h/Maildir/sieve
}

Köszi a segítségedet. Már küzdök vele egy ideje. Fogalmam sincs, hogy mi lehet a gondja. A webmail kliens a roundcube. Ott szépen felveszem a szabályt és nem megy. Pedig arra is figyeltem, hogy olyan mappába próbáltam tenni amiben nincs ékezet. Gondoltam hátha. De nem az volt a gondja.

Az nem jelent semmit. A sieve szerveren keresztül csak lepakolod a .sieve fájlt. Majd két eset lehetséges:

Az MTA-val (jelen esetben postfix) végezteted el a levél lerakását a megfelelő helyre, ez esetbe annak kell a .sieveben lévő dolgokat is végrehajtani

Második és jobb eset: Dovecot-tal rakod le a levelet. Tehát MTA megkapja, virus, spamszur rajta, majd pipeal átadja a dovecot delivernek, ez esetben a dovecot végzi a sieve fájl alapján a szűrést, meg a kvótázást, meg a többi.

szerk.: áá, most látom, hogy ez egy áprilisi post...

Újra megpróbáltam a siev plugint beüzemelni a dovecot alá és a roundcube-al összehozni, de még mindeig nem működik. Szépen megcsinálja a szabályt, de egyszerűen nem végzi el a szabályokat. Hogyan lehet rávenni a dovecot-ot, hogy megcsinálja. Meg lehet nézni azt, hogy egy levél bérkezésekor miket hajt végre a dovecot?

szerk.:

MEGOLDVA! A megoldás az volt, hogy az LDA plugin részben ki volt kommentezve ez a sor.
mail_plugins = cmusieve
Így már működik.

Ez alapján --> http://wiki.dovecot.org/ManageSieve/Configuration

======


### /etc/dovecot/dovecot.conf

protocols = imap imaps pop3 managesieve

protocol managesieve {

  # ezt az 1.0.15-os (debian lenny) dovecot nem tamogatja
  # managesieve_logout_format = bytes ( in=%i : out=%o )

  listen = localhost:2000
  login_executable = /usr/lib/dovecot/managesieve-login
  mail_executable = /usr/lib/dovecot/managesieve
  managesieve_max_line_length = 65536
  sieve = ~/.dovecot.sieve
  sieve_storage = ~/sieve
}

plugin {
  sieve=~/.dovecot.sieve
  sieve_dir=~/sieve
}

======

ls -la /var/mail/mogorva.xxxxxxx/

lrwxrwxrwx [...] .dovecot.sieve -> sieve/roundcube.sieve
drwx--S--- [...] mail
drwx--S--- [...] sieve

======

ls -la /var/mail/mogorva.xxxxxxx/sieve/


-rw------- [...] roundcube.sieve
drwx--S--- [...] tmp

======

cat roundcube.sieve


require ["fileinto"];
# rule:[elso]
if anyof (header :contains "Subject" "[belepes]")
{
        fileinto "mappa1";
        stop;
}

Postfixhoz dovecot delivert használsz? Ha nem akkor annak a config fájlja is kéne.

Jól látom, hogy 1.0.15-es a dovecot?

Ha a protocol managesieve részből kiszeded a sieve és sieve_storage opciót?

Valamint a pluginba ne ~-t használj az elérési útban, hanem teljes elérési utat?
(/var/mail/%n.%d/.sieve ?)

Postfix-hez eddig nem nyúltam, mondván az már tényleg túlzás lenne nyavajás mail filterek miatt.

> Ha a protocol managesieve részből kiszeded a sieve
> és sieve_storage opciót?

Semmi.

> Valamint a pluginba ne ~-t használj az elérési útban, hanem
> teljes elérési utat? (/var/mail/%n.%d/.sieve ?)

Dettó semmi.

A delivery-t a postfix csinálja, beteszi a címzett mailbox-ába az érkező levelet.
Utána gondolnám, hogy majd a dovecot mint imap szerver a sieve rule-ok alapján, amiket az imap kliens futtat majd szétpakolja a cuccot. Ezekszerint ez nem jó feltételezés.

Egyébként próbáltam még tegnap este a mailbox_command -ot a dovecot-os delivery-re állítani, de úgy sem működött.

Igen, rosszul gondolod. A sieves szabályok a levél lerakásakor kerülnek feldolgozásra, az MTA által.

A sieveben épp az a jó, hogy a kliens semmit nem csinál (ott csak létrehozod a szabályokat és betolod a kétezres porton), mint processzálást az végez ami lerakja a leveleket.

Sajnos postfixhoz nem értek, eximmel a levelet a dovecot-delivernek átadva, a fenti configgal jól meg (igaz, nem 1.x-es széria, hanem kettes, mert az egyessel voltak gondok)

Arra jutottam, h azért nem tudtam megcsinálni, mert a maibox_command paraméter csak a mydestination paraméterben megadottakra vonatkozik és virtual userekre egyáltalán nem, továbbá a spamassassin már nem adja vissza postfix-nek a levelet, így esélytelen, h a dovecot még ráfuttassa a saját filtereit:

2010.11.29 13:59:42 postfix/pipe[5410]: C53B74BA7B7: to=, relay=spamassassin, delay=0.92, delays=0.58/0/0/0.34, dsn=2.0.0, status=sent (delivered via spamassassin service)
2010.11.29 13:59:42 postfix/qmgr[4477]: C53B74BA7B7: removed

Megoldotta ezt már vki normálisan, v csak a hegesztés van, hogy írjak saját delivery scriptet és azt tegyem bele a master.cf -be?

Ezzel en is szivtam, aztan kiprobaltam egy "hulyeseget", s azota tokeletesen mukodik.

A kivant cimet rakd csorok koze (hogy a fenebe kell beirni, mert nem megy?!)
Vagyis "csor-nyit"

xy@gmail.com

"csor-zar" (az idezojelek nem kellenek...)

Szerk.: Ugy tunik, hogy eleg regi problemat sikerult megvalaszolni. Raadasul mar meg is oldodot. Bocsanat.

---
Lehet, hogy kívül szőke vagyok, de belül sötét, oké?!

Hello!

Egyetlen egy problémám van a Dovecot + Sieve-el: ha a usernek van sieve állománya, akkor a globális nem hajtódik végre (spamszűrés azon keresztül megy, ezért kellene, hogy attól függetlenül, hogy van vagy nincs user script, fusson le a globális).

Előjött nálatok is?

Ugyanezzel szívok, minden beállításom a leírtak alapján elvileg stimmel.

LDA részben engedve a sieve plugin stb. Nálatok felmerült még valami ami, ami nincs itt leírva és hozzájárult a megoldáshoz?

Postfix-ben megadtam, hogy dovecot deliver-nek adja át - a log-okban látszik is hogy átadja a dovecot LDA-nak, az meg le is teszi a mailt a user INBOX-ába. Csak nem veszi figyelembe a sieve szabályt.

Bekapcsoltam a debug log-okat, és látszik, hogy szépen végre is hajtja a sieve script-et (meg is találja + binárist is csinál belőle + végre is hajtja), de mégis az INBOX-ba kerül a mail.

Lehet hogy a Roundcube nem jó szűrő script-et hozott létre? Ilyennel próbálkozok:


require ["fileinto"];
# rule:[test]
if header :contains "Subject" "test"
{
        fileinto "INBOX.other";
        stop;
}

Köszi!

Szerk.: végre működik, este már úgylátszik befáradtam és disabled-ön hagytam a script bejegyzést. A verbose log miatt így a script-re fókuszáltam és így meg is lett a probléma.

Köszi szépen.

Beteszem ide a saját HowTo-mat SL 6.2-höz (nyilván Centos 6.x-hez is jó), már működő Roundcube + postfix + dovecot szolgáltatásokhoz:


# -------------------------------
# --- roundcube + managesieve ---
# -------------------------------

yum install dovecot-pigeonhole

edit /etc/dovecot/dovecot.conf

	protocols = imap sieve

edit /etc/dovecot/conf.d/15-lda.conf

	protocol lda {
	  # Space separated list of plugins to load (default is global mail_plugins).
	  #mail_plugins = $mail_plugins
	  mail_plugins = sieve
	}

edit /etc/roundcubemail/main.inc.php

	// List of active plugins (in plugins/ directory)
	//$rcmail_config['plugins'] = array();
	$rcmail_config['plugins'] = array('managesieve');

cd /usr/share/roundcubemail/plugins/managesieve

	cp -a config.inc.php.dist config.inc.php

edit config.inc.php

	// managesieve server port
	//$rcmail_config['managesieve_port'] = 2000;
	$rcmail_config['managesieve_port'] = 4190;


service dovecot restart

service httpd restart

feliratkozás
--
"'The time has come,' the Walrus said"

Sziasztok! Ezzel szívok már két napja, és egyszerűen nem látom, hogy mi a baja. monit küldi a root-nak a leveleket, az /etc/aliases-ban beállított módon küldi nekem. De nem alkalmaz rá szabályt pedig a RoundCube létrehozza a fájlt.

Feb 17 18:51:18 domain dovecot: master: Warning: Killed with signal 15 (by pid=13821 uid=0 code=kill)
Feb 17 18:51:18 domain dovecot: imap: Server shutting down. bytes=676/2902
Feb 17 18:51:18 domain dovecot: master: Dovecot v2.0.21 (13b8b90bed3e) starting up (core dumps disabled)
Feb 17 18:51:46 domain postfix/smtpd[11897]: connect from localhost[127.0.0.1]
Feb 17 18:51:46 domain postfix/smtpd[11897]: disconnect from localhost[127.0.0.1]
Feb 17 18:51:46 domain postfix/smtpd[13660]: connect from localhost[127.0.0.1]
Feb 17 18:51:46 domain postfix/smtpd[13660]: D716688140: client=localhost[127.0.0.1]
Feb 17 18:51:46 domain postfix/cleanup[13657]: D716688140: message-id=<1361123506.0@domain>
Feb 17 18:51:46 domain postfix/qmgr[11714]: D716688140: from=, size=729, nrcpt=1 (queue active)
Feb 17 18:51:46 domain postfix/smtpd[13660]: disconnect from localhost[127.0.0.1]
Feb 17 18:51:46 domain postfix/virtual[13658]: D716688140: to=, orig_to=, relay=virtual, delay=0.05, delays=0.04/0/0/0, dsn=2.0.0, status=sent (delivered to maildir)
Feb 17 18:51:46 domain postfix/qmgr[11714]: D716688140: removed
Feb 17 18:51:47 domain dovecot: imap-login: Aborted login (no auth attempts): rip=yyy.yyy.yyy.5, lip=yyy.yyy.yyy.5, TLS
Feb 17 18:51:49 domain dovecot: auth-worker: mysql(localhost): Connected to database postfix
Feb 17 18:51:49 domain dovecot: imap-login: Login: user=, method=PLAIN, rip=xxx.xxx.xxx.90, lip=yyy.yyy.yyy.5, mpid=13850, TLS
Feb 17 18:51:49 domain dovecot: imap: Debug: Loading modules from directory: /usr/lib/dovecot/modules
Feb 17 18:51:49 domain dovecot: imap: Debug: Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so
Feb 17 18:51:49 domain dovecot: imap: Debug: Module loaded: /usr/lib/dovecot/modules/lib11_imap_quota_plugin.so
Feb 17 18:51:49 domain dovecot: imap: Debug: Added userdb setting: mail=maildir:/var/vmail/adam@domain.hu/

dovecot.conf:

auth_mechanisms = plain login

first_valid_uid = 1008
last_valid_uid = 1008

log_timestamp = "%Y-%m-%d %H:%M:%S "

mail_location = maildir:/var/vmail/%d/%n

passdb {
args = /etc/dovecot/mysql.conf
driver = sql
}

plugin {
acl = vfile:/etc/dovecot/acls
quota = maildir:storage=10240:messages=1000
trash = /etc/dovecot/trash.conf
sieve_dir = /var/vmail/%u/sieve/
sieve = /var/vmail/%u/sieve/dovecot.sieve
}

protocols = pop3 imap sieve

service auth-worker {
unix_listener auth-worker {
group = mail
mode = 0666
user = postfix
}
user = $default_internal_user
}

service auth {
unix_listener /var/spool/postfix/private/auth {
group = mail
mode = 0666
user = postfix
}
unix_listener auth-master {
group = mail
mode = 0666
user = vmail
}
user = nobody
}

userdb {
args = /etc/dovecot/mysql.conf
driver = sql
}

userdb {
driver = prefetch
}

protocol imap {
imap_client_workarounds = delay-newmail
mail_plugins = quota imap_quota
}

protocol pop3 {
mail_plugins = quota
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

protocol lda {
info_log_path = /var/log/dovecot-deliver.log
log_path = /var/log/sieve.log
mail_plugins = sieve quota autocreate
postmaster_address = postmaster@domain.com
}

protocol lmtp {
mail_plugins = quota sieve
}

mail_debug = yes

Ami fura nekem, hogy mintha nem töltené be a lib90_sieve_plugin.so-t, plusz a logfájlok sem jönnek létre. Ötlet?

Debian Squeeze a rendszer.

Ezek vannak fent:

dovecot-common 2:2.0.21-0~auto+4
dovecot-core 2:2.0.21-0~auto+4
dovecot-gssapi 2:2.0.21-0~auto+4
dovecot-imapd 2:2.0.21-0~auto+4
dovecot-ldap 2:2.0.21-0~auto+4
dovecot-managesieved 2:2.0.21-0~auto+4
dovecot-mysql 2:2.0.21-0~auto+4
dovecot-pgsql 2:2.0.21-0~auto+4
dovecot-pop3d 2:2.0.21-0~auto+4
dovecot-sieve 2:2.0.21-0~auto+4
dovecot-sqlite 2:2.0.21-0~auto+4

Sieve mappa:

drwx------ 3 vmail vmail 4096 Feb 16 22:52 .
drwx------ 10 vmail vmail 4096 Feb 17 19:17 ..
lrwxrwxrwx 1 vmail vmail 17 Feb 16 22:51 dovecot.sieve -> managesieve.sieve
-rw------- 1 vmail vmail 233 Feb 16 22:53 managesieve.sieve
drwx------ 2 vmail vmail 4096 Feb 16 22:52 tmp

A fájl pedig:

require ["fileinto"];
# rule:[monit]
if header :is "From" "monit@domain.com"
{
fileinto "INBOX.monit";
stop;
}

Való igaz, backport dovecot, de wikiből nem láttam különbséget.
Annyit vettem észre, hogy ezeknél a részeknél lda-nak kéne lennie imap helyett:

Feb 17 18:51:49 domain dovecot: imap: Debug: Loading modules from directory: /usr/lib/dovecot/modules
Feb 17 18:51:49 domain dovecot: imap: Debug: Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so
Feb 17 18:51:49 domain dovecot: imap: Debug: Module loaded: /usr/lib/dovecot/modules/lib11_imap_quota_plugin.so
Feb 17 18:51:49 domain dovecot: imap: Debug: Added userdb setting: mail=maildir:/var/vmail/adam@domain.hu/

Így rájöttem, hogy kimaradt ez a rész a master.cf-ből:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${domain} -m ${extension}

Illetve jogosultság miatt ez is kellett a dovecot.conf-ba:

service auth {
...
unix_listener auth-userdb {
mode = 0600
user = vmail
group = mail
}
...
}

Természetesen a main.cf-be is kell ez, NEM elég a mailbox_command:
virtual_transport = dovecot

Ezt benéztem, de így mostmár tényleg az lda foglalkozik a kézbesítéssel, nem pedig az imap, így megy is a sieve.
Köszönök mindenkinek mindent!

Hi!

SZépen elolvasgattam a fentieket, ötleteket is merítettem, de csak nem akar jól működni. :-(
Eddig LDAP + postfix + dovecot + maildrop volt. Dovecot IMAP és POP3 kiszolgálására, maildrop dobálta le a leveleket. most le kellene váltani a maildrop-ot sieve-re, de az LDAP bekutyul, mert nem egészen értem. :-(
Tehát nem a postfix-nek kellene a levél átvételekor "megmondani", hogy hova kell majd letenni és ezt átadni az LDA-nak?
Ezt látom a logban:
================================
Jun 17 15:28:36 mail postfix/local[23751]: B89ED32154: to=, orig_to=, relay=local, delay=0.2, delays=0.13/0/0/0.07, dsn=4.3.0, status=deferred (temporary failure. Command output: lda: Error: user szistvan: Error reading configuration: Invalid settings: postmaster_address setting not given lda: Fatal: Internal error occurred. Refer to server log for more information. )
==================================

A master.cf-be ezt tettem:
====================
# Dovecot LDA
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
=======================

A main.cf-ben pedig ez van:
==============================
virtual_transport = virtual
# maildrop_destination_recipient_limit = 1
# virtual_transport = dovecot
virtual_mailbox_maps = ldap:accounts
virtual_alias_maps = ldap:aliases,ldap:accounts

mailbox_command = /usr/lib/dovecot/deliver
==================================================

A "virtual_transport = dovecot" azért #-olt, mert próbáltam azzal is, de ugyanaz a hiba (lehet, hogy akkor a dovecot-ot kellene összelőni az LDAP-al?).

Van esetleg valakinek ötlete, hogy mit nézzek meg?

Előre is köszönöm!