[Postfixbuch-users] maildrop (mail user)

Leander Sukov leander.sukov at leander-sukov.de
Do Mär 6 18:23:43 CET 2008


Am Donnerstag, 6. März 2008 schrieb Werner Detter:
> Hi,
>
> nicht zwangsweise. Verwendest du zum Beispiel eine MySQL-DB als Backend für
> die Userdaten kannst du bei Courier für den Courier-Authdaemon z.B. eine
> eigene, angepasste Query erstellen so dass die komplette E-Mail, der
> Localpart oder ein von der E-Mail unabhängiger Usernamen berücksichtigt
> werden kann.
>
> Aber was wir brauchen sind Fakten, Fakten, Fakten ;-)

Na denn mal los :-)

Also die ganze Verwaltung ist mysql-gestützt. Die Mails sollen in eine 
Struktur die so aussieht: /var/kunden/mails/user/emailadresse/mails

Problem a.) Setze ich in /etc/couier/authmysqlrc die Login-Namen auf ein Feld, 
das keine E-Mail-Adresse enthält, so scheitert die Mailzustellung.

/etc/courier/authmysqlrc
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME syscp
MYSQL_PASSWORD **********
MYSQL_PORT 0
MYSQL_DATABASE syscp
MYSQL_USER_TABLE mail_users
MYSQL_CRYPT_PWFIELD password_enc
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD homedir
MYSQL_MAILDIR_FIELD maildir

/etc/maildropmysql.config
hostname            127.0.0.1
socket              /var/run/mysqld/mysqld.sock
port                3306
database            syscp
dbuser              syscp
dbpw                ******
dbtable             mail_users
default_uidnumber   2000
default_gid         2000
uid_field           email
uidnumber_field     uid
gidnumber_field     gid
maildir_field       maildir
homedirectory_field homedir
quota_field         '50000000'
#quota_field        quota
# unused for now, but needs to be a valid field.
mailstatus_field    postfix
where_clause        AND postfix = 'Y'

/etc/postfix/main.cf

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
myhostname = cybersites.de
mydomain = cybersites.de
mydestination = $myhostname $mydomain localhost localhost.$mydomain
mynetworks = 127.0.0.0/8
alias_maps = $alias_database
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated 
reject_unauth_destination check_policy_service inet:127.0.0.1:60000
virtual_mailbox_base = /var/kunden/mail/
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000
#virtual_gid_maps = mysql:/etc/postfix/mysql-virtual_gid_maps.cf
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
home_mailbox = /var/kunden/mail/
#use this for maildrop-delivery / fuer die Verwendung mit Maildrop
virtual_transport = maildrop

#Maildrop-Options for usage with maildrop
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1

master.cf und maildroprc in der Anlage

Auszug aus /var/log/mail.log

Mar  3 13:19:58 cybersites postfix/pipe[24699]: 93E32257C2E0: 
to=<erstertest at schlagbar.de>, relay=maildrop, delay=0.07, 
delays=0.04/0.01/0/0.02, dsn=5.1.1, status=bounced (user unknown. Command 
output: Invalid user specified. )

Auszug aus /var/log/mysql/mysql.log

080306 17:50:20	     13 Connect     syscp at localhost on syscp
		     13 Query       SELECT domain FROM panel_domains WHERE 
domain='sss-edv.de' and isemaildomain = '1'
		     13 Query       SELECT domain FROM panel_domains WHERE 
domain='schlagbar.de' and isemaildomain = '1'
		     14 Connect     syscp at localhost on syscp
		     14 Query       SELECT destination FROM mail_virtual WHERE 
email='erstertest at schlagbar.de' and destination <> '' and destination <> ' '

[Das ist ein Eintrag, der zeigt, dass die Empfängeradresse zerlegt wird und 
benutzt]

Eine Feldänderung in den /etc/courier-Files führt zu einer unzustellbaren 
Mail. Wenn also ein Feld "User" mit dem Inhalt "4711" genommen wird, um das 
Login über diesen Usernamen zu generieren, kommt die Mail an die dazugehörige 
Addy erstertest at schlagbar.de nicht mehr an. Dieser Zusammenhang ist für mich 
kryptisch.

Welche Daten werden sonst noch benötigt?




-- 
http://leander-sukov.de
Bitte abonniert dort auch die Kulturmaschinen-Mailingliste
Das Kunstmanagement, das mich vertritt:
http://kulturmaschinen.de
-------------- nächster Teil --------------
#########################################################
# Created by Philipp Haefelfinger
#########################################################
# How this script works:
# 1. create maildir if it doesn't exist
# 2. open logfile
# 3. get settings from Database if enabled
# 4. run virusscan if enabled -> if virus found disable all other scans
# 5. run spamscan if enabled -> if spam disable other scans
# 6. run userdefines scans if enabled
# 7. deliver to MAILDIR
#########################################################
#Configuration
#########################################################

DEFAULT=`echo " select maildir from mail_users where email = '$LOGNAME';" |mysql -u syscp -p"*******" syscp -h 127.0.0.1 | grep \@`

EXTENSION="$1"
RECIPIENT="$2"
USER="$3"
HOST="$4"
SENDER="$5"

# set this to 1 if you want to log the usersettings vor vscan, etc.
LOGUSERSETTINGS=1

# Full path to the maildrop log of each user
LOGFILEPATH=$HOME$DEFAULT/maildrop.log

# Setting for SysCP maildrop module
USESYSCPSETTINGS=1

# Basedir of your syscp installation
SYSCPBASEDIR="/var/www/syscp"

# Default setting for the spamfilter
SPAMFILTER=0

# use spamc instead of the direct call to spamassassin
USESPAMC=1

# Default setting for the virusscan
VSCAN=0

# include userdefined filters into maildrop
USERFILTER=1

# basedir of your userdefined filterfiles
MAILFILTERDIR="/var/kunden/mailfilter"

# Only scan mails smaller than SCANSPAMSIZE for spam
SCANSPAMSIZE="2000000"

# Only scan mails smaller than VSCANSIZE for a virus
VSCANSIZE="2000000"

#########################################################
# Do NOT change anything below this line unless you know
# what you're doing!
#########################################################
#
# First check if the maildir exists and create it, if 
# it doesn't exist
#
#########################################################
MAILDIR=$HOME$DEFAULT
#MAILDIR=$HOME$LOGNAME

`test -d "$MAILDIR"`				# check if dir exist
if ($RETURNCODE != 0)
{
	`mkdir -p $MAILDIR`			# create dirs with parents
	`rmdir $MAILDIR`			# remove dir for init
	`/usr/bin/maildirmake $MAILDIR`		# create maildir
}

#########################################################
#
# init logfile for this user
#
#########################################################
logfile "$LOGFILEPATH"
log "========================================================================="
if ( $LOGUSERSETTINGS )
{
	log "maildir: $MAILDIR"
	log "SPAMFILTER: $SPAMFILTER - VSCAN: $VSCAN"
	log "logname: $LOGNAME"
	log "EXTENSION: $1"
	log "RECIPIENT: $2"
	log "USER: $3"
	log "HOST: $4"
	log "SENDER: $5"
}

#########################################################
#
# get settings for account from SysCP-Database
#
#########################################################
if ( $USESYSCPSETTINGS )
{
`/usr/local/syscp/maildrop/getsettings.sh $LOGNAME`
log "CODE nach Abfrage: $RETURNCODE"

    if ($RETURNCODE == 3)
    {
        VSCAN=1
        SPAMFILTER=1
    }
    if ($RETURNCODE == 2)
    {
        VSCAN=1
        SPAMFILTER=0
    }
    if ($RETURNCODE == 1)
    {
        VSCAN=0
        SPAMFILTER=1
    }
    if ($RETURNCODE == 0)
    {
        VSCAN=0
        SPAMFILTER=0
    }
}

#########################################################
#
# run virusscan
#
#########################################################
if ( $VSCAN )
{
    if( $SIZE < $VSCANSIZE )
    {
        exception {
		    xfilter "/usr/bin/clamscan.sh"
        }
    }

    # check if mail is marked as virus
    if(/^X-Virus-Status:.*INFECTED/)
    {
		exception {
		    log "identifyed as virus! -> $MAILDIR/.Virus"
		    MAILDIR = $MAILDIR.Virus/
		    SPAMFILTER=0
		    USERFILTER=0
		}
    }
}

#########################################################
#
# run spamfilter
#
#########################################################
if ( $SPAMFILTER )
{
    if( $SIZE < $SCANSPAMSIZE )
    {
		exception {
			if ( $USESPAMC )
			{
		    	xfilter "/usr/bin/spamc -f -x -u $LOGNAME"
			}
			else
			{
		    	xfilter "/usr/bin/spamassassin -x"
			}
		}
    }

    # check if mail is marked as spam
    if(/^X-Spam-Flag: *YES/)
    {
		exception {
		    log "identifyed as spam! -> $MAILDIR/.Spam"
		    MAILDIR = $MAILDIR.Spam/
	    	    VSCAN=0
		    USERFILTER=0
		}
    }
}

#########################################################
#
# include userdefined mailfilter
#
#########################################################
if ( $USERFILTER )
{
	exception {
		include $MAILFILTERDIR/$LOGNAME
	}
}

#########################################################
#
# create needed sub-directory, if it doesn't exist
#
#########################################################
`test -d "$MAILDIR"`
if( $RETURNCODE == 1 )
{
        `mkdir -p $MAILDIR`
        `rmdir $MAILDIR`
        `/usr/bin/maildirmake "$MAILDIR"`
} 

#########################################################
#
# deliver mail to maildir
#
#########################################################
exception {
    log "filtering done, deliver to $MAILDIR"
    to "$MAILDIR"
}
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : master.cf
Dateityp    : text/x-c++src
Dateigröße  : 4337 bytes
Beschreibung: nicht verfügbar
URL         : <https://listi.jpberlin.de/pipermail/postfixbuch-users/attachments/20080306/32f9e4d7/attachment.cpp>


Mehr Informationen über die Mailingliste Postfixbuch-users