• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

eMails filtern mit Procmail und ldap. Funzt nicht richtig

Status
Für weitere Antworten geschlossen.
Hallo,

Habe bisher die sortierung der eMails für unsere Firma über Procmail erledigt. Dies ist aber ein mega gewurschtel da jeder user seine eigene filter datei hat.

Angenommen wir haben 3 user hier.

Procmail verweist auf procmail rc

procmailrc -> Haupt.procmailrc -> user1.procmailrc
user2.procmailrc
user3.procmailrc -> match -> cyrus

Das ist deswegen notwendig da die filter per script eingefügt werden. und wieder gelöscht werden.

Nun habe ich versuche eine anbindung an LDAP hinzubekommen, was mir beim INTERNEN mailverkher auch gelingt, nur beim externen nicht.

procmailrc
Code:
USER=$2
ABSENDER=$1

# --- LDAP Anfrage fuer benutzernamen stellen --

EMPFAENGER=`ldapsearch -b ou=Users,ou=OxObjects,dc=panno,dc=com -x "(|(mail=$USER)(alias=$USER))" uid | grep "uid: " | cut -f2 -d" "`


# ---

# --- an User zustellen ---
{
        :0 c
        | /sbin/cyrdeliver -a -m $EMPFAENGER
}
# ---
# --- Wenn fehler dann zurueck in Queue ---
:0 e
{ EXITCODE=75 HOST }
# ---

postconf -n
Code:
alias_maps = ldap:aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/lib/postfix
debug_peer_level = 2
defer_transports =
fallback_transport = procmail
html_directory = /usr/share/doc/packages/postfix/html
inet_interfaces = all
local_recipient_maps = ldap:local $alias_maps
mailbox_command = /usr/lib/cyrus/bin/deliver
mailbox_transport = procmail
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
masquerade_domains = panno.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = panno.com
myhostname = mail.panno.com
mynetworks = 192.168.194.0/27, 127.0.0.0/8
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases
readme_directory = /usr/share/doc/packages/postfix/README_FILES
relay_domains =
relayhost = smtp.udag.de
sample_directory = /usr/share/doc/packages/postfix/samples
sendmail_path = /usr/sbin/sendmail
setgid_group = maildrop
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtpd_helo_required = yes
unknown_local_recipient_reject_code = 550

master.cf
Code:
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
cyrus     unix  -       n       n       -       -       pipe
  user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
vscan     unix  -       n       n       -       10       pipe
  user=vscan argv=/usr/sbin/amavis ${sender} ${recipient}
procmail  unix  -       n       n       -       -       pipe
        flags=R user=cyrus argv=/usr/bin/procmail -t -m /etc/procmailrc ${sender} ${recipient}
#procmail  unix  -       n       n       -       -       pipe
#       flags=R user=cyrus argv=/usr/bin/procmail -t -m /etc/procmailrc


Wie gesagt, lokal bekommt die Procmailrc den richtigen user vom postfix.

Code:
procmail: Assigning "ABSENDER=test@panno.com"
procmail: Assigning "USER=user@panno.com"
procmail: Assigning "NEXTHOP=mail.panno.com"
procmail: Assigning "EXTENSION="
procmail: Executing "ldapsearch -b ou=Users,ou=OxObjects,dc=panno,dc=com -x "(|(mail=$USER) (alias=$USER))" uid | grep "uid: " | cut -f2 -d" ""
procmail: Assigning "EMPFAENGER=user"
procmail: Skipped "{"
procmail: Assigning "LASTFOLDER=/sbin/cyrdeliver -a -m user"
procmail: Closing brace unexpected
procmail: Assigning "LASTFOLDER=/dev/null"
procmail: Opening "/dev/null"
 Subject: Test
  Folder: /dev/null                                                         831
procmail: Executing "/sbin/cyrdeliver,-a,-m,user"

aber wenn eine eMail von extern kommt ...

Code:
procmail: Assigning "ABSENDER=ABSENDER"
procmail: Assigning <b>"USER=postmaster@localhost.panno.com"</b>
procmail: Assigning "NEXTHOP=mail.panno.com"
procmail: Assigning "EXTENSION="
procmail: Executing "ldapsearch -b ou=Users,ou=OxObjects,dc=panno,dc=com -x "(|(mail=$USER) (alias=$USER))" uid | grep "uid: " | cut -f2 -d" ""
procmail: Assigning "EMPFAENGER="
procmail: Skipped "{"
procmail: Assigning "LASTFOLDER=/sbin/cyrdeliver -a -m"
procmail: Closing brace unexpected
procmail: Assigning "LASTFOLDER=/dev/null"
procmail: Opening "/dev/null"
 Subject: (kein Betreff)
  Folder: /dev/null                                                        1821
procmail: Executing "/sbin/cyrdeliver,-a,-m"
421-4.3.0 usage: deliver [-C <alt_config> ] [-m mailbox] [-a auth] [-r return_path] [-l] [-D]
421 4.3.0 v2.2.3

.. kommt als empfänger postmaster@gagaga, was mein script nicht finden kann.

Hat jemand eine ahnung wie ich das in den Griff bekommen kann???

Und bitte sagt mir jetzt nicht "Benutz sieve" wenn das schon jemand sagt, dann soll man mir auch genau sagen wie. Ich weiss wie ich scripte schreibe und wie ich sie aktiviere, aber wie bekomm ich die mails von Postfix mach sieve?

Ausserdem währe es mir so lieber.

Ach ja, die emails kommen von einem catch all account bei einem Provider. Also ist nix mit fetchmailrc -> user there is userb here, darüber hab ich auch schon nachgedacht.

danke schon mal für eure hilfe,

mfg XeN
 
sieve filtert auf Benutzerebene, also wäre mein Vorschlag mit sieve:

Leite alle Post via fetchmail an einen "Dummy-User" Cyrus-Postfach weiter.
Die Sieve Regeln für diesen Dummy-User verteilen dann auf die anderen lokalen user Postfächer.
Der Vorteil: EINE sieve Konfiguration für alle.

so ein sieve Script kann mit diversen GUIs wie websieve, sieve-php, smartsieve, ... schnell zusammengeklickt werden.
 
OP
X

XeN

danke für deine antwort,

also an websieve hab ich mir den ganzen morgen den kopf zerbrochen und ich bekomme es nicht hin, er sagt mir immer mein login sei falsch. Hin und wieder gibt er mit auch die websieve.pl als download, je nachdem welches pass ich benutze =).

als fehlermeldung bekomme ich immer

Code:
Login Error
There was an error in loging you in to the server. Please click HERE and try again.

System Error: IMAP::Admin [ initialize ]: try NO Login failed: authentication failure

User server=mail.panno.com

kannst du damit was anfangen? Was benutzt du? Kannst du mir da bei der einrichtung was helfen?

wie muss ich denn postfix einrichten um mit sieve arbeiten zu können?

mfg
 
XeN schrieb:
Was benutzt du? Kannst du mir da bei der einrichtung was helfen?
ich nutze den websieve-063a. In der README Datei steht eigentlich ziemlich genau drin, wie websieve installiert wird.
Poste mal deine websieve.conf wenn du nicht klar kommst mit der websieve Installation.
Kannst du denn die websieve Startseite aufrufen?

Wenn du einen "dummy-user" eingerichtet hast, ist dieser auch dem cyrus bekannt und hat er ein cyrus Postfach?

Die Idee war ja:
fetchmail holt alle Post aus dem catch-all und stellt sie an dummy via postfix zu. Beim einsortieren in das dummy-Cyrus-Postfach greifen die sieve Regeln und verteilen auf die realen User.

XeN schrieb:
wie muss ich denn postfix einrichten um mit sieve arbeiten zu können?
der postfix übergibt die Post an Cyrus. Integraler Bestandteil von Cyrus ist die Filtersprache sieve. D.h. am Postfix musst du eigentlich gar nichts für sieve konfigurieren, da du deine Post via Cyrus verwaltest (zumindest entnehme ich das deinem ersten Posting so)
 
OP
X

XeN

jein,

also am ende steht Cyrus, aber die eMails werden vorher halt noch mit procmail gefiltert, also stellt procmail die eMails eigendlich an cyrus weiter.

Also muss ich in der main.cf lediglich bei mailbox_command anstelle von procmail, cyrus eintragen und einen blick in die master.cf schmeißen?

also bei websieve komme ich auf die start seite. beim Login kommt wie gesagt oben genannte fehlermeldung.

In der Readme steht das man IMAP::Admin und perlsieve testen kann mit make test, IMAP::Admin geht auch durch, nur der perlsieve nicht. Ich hab nur keinen plan warum nicht.

meine websieve.conf sieht jedenfalls so aus.

Code:
#Websieve configuration file

#set $useldapextras=1 to use Jules Agee's ldap administration functions
$useldapextras=0;

#set $useauth=1 to use ldap (for ldap password changes)
$useauth=1;
$LDAP_SERVER='192.168.194.25';
$LDAP_BASEDN='dc=panno,dc=com';
$ENCRYPT_PASS=1;

# above library is used to allow user to change passwords
# on a server of the users choice.  The required functions are:
# &auth_changepass - validates and saves password changes
# &auth_getuserserver - get user imap server from auth database
# You can write you own functions to change passwords on a different auth
# mechanism such as on a MysSql server, Qualcomm poppassd server, etc.

#require "./custom.pl";

#secret key - CHANGE THIS to some random data!!!!
$skey = "asdfvb pdfhvwd pfhvpsudhfvkjsdhfvkjsdhfvh";
#use RC4 algorithm for encryption instead of rot13
$userc4=1;
#cyrus admin user id that is used for general mailbox administration
$cyrusadminuid='root';

# default imap server host name
$imapserver='mail.panno.com';

#make sure you set this to your program virtual name and path
#$program_url = "/cgi-bin/websieve.pl" ;      # URL for this program

# default system ports of timsieved/imapd daemons
$sieveport='2000';
$imapport='143';

#mailbox unix hier seperator
$unixhiersep='.';

#your mail domain
$maildomain='panno.com' ;

#default FQHN of the  mail server for use in vacation addresses
$mailhostappend="imap.$maildomain";
#use SSL for server connections
#requires IO::Socket::SSL, Net::SSLeay, OpenSSL
$useimapSSL=0;
$usesieveSSL=0;

#name of default  sieve script
$defaultscript='defscript';

#attributes for each imapserver when used with virtual domains or multiple servers and one single instance of websieve
#%server_hosts=(
#"hostname"=>['Display Name','imapport#','sieveport#','maildomain','vacationhost','ssl_all']);
#only use last field 'ssl' if using ssl to connect to remote server.
#this can also be 'ssl_all' to use ssl for imap and sieve or
#simply 'ssl_sieve' or 'ssl_imap' to use ssl on only one of these protocols
#NOTE:  The ssl field is ignored with the Cyrus::xxxx perl libraries
#any of the options can be blank and the default values of $imapserver,
#$sieveport,$imapport,$maildomain, $imapserver and $usexxxSSL will be used instead.

%server_hosts=(
"yourmailhost"=>['mail.panno.com','143','2000','panno.com','192.168.194.99'],
);

# show server selection option at login otherwise defaults to $imapserver
$useserverselect=0;

#set to 1 to return to rulesview after rules addition
$returntoview=0;

#to allow advanced mode script creation (globally)
$allowadvanced=1;
#to allow advanced mode script creation (per user) (next 2 lines)
#$allowadvanced=0;
#@advanceduser=('jdoe2','user2','etc');

#usemulti to allow creation of multiple scripts on the server
$usemulti=1;

#Title of displayed pages
$header1="Mail Account Management";

# This is the address that supports your mail server
$problem_email="administrator\@$maildomain" ;

# list of additional namespaces on IMAP server
@namespaces = ("public2");

# set this to 1 to include all root/public folders in mailbox and acl lists
$includepublic=1;

# set to 1 if you want to use acl entries to decide which folders to display
# this is recommended when using alt_namespace patch
$selectbyacl=1;


#is the server using the new alternate namespaces option
$alt_namespace=0;

#allow use of the sieve reply action in rules
$usereply=0;

#allow use of the sieve reject action in rules
$usereject=1;

#allow setting of mailbox acl's
$useacl=1;

#allow use of the sieve discard action in rules
$usediscard=1;

#allow user selectable header fields to be searched in rules
$usevariablefield=1;

#allow use of regular expression searches in rules
$useregex=1;

#allow use of the sieve vacation action in rules
$usevacation=1;
$usereply=0 if (!$usevacation);

#shortacl=1 to create a scrolling list instead of a table for acl values
$shortacl=1;


#usematches always uses :matches instead of :contains
$usematches=0;

#usesearchflg allows switching from allof to anyof header searches
$usesearchflg=1;

#usesize allows using rules regarding messages size
$usesize=1;

#use custom sieve script rules
$usecustom=0;

#allow forward all mail menu option
$useforwardall=0;

# force a keep on mail redirects
$keepredirect=0;

# set quotemailbox=1 if using IMAP-Admin < version 1.2.6 to fix folders with spaces
$quotemailbox=0;

# table colomn 1 color - row name
$tb='BGCOLOR=#9999FF';
# table column contents
$cb='BGCOLOR=#CCCCCC';
# page background color
$bg='#EEEEEE';

# display the menu selections at top of page
$showmenu=1;
# display "LOGOUT HOME HELP" menu options;
$showhome=1;
# display the mail server line at top of page
$showserver=0;
# set to 1 to not display the byline at end of page
$nobyline=0;

#set cookie expiration time - leave blank for session only
#$expires='+1h';
$expires='';

#action to perform on previous modified rule (can be 'DISABLED','DELETE');
$OLDMODIFY='DELETE';

#use server based session cookies instead of client based (cookie in URL)
#this is for people that don't or can't use cookies on their clients
$useservercookie=0;

#set time that a session cookie expires (in seconds)
$session_exp='1800'; # 30 minutes

#Text to add before vacation message
$vacation_prelude = "Autogenerated Message:\n";

# Menu selections
$LOGOUTURL="<a href=$program_url?op=logout>[LOGOUT]</a>" if !$LOGOUTURL;
$HOMEURL="<a href=/index.html>[HOME]</a>";
$HELPURL="<a href=/mailhelp.html>[HELP]</a>";
$VIEWRULESURL="<a href=$program_url?op=viewrules>[View/Edit Rules]</a>";
$FORWARDALLURL="<a href=$program_url?op=forward>[Forward Mail]</a>";
$SETVACATIONURL="<a href=$program_url?op=setvacation>[Set Vacation]</a>";
$SETACLURL="<a href=$program_url?op=setacl>[Set ACL's]</a>";
$ADDRULEURL="<a href=$program_url?op=addrule>[Add Rule]</a>";
$SETPASSWORDURL="<a href=$program_url?op=setpass>[Change Password]</a>";
$ADVANCEDURL="<a href=$program_url?op=advanced>[Advanced Options]</a>";
$ADMINMENUURL="<a href=$program_url?op=setacl>[Admin Mailboxes]</a>";

#procmail parameters
$useprocmail=0;
$toaddr="cyrus\@$maildomain";
$fromaddr="filteradm\@$maildomain";
$sendcmd="/usr/sbin/sendmail $toaddr";
$adminsecret='18778392';
$matchingrules='matchingrules';
$updatepseudo=0;
$havequota=1;

### END of user parameters

1; # make require happy

ist auch die selbe version wie von dir.

mfg
 
OP
X

XeN

so,

also die eMail landet nun bei dem dummy konto, welches ich auch unter user.dummy angelegt habe.

Nur er sortiert es nicht ins richtige konto.

hier mein script

Code:
require "fileinto";
if header :matches ["To", "CC", "BCC"] "*schmitz@*" {
fileinto "user.schmitz";
stop;
}
 
XeN schrieb:
Code:
require "fileinto";
if header :matches ["To", "CC", "BCC"] "*schmitz@*" {
fileinto "user.schmitz";
stop;
}

zum einlesen über die sieve Parameter
http://lexikon.freenet.de/Sieve
http://www.holtmann.org/email/sieve/

über websieve:
http://www.albany.edu/its/accounts_email/websieve/
http://www.in-berlin.de/(lynx)/support/websieve/

fileinto Die Nachricht kann in einen bestimmten Ordner verschoben werden. Dazu muß als Argument der Folder in der Form "INBOX.<folder>" angegeben werden. Will man "fileinto" nutzen, muss man es als erstes über den "require" anfordern.

also verwende mal INBOX.user.schmitz ...
 
OP
X

XeN

hmmm,

ich bin mir im moment gar nicht mal sicher ob ich den filter bei der richtigen mailbox einstelle.

melde mich mit sieveshell --user=dummy --authname=root localhost an.

Stelle ich die sachen dann bei root oder bei dummy ein? habe kein passwort für den dummy user. weiss aber atok auch nicht mehr wie das ging.

mfg
 
Cyrus user werden via cyradm verwaltet.

mit einem Aufruf "sieveshell -u franz -a franz" würdest du scripte für franz anlegen.

Denk auch dran das nach dem put myScript ein activate myScript (in der sieve-shell) erfolgen muss, sonst steht das script zwar da, wird aber nicht verwendet ...

mit tail /var/log/messages bzw tail /var/log/mail solltest du die arbeitsweise verfolgen können, wenn eine email ankommt und dann via sieve script verteilt wird.
 
OP
X

XeN

okay,

habe ich soweit schon gemacht. Musste einfach mit saslpasswd2 ein passwort setzen. Wusste nur nicht ob die ldap anbindung da nicht was quer schießt.

Dann wirds in der message stehen, in der mail stehts jedenfalls nicht.

Das Script war richtig eingebunden, und aktiviert.

Nun muss ich nur noch den websieve ans laufen bekommen, dann währe alles perfekt.

mfg
 
bedeutet das jetzt, das dein script arbeitet ?

evtl fehlt dir ein Auth-Modul, websieve kann AFAIK nur plain-text Authorisierung ... (cyrus-sasl-plain oder so ähnlich) Aber du solltest bei einem login via websieve ebenfalls via messages sehen können ob es an der verkehrten AUth-Methode liegt.

Könnte ich später mal auf meinem Mail-Server schauen ...
 
OP
X

XeN

noch nicht, bin im moment nebenbei noch was für meine klausur morgen am lernen.

Bald ist zeugniskonferez, da überschlagen sich die lehrer immer *grr*.


aber werde es jetzt mal ausprobieren.

wenn du mal schauen könntest währe das cool =).
 
Status
Für weitere Antworten geschlossen.
Oben