• nielsl
  • Registratie: Januari 2006
  • Laatst online: 21-01 15:47
beste allemaal,

ik ben mijn postfix mailserver aan het ombouwen om van lokale users naar virtuele users te gaan die ik uit een ldap vis. Dat gedeelte is me eigenlijk verbazingwekkend goed afgegeven en functioneert.

Hetgeen nog niet functioneert is het volgende, mail die door SA wordt getagged als SPAM werd vroeger door procmail netjes in de spam folder van de betreffende gebruiker gezet. procmail werkt echter alleen bij lokale gebruikers, voor virtuele gebruikers dien je maildrop te gebruiken en dus heb ik de boel als volgt geconfigureerd:

postfix main.cf (relevante deel)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
local_transport = virtual
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = ldap:ldapvirtual
virtual_uid_maps = static:5003
virtual_gid_maps = static:5003
virtual_minimum_uid = 500
virtual_mailbox_limit = 0
virtual_transport = maildrop:
ldapvirtual_server_host = ssr-ldap01.xxx.nl
ldapvirtual_server_port = 389
ldapvirtual_bind = yes
ldapvirtual_bind_dn = cn=admin,dc=xxx,dc=nl
ldapvirtual_bind_pw = ww123
ldapvirtual_search_base = ou=Courier,dc=xx,dc=nl
ldapvirtual_query_filter = mail=%s
ldapvirtual_result_attribute = mailbox


pipe uit de master.cf van postfix
code:
1
2
maildrop  unix  -       n       n       -       -       pipe
      flags=ODRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}


/etc/maildroprc
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Global maildrop filter file

# Uncomment this line to make maildrop default to ~/Maildir for
# delivery- this is where courier-imap (amongst others) will look.
DEFAULT="$HOME/.Maildir"
SHELL="/bin/bash"

if ( /^X-Spam-Status: Yes/ )
{
        exception
        {
                to "$HOME/$DEFAULT/.Spam"
        }
}
else
{
        exception
        {
                to "$HOME/$DEFAULT"
        }
}


Als laatste een stukje mail.log van als er een mailtje wordt verstuurd ontvange

code:
1
2
3
4
5
6
7
Feb 18 01:01:11 ssr-mail01 postfix/qmgr[7068]: 9021D6D00D: from=<iemand@gmail.com>, size=2868, nrcpt=1 (queue active)
Feb 18 01:01:11 ssr-mail01 postfix/smtpd[7149]: disconnect from localhost[127.0.0.1]
Feb 18 01:01:11 ssr-mail01 amavis[6369]: (06369-05) Passed CLEAN, LOCAL [127.0.0.1] [209.85.218.161] <ne.lemmens@gmail.com> -> <niels@localhost>, Message-ID: <760431ab0902171601xbd62392y28905e7c2edcaca2@mail.gmail.com>, mail_id: B2lBizz1PIsO, Hits: -4.129, queued_as: 9021D6D00D, 2586 ms
Feb 18 01:01:11 ssr-mail01 postfix/smtp[7143]: F106B6D00B: to=<niels@localhost>, relay=127.0.0.1[127.0.0.1]:10024, delay=2.7, delays=0.09/0.03/0.01/2.6, dsn=2.6.0, status=sent (250 2.6.0 Ok, id=06369-05, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 9021D6D00D)
Feb 18 01:01:11 ssr-mail01 postfix/qmgr[7068]: F106B6D00B: removed
Feb 18 01:01:11 ssr-mail01 postfix/virtual[7150]: 9021D6D00D: to=<niels@localhost>, relay=virtual, delay=0.09, delays=0.05/0.03/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Feb 18 01:01:11 ssr-mail01 postfix/qmgr[7068]: 9021D6D00D: removed


het afleveren bij localhost gebeurt vanwege het feit dat de email wordt opgehaald door fetchmail en vervolgens wordt doorgegeven aan postfix. Voor mijn gevoel wordt de maildrop functionaliteit helemaal niet aangesproken maar ik kan nergens vinden hoe ik die dan aan de praat moet krijgen. In principe zeg ik tegen postfix in mn main.cf dat hij de email moet droppen dmv de maildrop pipe die ik heb gedefinieerd in mn master.cf.

Ik hoop dat iemand me kan helpen, google is naar mijn mening niet heel erg hulpvaardig maar misschien dat iemand een idee heeft of me een duwtje in de goede richting kan geven omdat volgens mij het doorgeefluik postfix->maildrop niet goed werkt. Als dat functioneert ben ik heel erg geholpen

edit:
bedenk me nu dat ik mijn OS niet heb vermeldt, maar dat is debian etch, verder draai ik op een ML110 waarop esxi draait maar das hier niet zo relevant

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Ik heb zelf "virtual_transport = maildrop" zonder de dubbele punt achteraan. Maakt hier geen verschil.

Verder heb ik als flags alleen "Ru", rest hetzelfde.

Bij jou wordt "postfix/virtual" aangesproken, die hem vervolgens zelf in een maildir aflevert. Bij mij wordt "postfix/pipe" aangesproken, wat overeenkomt met de `maildrop` uit master.cf.

Verder had ik nog in mijn MySQL (maar jij gebruikt dus vast LDAP daarvoor) een tabel met `transport` waar al mijn domeintjes in staan met sommige "maildrop:" en sommige "virtual:" (wel weer met dubbele punt? :P) Maar ik heb geen idee in hoeverre die invloed hebben :+ Zo te zien 0,0 :D Want als ik het aanpas naar virtual: dan doet ie 't alsnog via maildrop.

  • nielsl
  • Registratie: Januari 2006
  • Laatst online: 21-01 15:47
maar dan is het dus een andere setting? iemand anders een suggestie?

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Dit is het enige uit /etc/postfix met 'maildrop' erin bij mij:

main.cf:#mailbox_command = /usr/bin/maildrop
main.cf:virtual_transport = maildrop:
main.cf:maildrop_destination_recipient_limit = 1
master.cf:# maildrop. See the Postfix MAILDROP_README file for details.
master.cf:# Also specify in main.cf: maildrop_destination_recipient_limit=1
master.cf:maildrop  unix  -       n       n       -       -       pipe
master.cf:  flags=Ru user=vmail argv=/usr/bin/maildrop -d ${recipient}
postfix-files:$queue_directory/maildrop:d:$mail_owner:$setgid_group:730:uc
postfix-files:$readme_directory/MAILDROP_README:f:root:-:644
postfix-files:$html_directory/MAILDROP_README.html:f:root:-:644
postfix-script:	find $queue_directory/public $queue_directory/maildrop \
postfix-script:	# WARNING: this should not descend into the maildrop directory.
postfix-script:	# maildrop is the least trusted Postfix directory.
postfix-script:	find $queue_directory/maildrop/. -prune ! -user $mail_owner \
postfix-script:	    -exec $WARN not owned by $mail_owner: $queue_directory/maildrop \;


Heb je wel braaf `postfix reload` gedaan na je aanpassingen?

  • nielsl
  • Registratie: Januari 2006
  • Laatst online: 21-01 15:47
nee, niet postfix reload, postfix restart :P maar mailbox_command heb ik er niet tussen staan, die zal ik er eens tussen gaan zetten maar ik dacht dat dat niet werkte met virtuele users...

  • Speedener
  • Registratie: September 2000
  • Laatst online: 09:03
nielsl schreef op woensdag 18 februari 2009 @ 08:19:
nee, niet postfix reload, postfix restart :P maar mailbox_command heb ik er niet tussen staan, die zal ik er eens tussen gaan zetten maar ik dacht dat dat niet werkte met virtuele users...
Die regel is bij Osiris ook gecomment ( # ).

Wat gebeurt er al je die local_transport regel weghaald? Die heb ik namelijk niet staan in mijn postfix configuraties (hoewel ik dan wel niet LDAP gebruik).

[ Voor 18% gewijzigd door Speedener op 18-02-2009 08:34 ]


  • nielsl
  • Registratie: Januari 2006
  • Laatst online: 21-01 15:47
als ik die optie eruit comment dan zoekt postfix niet meer in de ldap naar mn users maar kijkt ie gewoon of er een /home/$user folder bestaat om daar het mailtje in af te leveren


iemand anders nog een idee?

  • smesjz
  • Registratie: Juli 2002
  • Niet online
Ik zou Amavis gebruiken voor spam filtering, dat gaat een stuk beter dan spamc/spamd aanroep vanuit maildrop.

Stel ook in:
code:
1
local_transport = maildrop


Probleem met jouw setup kan zijn dat je mail stuurt naar gebruikers wiens mailbox nog niet bestaat. Maildrop maakt geen Maildirs aan, tenzij je er wat om heen script.

Ik zelf ben overgestapt naar Dovecot na vele jaren maildrop gebruikt te hebben.

  • nielsl
  • Registratie: Januari 2006
  • Laatst online: 21-01 15:47
wat betreft de non existent users, das geen enkel probleem. Postfix kijkt in de ldap voor emailadressen en vindt hij die daar niet in, dan komt ie bij het catchall adres uit :)

Ook draait amavis al, en dat werkt absoluut mooi :) maargoed, daar gaat het niet om, maar jij zegt dus "Dovecot", ik draai zelf courier waar ik stiekem tevreden over ben. Kun je courier ook de mail laten afleveren in een bepaalde box?

[ Voor 16% gewijzigd door nielsl op 19-02-2009 16:33 ]


  • smesjz
  • Registratie: Juli 2002
  • Niet online
nielsl schreef op donderdag 19 februari 2009 @ 16:26:
wat betreft de non existent users, das geen enkel probleem. Postfix kijkt in de ldap voor emailadressen en vindt hij die daar niet in, dan komt ie bij het catchall adres uit :)
Het helpt als je leest wat ik type :) Als ik jou als gebruiker in LDAP toevoeg, bestaat /var/vmail/$jij nog niet. Dat bedoelde ik. Mail naar niet bestaande accounts hoor je te bouncen, maar een catchall volstaat.
Ik ga er dus ook vanuit dat wanneer Postfix mail gooit naar Amavis het om een e-mail adres gaat waar je uiteindelijk mail voor wil ontvangen.

Anyway, als je Amavis gebruikt moet je wel kijken of ie inderdaad ook X-Spam-Status zet. De regex lijkt me verder goed.
Het gebruik van $HOME/$DEFAULT lijkt me een beetje vreemd gezien: $DEFAULT=$HOME/.Maildir
Maar als het werkt is dat prima. Maildrop maakt dus geen Maildirs aan, daarvoor dien je dus maildirmake te gebruiken.

Jouw setup werkt maar het impliceert wel dat wanneer je een nieuwe gebruiker in je backend toevoegt, je ook meteen de Maildirs moet aanmaken. Inclusef .Spam
Ook draait amavis al, en dat werkt absoluut mooi :) maargoed, daar gaat het niet om, maar jij zegt dus "Dovecot", ik draai zelf courier waar ik stiekem tevreden over ben. Kun je courier ook de mail laten afleveren in een bepaalde box?
Courier's MDA is maildrop en die van Dovecot is deliver. Postfix roept maildrop aan en die applicatie is verantwoordelijk voor het afleveren van mail, Courier-{imap,pop} doet slechts wat de naam al suggereert: imap/pop3 server spelen.

Wat je het beste kan doen is debuggen :)

Als je su't naar user vmail (evt. nog een shell geven) kan je mooi testen met iets als:

maildrop -d jij@test.nl -V 10 < /tmp/mailtje.txt

Mailtje.txt is dan een bestand met volledige headers + bericht informatie. Je ziet dan hoe maildrop z'n werk doet. Maar voordat je dat doet, zorg wel dat je zeker weet dat Amavis de goede headers zet.

Kijk ook eens op: http://workaround.org/articles/ispmail-etch/ . Hier vind je een goede tutorial voor Postfix, Dovecot en andere gadgets zoals SMTP-Auth e.d.

  • nielsl
  • Registratie: Januari 2006
  • Laatst online: 21-01 15:47
top, thanks voor je informatie, ik ga ermee aan de slag en idd, debuggen doeet meestal de truuk, thx voor het duwtje in de richting!

Wat betreft die maildir's, dat klopt, maar dat wordt binnenkort hersteld met een script, als je gegevens toevoegt aan de ldap maakt ie dan ook automatisch een maildir aan enz. Gaat niet om prof. webhosting of iets dergelijks maar een studentenvereniging met max 50 accounts :)

  • nielsl
  • Registratie: Januari 2006
  • Laatst online: 21-01 15:47
even voor de kennisdatabase die t.net heet, het is me gelukt,

De pipe zoals die hierboven was omschreven was prima in orde, in mn main.cf heb ik uiteindelijk de volgende configuratie staan:

main.cf:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
local_transport = maildrop
maildrop_destination_recipient_limit = 1
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = ldap:ldapvirtual
virtual_uid_maps = static:5003
virtual_gid_maps = static:5003
virtual_minimum_uid = 500
virtual_mailbox_limit = 0
virtual_transport = maildrop:
ldapvirtual_server_host = ldap01.xxx.nl
ldapvirtual_server_port = 389
ldapvirtual_bind = yes
ldapvirtual_bind_dn = cn=admin,dc=xxx,dc=nl
ldapvirtual_bind_pw = logica
ldapvirtual_search_base = ou=Courier,dc=xxx,dc=nl
ldapvirtual_query_filter = mail=%s
ldapvirtual_result_attribute = mailbox


dit is uiteindelijk de configuratie van mn maildroprc, die werkt schitterend
code:
1
2
3
4
5
6
7
8
9
10
11
12
SHELL="/bin/bash"
DEFAULT=$HOME

if ( /^X-Spam-Status: Yes/ )
{
        to $DEFAULT/.Spam

}
else
{
        to $DEFAULT
}


probleem zat hem voornamelijk in het feit dat maildrop werd uitgevoerd door de user vmail, deze user moest nog even toegang krijgen tot de authdaemon van courier maar toen dat eenmaal was gebeurd toen functioneerde het perfect.

iedereen bedankt voor alle tips en tuts :)
Pagina: 1