[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