'virtual users' met LDAP, sendmail en dovecot

Pagina: 1
Acties:

  • begintmeta
  • Registratie: November 2001
  • Niet online

begintmeta

Moderator General Chat
Topicstarter
Ik ben momenteel aan het proberen een mailsysteem (IMAP) op te zetten met virtuele geruikers, dat wil in dit geval zeggen dat de accounts in een LDAP directory te vinden zijn en dat er geen corresponderende systeemusers zijn. Ik wil dit doen in OpenBSD met gebruik van sendmail, dovecot en openldap.

Ik heb openldap draaiend en heb kan met imap inloggen op virtuele en systeemaccounts. Wat nog niet kan is echter het via sendmail ontvangen van mail voor de virtuele gebruikers. sendmail vindt de betreffende gebruikers niet (dit is geen probleem met de systeemaccounts).

Wat ik na het lezen van handleidingen etc denk te begrijpen is dat de MTA (sendmail) op een of andere manier de viruele gebruikers moet kunnen vinden (dat zou dan via LDAP moeten). Ik krijg dit echter niet voor elkaar...

Kan iemand me weer op het goede spoor brengen? (logfiles en configuratiebestanden heb ik voorlopig maar achterwege gelaten)

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

Volgens mij kan sendmail dat niet.

Met een "virtusertable" in sendmail kun je een mapping aanbrengen naar mailbox(xen) op je systeem. Daarna kun je die in in dovecot weer op de juiste plaats laten zetten.

We are pentium of borg. Division is futile. You will be approximated.


  • begintmeta
  • Registratie: November 2001
  • Niet online

begintmeta

Moderator General Chat
Topicstarter
Rainmaker schreef op woensdag 29 oktober 2008 @ 14:40:
Volgens mij kan sendmail dat niet.

Met een "virtusertable" in sendmail kun je een mapping aanbrengen naar mailbox(xen) op je systeem. Daarna kun je die in in dovecot weer op de juiste plaats laten zetten.
Ja dat had ik ook gevonden (je kunt wel ldap support in sendmail compilen) en het volgende is dan ook hetgeen ik in eerste instantie (en eigenlijk nog) zou willen: sendmail als MT(+D?)A voor systeemaccounts en als eerste stap, virtuele gebruikers dan door naar deliver (de MDA van dovecot).

Krijg het echter niet voor elkaar. sendmail de boel door laten sturen naar de vmail-eigenaar lukt wel, maar dovecot weigert de email naar de juiste box te forwarden... Ik blijf het natuurlijk proberen en zal hier ook laten weten als het lukt, maar verder advies van de mensen hier op GoT blijft uitermate welkom.

[ Voor 11% gewijzigd door begintmeta op 30-10-2008 18:11 ]


  • BarthezZ
  • Registratie: Juli 2004
  • Niet online

BarthezZ

anti voetbal en slechte djs!

Mijn mail systeem (zimbra collaboration suite) gebruikt hetzelfde principe maar dan met postfix.
Een aantal dingen uit de configuratie:
quote: grep ldap /opt/zimbra/postfix/conf/*
/opt/zimbra/postfix/conf/main.cf:1:sender_canonical_maps = proxy:ldap:/opt/zimbra/conf/ldap-scm.cf
/opt/zimbra/postfix/conf/main.cf:2:virtual_alias_domains = proxy:ldap:/opt/zimbra/conf/ldap-vad.cf
/opt/zimbra/postfix/conf/main.cf:8:virtual_mailbox_domains = proxy:ldap:/opt/zimbra/conf/ldap-vmd.cf
/opt/zimbra/postfix/conf/main.cf:15:virtual_alias_maps = proxy:ldap:/opt/zimbra/conf/ldap-vam.cf
/opt/zimbra/postfix/conf/main.cf:16:transport_maps = proxy:ldap:/opt/zimbra/conf/ldap-transport.cf
/opt/zimbra/postfix/conf/main.cf:35:virtual_mailbox_maps = proxy:ldap:/opt/zimbra/conf/ldap-vmm.cf
zimbra@email:~/conf$ cat ldap-scm.cf
server_host = ldap://email.maildoos.tld:389
server_port = 389
search_base =
query_filter = (&(|(zimbraMailDeliveryAddress=%s)(zimbraMailAlias=%s)(zimbraMailCatchAllAddress=%s))(zimbraMailStatus=enabled))
result_attribute = zimbraMailCanonicalAddress,zimbraMailCatchAllCanonicalAddress
version = 3
start_tls = yes
tls_ca_cert_dir = /opt/zimbra/conf/ca
bind = yes
bind_dn = uid=zmpostfix,cn=appaccts,cn=zimbra
bind_pw = zmpostfix
timeout = 30
zimbra@email:~/conf$ cat ldap-transport.cf
server_host = ldap://email.maildoos.tld:389
server_port = 389
search_base =
query_filter = (&(|(zimbraMailDeliveryAddress=%s)(zimbraDomainName=%s))(zimbraMailStatus=enabled))
result_attribute = zimbraMailTransport
version = 3
start_tls = yes
tls_ca_cert_dir = /opt/zimbra/conf/ca
bind = yes
bind_dn = uid=zmpostfix,cn=appaccts,cn=zimbra
bind_pw = zmpostfix
timeout = 30
zimbra@email:~/conf$ cat ldap-vad.cf
server_host = ldap://email.maildoos.tld:389
server_port = 389
search_base =
query_filter = (&(zimbraDomainName=%s)(zimbraDomainType=alias)(zimbraMailStatus=enabled))
result_attribute = zimbraDomainName
version = 3
start_tls = yes
tls_ca_cert_dir = /opt/zimbra/conf/ca
bind = yes
bind_dn = uid=zmpostfix,cn=appaccts,cn=zimbra
bind_pw = zmpostfix
timeout = 30
zimbra@email:~/conf$ cat ldap-vam.cf
server_host = ldap://email.maildoos.tld:389
server_port = 389
search_base =
query_filter = (&(|(zimbraMailDeliveryAddress=%s)(zimbraMailAlias=%s)(zimbraMailCatchAllAddress=%s))(zimbraMailStatus=enabled))
result_attribute = zimbraMailDeliveryAddress,zimbraMailForwardingAddress,zimbraPrefMailForwardingAddress,zimbraMailCatchAllForwardingAddress
version = 3
start_tls = yes
tls_ca_cert_dir = /opt/zimbra/conf/ca
bind = yes
bind_dn = uid=zmpostfix,cn=appaccts,cn=zimbra
bind_pw = zmpostfix
timeout = 30
zimbra@email:~/conf$ cat ldap-vmd.cf
server_host = ldap://email.maildoos.tld:389
server_port = 389
search_base =
query_filter = (&(zimbraDomainName=%s)(zimbraDomainType=local)(zimbraMailStatus=enabled))
result_attribute = zimbraDomainName
version = 3
start_tls = yes
tls_ca_cert_dir = /opt/zimbra/conf/ca
bind = yes
bind_dn = uid=zmpostfix,cn=appaccts,cn=zimbra
bind_pw = zmpostfix
timeout = 30
zimbra@email:~/conf$ cat ldap-vmm.cf
server_host = ldap://email.maildoos.tld:389
server_port = 389
search_base =
query_filter = (&(zimbraMailDeliveryAddress=%s)(zimbraMailStatus=enabled))
result_attribute = zimbraMailDeliveryAddress
version = 3
start_tls = yes
tls_ca_cert_dir = /opt/zimbra/conf/ca
bind = yes
bind_dn = uid=zmpostfix,cn=appaccts,cn=zimbra
bind_pw = zmpostfix
timeout = 30
Hopelijk kan je er wat mee. Ik heb zelf geen ervaring met sendmail ed

  • begintmeta
  • Registratie: November 2001
  • Niet online

begintmeta

Moderator General Chat
Topicstarter
Hmm, ik heb met een virtusertable en een mailertable een reroutering naar (dovecots) deliver opgezet. dit is nu in de maillog te vinden als ik mail naar een:

bestaande systeemgebruiker

code:
1
2
3
4
Oct 29 17:27:43 Mailtest-user1Host sendmail[10368]: m9TGRhIw010368: from=test-user1, size=31, class=0, nrcpts=1, msgid=<200810291627.m9TGRhIw010368@MailHost.local.local>, relay=test-user1@localhost
Oct 29 17:27:44 MailHost sm-mta[24089]: m9TGRhfs024089: from=<test-user1@MailHost.local.local>, size=368, class=0, nrcpts=1, msgid=<200810291627.m9TGRhIw010368@MailHost.local.local>, proto=ESMTP, daemon=MTA, relay=localhost.local.local [127.0.0.1]
Oct 29 17:27:44 MailHost sendmail[10368]: m9TGRhIw010368: to=test-user1, ctladdr=test-user1 (1000/1000), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30031, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (m9TGRhfs024089 Message accepted for delivery)
Oct 29 17:27:44 MailHost sm-mta[4350]: m9TGRhfs024089: to=<test-user1@MailHost.local.local>, ctladdr=<test-user1@MailHost.local.local> (1000/1000), delay=00:00:01, xdelay=00:00:00, mailer=local, pri=30627, dsn=2.0.0, stat=Sent


niet-bestaande gebruiker:

code:
1
2
3
4
Oct 29 17:27:01 MailHost sendmail[8957]: m9TGR1om008957: from=test-user1, size=37, class=0, nrcpts=1, msgid=<200810291627.m9TGR1om008957@MailHost.local.local>, relay=test-user1@localhost
Oct 29 17:27:01 MailHost sm-mta[32539]: m9TGR1vT032539: <test-userNOT@MailHost.local.local>... User unknown
Oct 29 17:27:01 MailHost sendmail[8957]: m9TGR1om008957: to=test-userNOT, ctladdr=test-user1 (1000/1000), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30037, relay=[127.0.0.1] [127.0.0.1], dsn=5.1.1, stat=User unknown
Oct 29 17:27:01 MailHost sm-mta[32539]: m9TGR1vT032539: from=<test-user1@MailHost.local.local>, size=37, class=0, nrcpts=0, proto=ESMTP, daemon=MTA, relay=localhost.local.local [127.0.0.1]


bestaande ldap-gebruiker:

code:
1
2
3
4
5
6
7
Oct 29 17:24:29 MailHost sendmail[3052]: m9TGOTTA003052: from=test-user1, size=32, class=0, nrcpts=1, msgid=<200810291624.m9TGOTTA003052@MailHost.local.local>, relay=test-user1@localhost
Oct 29 17:24:29 MailHost sm-mta[26869]: m9TGOTu8026869: from=<test-user1@MailHost.local.local>, size=370, class=0, nrcpts=1, msgid=<200810291624.m9TGOTTA003052@MailHost.local.local>, proto=ESMTP, daemon=MTA, relay=localhost.local.local [127.0.0.1]
Oct 29 17:24:29 MailHost sendmail[3052]: m9TGOTTA003052: to=test-userLDAP, ctladdr=test-user1 (1000/1000), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30032, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (m9TGOTu8026869 Message accepted for delivery)
Oct 29 17:24:29 MailHost dovecot: auth(default): passwd(test-userLDAP@dovecot-vmail.local): unknown user
Oct 29 17:24:29 MailHost dovecot: auth(default): static(test-userLDAP@dovecot-vmail.local): passdb doesn't support lookups, can't verify user's existence
Oct 29 17:24:29 MailHost dovecot: auth(default): ldap(test-userLDAP@dovecot-vmail.local): Authenticated user not found
Oct 29 17:24:29 MailHost sm-mta[15304]: m9TGOTu8026869: to=<test-userLDAP@MailHost.local.local>, ctladdr=<test-user1@MailHost.local.local> (1000/1000), delay=00:00:00, xdelay=00:00:00, mailer=dovecot, pri=30370, relay=localhost, dsn=4.0.0, stat=Deferred: dovecot mailer (/usr/local/libexec/dovecot/deliver) exited with EX_TEMPFAIL


en het resultaat in maillog na met diezelfde ldap-user ingelogd te hebben op dovecot-IMAP:

code:
1
2
3
4
Oct 29 17:48:19 MailHost dovecot: auth(default): bsdauth(test-userLDAP,127.0.0.1): unknown user
Oct 29 17:48:19 MailHost dovecot: auth(default): passwd(test-userLDAP,127.0.0.1): unknown user
Oct 29 17:48:19 MailHost dovecot: imap-login: Login: user=<test-userLDAP>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, secured
Oct 29 17:48:24 MailHost dovecot: IMAP(test-userLDAP): Disconnected: Logged out


het lijkt er dan volgens mij op dat dovecot-auth om de een of andere reden de user niet kan vinden. Ik zal dovecot.conf en dovecot-ldap.conf eens doorspitten...

BarthezZ, hartelijk dank, ik zal je post het zometeen eens goed bekijken. Overstappen op postfix overweeg ik ook, is wat overzichtelijker... Maar ik heb nu allerei andere dingen tussendoor te doen (de meeste van groter belang...)

  • begintmeta
  • Registratie: November 2001
  • Niet online

begintmeta

Moderator General Chat
Topicstarter
code:
1
Oct 29 21:10:17 MailHost dovecot: auth(default): ldap(test-userLDAP@dovecot-vmail.local): Authenticated user not found

Blijkbaar gaat dovecot auth op zoek naar een user+domein in LDAP, maar dat is daar niet te vinden... eens kijken hoe ik de boel eraf kan strippen... (en anders proberen een veld+domein toe te voegen)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
echo '3,0 test-userLDAP@MailHost' | sendmail -bt -d21.4         
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> canonify           input: test-userLDAP @ MailHost
rewritten as: test-userLDAP @ MailHost < @ >
rewritten as: test-userLDAP @ MailHost
rewritten as: < test-userLDAP @ MailHost >
rewritten as: test-userLDAP @ MailHost
rewritten as: test-userLDAP < @ MailHost >
Canonify2          input: test-userLDAP < @ MailHost >
rewrite: RHS $&{daemon_flags} => "(NULL)"
rewritten as: $| test-userLDAP < @ MailHost >
rewritten as: test-userLDAP < @ MailHost . local . local . >
Canonify2        returns: test-userLDAP < @ MailHost . local . local . >
rewritten as: test-userLDAP < @ MailHost . local . local . >
canonify         returns: test-userLDAP < @ MailHost . local . local . >
parse              input: test-userLDAP < @ MailHost . local . local . >
Parse0             input: test-userLDAP < @ MailHost . local . local . >
rewritten as: < > test-userLDAP < @ MailHost . local . local . >
rewritten as: test-userLDAP < @ MailHost . local . local . >
rewritten as: test-userLDAP < @ MailHost . local . local . >
Parse0           returns: test-userLDAP < @ MailHost . local . local . >
rewritten as: test-userLDAP < @ MailHost . local . local . >
ParseLocal         input: test-userLDAP < @ MailHost . local . local . >
ParseLocal       returns: test-userLDAP < @ MailHost . local . local . >
rewritten as: test-userLDAP < @ MailHost . local . local . >
Parse1             input: test-userLDAP < @ MailHost . local . local . >
rewritten as: < ! > test-userLDAP < @ MailHost . local . local . >
rewritten as: < test-userLDAP @ dovecot-vmail . local > test-userLDAP < @ MailHost . local . local . >
Recurse            input: test-userLDAP @ dovecot-vmail . local
canonify           input: test-userLDAP @ dovecot-vmail . local
rewritten as: test-userLDAP @ dovecot-vmail . local < @ >
rewritten as: test-userLDAP @ dovecot-vmail . local
rewritten as: < test-userLDAP @ dovecot-vmail . local >
rewritten as: test-userLDAP @ dovecot-vmail . local
rewritten as: test-userLDAP < @ dovecot-vmail . local >
Canonify2          input: test-userLDAP < @ dovecot-vmail . local >
rewrite: RHS $&{daemon_flags} => "(NULL)"
rewritten as: $| test-userLDAP < @ dovecot-vmail . local >
rewritten as: test-userLDAP < @ dovecot-vmail . local >
Canonify2        returns: test-userLDAP < @ dovecot-vmail . local >
rewritten as: test-userLDAP < @ dovecot-vmail . local >
canonify         returns: test-userLDAP < @ dovecot-vmail . local >
rewritten as: test-userLDAP < @ dovecot-vmail . local >
parse              input: test-userLDAP < @ dovecot-vmail . local >
Parse0             input: test-userLDAP < @ dovecot-vmail . local >
rewritten as: < > test-userLDAP < @ dovecot-vmail . local >
rewritten as: test-userLDAP < @ dovecot-vmail . local >
Parse0           returns: test-userLDAP < @ dovecot-vmail . local >
rewritten as: test-userLDAP < @ dovecot-vmail . local >
ParseLocal         input: test-userLDAP < @ dovecot-vmail . local >
ParseLocal       returns: test-userLDAP < @ dovecot-vmail . local >
rewritten as: test-userLDAP < @ dovecot-vmail . local >
Parse1             input: test-userLDAP < @ dovecot-vmail . local >
rewritten as: < ! > test-userLDAP < @ dovecot-vmail . local >
rewritten as: test-userLDAP < @ dovecot-vmail . local >
rewritten as: < dovecot-vmail . local > test-userLDAP < @ dovecot-vmail . local >
rewritten as: < dovecot : localhost > test-userLDAP < @ dovecot-vmail . local >
MailerToTriple     input: < dovecot : localhost > test-userLDAP < @ dovecot-vmail . local >
rewritten as: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
MailerToTriple   returns: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
rewritten as: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
Parse1           returns: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
rewritten as: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
parse            returns: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
rewritten as: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
Recurse          returns: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
rewritten as: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
Parse1           returns: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
rewritten as: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >
parse            returns: $# dovecot $@ localhost $: test-userLDAP < @ dovecot-vmail . local >

Dit is wat sendmail doet met een gebruikersnaam die in de virtusertable staat. dat moet anders... deliver moet een simpele gebruikersnaam krijgen...

[ Voor 97% gewijzigd door begintmeta op 29-10-2008 23:41 ]


  • begintmeta
  • Registratie: November 2001
  • Niet online

begintmeta

Moderator General Chat
Topicstarter
Goed, het is gelukt.

Het volgende heb ik gedaan:

dovecot en openldap geïnstalleerd op OpenBSD.

Een nieuwe sendmail.cf gemaakt op basis van openbsd-local.mc. De modificatie was het toeoegen van een smarthost en het toevoegen van een dovecot-mailer en het definieren van een mailertable en een virtusertable. (relevante veranderingen vet)
divert(-1)
#  Sendmail configuration for mailhost as smarthost additional mailer dovecot-deliver
#  virtusertable and mailertable
#

divert(0)dnl
VERSIONID(`@(#)mailhost-dovecot.mc $Revision: 0.1 $')
OSTYPE(openbsd)dnl
[b]define(`SMART_HOST', `smtp.domaint.name')dnl [/b]
FEATURE(nouucp, `reject')dnl
FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`no_default_msa')dnl
[b]FEATURE(`mailertable', `hash -o /etc/mail/mailertable')dnl
FEATURE(`virtusertable', `hash /etc/mail/virtusertable')dnl[/b]
MAILER(local)dnl
MAILER(smtp)dnl
[b]MAILER(dovecot)dnl[/b]
DAEMON_OPTIONS(`Family=inet, address=127.0.0.1, Name=MTA')dnl
DAEMON_OPTIONS(`Family=inet6, address=::1, Name=MTA6, M=O')dnl
DAEMON_OPTIONS(`Family=inet, address=127.0.0.1, Port=587, Name=MSA, M=E')dnl
DAEMON_OPTIONS(`Family=inet6, address=::1, Port=587, Name=MSA6, M=O, M=E')dnl
CLIENT_OPTIONS(`Family=inet6, Address=::')dnl
CLIENT_OPTIONS(`Family=inet, Address=0.0.0.0')dnl
dnl
dnl Some broken nameservers will return SERVFAIL (a temporary failure) 
dnl on T_AAAA (IPv6) lookups.
define(`confBIND_OPTS', `WorkAroundBrokenAAAA')dnl

dovecot.m4 had ik ook een beetje aangepast, om door sendmail de juiste eigenaar van het deliver-proces te kunnen laten instellen, en om de gebruikersnaam die wordt aangeleverd juist te formatteren (cq het strippen van het domein waar ik het in de vorige post over had (voor grotere/meerdere domeinen kun je het beter anders opzetten natuurlijk))
######################*****##############
###   DOVECOT Mailer specification    ###
##################*****##################

VERSIONID(`$Sendmail: dovecot.m4,v 0.01 ca Exp $')

Mdovecot,   P=/usr/local/libexec/dovecot/deliver, F=DFMPhnu9[b]S[/b],
                 S=EnvFromSMTP/HdrFromSMTP, R=[b]EnvToL[/b]/HdrFromSMTP,
                 T=DNS/RFC822/X-Unix,
                 A=deliver -d $u

Ik heb aan virtusertable de gebruikers toegevoegd (die tabel moet dus nog naar ldap worden verplaatst, sendmail kan met ldap support voor die tabellen worden gecompileerd).
User-A@MailHost.local.local       %1@dovecot-vmail.local
User-B@MailHost.local.local       %1@dovecot-vmail.local
User-C@MailHost.local.local       %1@dovecot-vmail.local
User-D@MailHost.local.local       %1@dovecot-vmail.local

Dan heb ik de regel
dovecot-vmail.local     dovecot:
toegevoegd aan mailertable om de betreffende adressen te laten bezorgen door deliver.

dovecot-ldap.conf en dovecot.conf heb ik min of meer volgens het boekje opgezet (eerst te weinig volgens het boekje, vandaar dit), evenals de LDAP-directory (homedir en uid extraheert deliver uit de directory, de uid voor dovecot-vmail is statisch vastgelegd.)

Nu dus nog tzt sendmail hercompileren met LDAP-support, de tabellen naar ldap verplaatsen en algeheel de configuratiebestanden wat opruimen/overzichtelijker maken. En amavisd opzetten...

Heb ik problemen/veiligheidslekken over het hoofd gezien?

[ Voor 3% gewijzigd door begintmeta op 30-10-2008 18:23 ]

Pagina: 1