plesk/qmail/qsheff/spamassassin nur eingehende Mails scannen

oli-k

New Member
Hallo,

ich habe mit Hilfe von huschi.net - Plesk: Spamassassin und ClamAV per qsheff einbinden SpamAssassin und ClamAV über Qsheff-II zum Laufen gebracht. Die Konfiguration läuft bereits seit einigen Monaten stabil, allerdings werden immernoch ausgehende Mails mit SpamAssassin kontrolliert.
Die qmail-queue in der Form abzuwandeln:
Code:
#!/bin/bash
if [ -z $USER ] ; then
  /usr/bin/spamc | /var/qmail/bin/qmail-qsheff
else
  /var/qmail/bin/qmail-qsheff
fi

hat nichts gebracht. Über ein "SET >> /logfile.log" in der qmail-queue habe ich dann auch herausgefunden, dass $USER gar nicht gesetzt ist, auch keine ähnlichen Variablen..
Die Logdatei sieht für eingehende und ausgehende Emails identisch aus (natürlich bis auf SMTPMAILFROM, ...):

Code:
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=([0]="0")
BASH_SOURCE=([0]="bin/qmail-queue")
BASH_VERSINFO=([0]="3" [1]="00" [2]="16" [3]="1" [4]="release" [5]="i586-suse-linux")
BASH_VERSION='3.00.16(1)-release'
COLUMNS=80
CONSOLE=/dev/null
DAEMON=/usr/sbin/xinetd
DIRSTACK=()
EUID=2020
GROUPS=()
HOME=/
HOSTNAME=meinserver.xyz
HOSTTYPE=i586
IFS=$' \t\n'
INIT_VERSION=sysvinit-2.85
LINES=24
MACHTYPE=i586-suse-linux
OPTERR=1
OPTIND=1
OSTYPE=linux
PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
PIPESTATUS=([0]="0" [1]="0")
PPID=11398
PREVLEVEL=N
PROTO=TCP
PS4='+ '
PWD=/var/qmail
REDIRECT=/dev/ptyp0
REMOTE_HOST=11.22.33.44
RUNLEVEL=3
SHELL=/bin/sh
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=3
SMTPAUTH=
SMTPHELOHOST=mail.gmx.net
SMTPMAILFROM=extern@gmx.de
SMTPRCPTCOUNT=0
SMTPRCPTHOSTSOK=1
SMTPRCPTTO=info@meinserver.xyz
SPLASH=no
SPLASHCFG=
TCPLOCALHOST=meinserver.xyz
TCPLOCALIP=11.22.33.44
TCPLOCALPORT=25
TCPREMOTEHOST=mail.gmx.net
TCPREMOTEIP=213.165.64.20
TCPREMOTEPORT=45259
TERM=linux
UID=2020

Kann ich qMail irgendwie dazu bringen, den $USER zu setzen? Gibt es eine andere Möglichkeit?
Wäre eine Lösung das Feld $SMTPMAILFROM mit /var/qmail/control/rcpthosts (Liste alle Domains, für die Mails akzeptiert werden) zu vergleichen?

Gruß
Oli
 
Last edited by a moderator:
Schön daß Du alles mitgeliefert hast. Nur am Beispiel hast Du Dich vertan. Denn dies ist das SET einer eingehenden Mail:
SMTPMAILFROM=extern@gmx.de
SMTPRCPTTO=info@meinserver.xyz

Wäre eine Lösung das Feld $SMTPMAILFROM mit /var/qmail/control/rcpthosts zu vergleichen?
Darfst Du gerne machen. Poste doch das endgültige Script hier.

huschi.
 
SET liefert folgendes für ausgehende Mails:
Code:
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=([0]="0")
BASH_SOURCE=([0]="bin/qmail-queue")
BASH_VERSINFO=([0]="3" [1]="00" [2]="16" [3]="1" [4]="release" [5]="i586-suse-linux")
BASH_VERSION='3.00.16(1)-release'
COLUMNS=80
DAEMON=/usr/sbin/xinetd
DIRSTACK=()
EUID=2020
GROUPS=()
HOME=/
HOSTNAME=meinserver.xyz
HOSTTYPE=i586
IFS=$' \t\n'
LANG=C
LINES=24
MACHTYPE=i586-suse-linux
OPTERR=1
OPTIND=1
OSTYPE=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
PIPESTATUS=([0]="0" [1]="0")
PPID=12007
PREVLEVEL=N
PROTO=TCP
PS4='+ '
PWD=/var/qmail
REMOTE_HOST=84.167.244.231
RUNLEVEL=3
SHELL=/bin/false
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=5
SMTPAUTH=
SMTPHELOHOST='[192.168.2.12]'
SMTPMAILFROM=info@meinserver.xyz
SMTPRCPTCOUNT=0
SMTPRCPTHOSTSOK=0
SMTPRCPTTO=extern@gmx.de
TCPLOCALHOST=meinserver.xyz
TCPLOCALIP=11.22.33.44
TCPLOCALPORT=25
TCPREMOTEHOST=p54a7f4e7.dip.t-dialin.net
TCPREMOTEIP=84.167.244.231
TCPREMOTEPORT=62724
TERM=linux
TRAFFIC_ACCOUNTING=no
TRAFFIC_SHAPING=no
UID=2020
VEID=1
VE_CONFFILE=/etc/sysconfig/vz-scripts/1.conf

und da ist auch nix dabei um ausgehende Mails eindeutig zu identifizieren.. (das SMTPHELOHOST eine interne IP-Adresse liefert muss ja auch nicht zwingend sein..)

Wie das Skript für meinen Lösungsvorschlag aussieht (also $SMTPMAILFROM mit /var/qmail/control/rcpthosts überprüfen), weiß ich noch nicht, bin gerade noch am tüfteln, weil ich mich mit dem bash syntax nicht auskenne. Wenn jemand einen Vorschlag hat, nur her damit. :-)

Gruß
Oli
 
Einige Unterschiede sind schon da. Man muß halt mal überprüfen, ob die wirklich immer so sind und als eine Art Fingerprint fungieren können.

Für das Script: (ungetestet und unvollständig)
Code:
#!/bin/bash

Domain=`echo $SMTPMAILFROM | cut -d@ -f2`
Exists=`grep '$Domain' /var/qmail/control/rcpthosts`
if test -z $Exists
then
    #nicht in rcpthosts
else
    #ist in rcpthosts
fi

Hier hat man dann aber das Problem, wenn ein Spammer mit gefaktem Absender etwas schickt (also von abc@dom.de an def@dom.de), läuft er in den falschen Zweig rein.
Einen Fingerprint der ENV erscheint mir eher als Lösung.

huschi.
 
mir ist gerade aufgefallen, dass qmail wohl den gleichen Test macht und SMTPRCPTHOSTSOK entsprechend setzt, aber auch nur, wenn Mails von außen kommen (deshalb ist mir das nicht gleich aufgefallen...).
Also SMTPRCPTHOSTSOK ist 1, wenn Mail von außen und Empfänger in rcpthosts,
bzw. SMTPRCPTHOSTSOK ist 0 wenn Mail intern verschickt wird oder Empfänger nicht in rcpthosts

Mein Skript sieht jetzt wie folgt aus:

Code:
#!/bin/bash
if [ -z $USER ] && [ "$SMTPRCPTHOSTSOK" = "1" ] ; then
  echo "---- mit SpamAssassin ----" >> /oli.log
  /usr/bin/spamc | /var/qmail/bin/qmail-qsheff
else
  echo "---- ohne SpamAssassin ----" >> /oli.log
  /var/qmail/bin/qmail-qsheff
fi
set >> /oli.log

das -z $USER muss auch noch überprüft werden, weil sonst bei internen Weiterleitungen die Mails mehrfach gescannt werden.

Gruß
Oli
 
Berichte doch bitte in 1-2 Tagen ob es so funktioniert.
Wenn Du gestattest, würde ich diese Anregung gerne in mein Howto übernehmen.

huschi.
 
hi

klar, kannst Du es in das HowTo schreiben.

es funktioniert sogar ohne -z $USER, weil bei Weiterleitung $SMTPRCPTHOSTSOK gar nicht gesetzt wird.

Hier ist jetzt nochmal die letzte Version des Skripts (ohne Debugausgabe):

Code:
#!/bin/bash
if [ "$SMTPRCPTHOSTSOK" = "1" ] ; then
  /usr/bin/spamc | /var/qmail/bin/qmail-qsheff
else
  /var/qmail/bin/qmail-qsheff
fi

Gruß
Oli
 
Hm,
funktioniert bei mir dummerweise nicht :confused: (Bei mir läuft ein Strato VServer mit suse9.3, Spamassassin 3.1.8 und qsheff-II-2.1-r2).

Ich habe simplerweise folgendes gemacht:

Code:
/etc/init.d/qmail stop
Dann die qmail-queue wie in Post #7 bearbeitet (nur bearbeitet, Rechte stimmen danach also weiterhin!), daraufhin wieder:
Code:
/etc/init.d/qmail start

Daraufhin scannt der Spamd laut qsheff.log aber gar nichts mehr, sondern alles was kommt wird direkt gequeued. Auch die Debugversion der qmail-queue von weiter oben funktioniert nicht, er schreibt auch erst gar nichts in das dort angegebene /oli.log .

Hat jemand ne Idee?:confused:

Vielen Dank & Grüße,
Beme
 
Last edited by a moderator:
Back
Top