syscp mit spamassasin und maildrop


neuer Server mit syscp als Interface

Nach dem ich die Installation von SysCP auf einem Debian Etch System mit Hilfe der Anleitung von syscp.org durchgegangen war gab es noch ein paar Kleinigkeiten …

Die reine SysCP Installation ist schnell gemacht. Nach der Anleitung ging es auch mit Spamassassin, ClamAV und benutzerdefinierten Mailfilterregeln in die SysCP Konfiguration einigermassen voran.

Allerdings habe ich einige Punkte abgäendert.


Hier erst mal die Schritte aus der Anleitung im einzelnen mit meinen Anmerkungen.

/etc/apt/sources.list

[...]
deb http://debian.syscp.de/ etch/
[...]
apt-get update
apt-get remove --purge exim4-base
apt-get remove --purge exim4-config popa3d
apt-get install syscp courier-imap courier-imap-ssl courier-pop-ssl

Apache vorbereiten

rm /etc/apache2/sites-enabled/000-default

/etc/apache2/httpd.conf:

DocumentRoot /var/www/

   Options FollowSymLinks
   AllowOverride None

   Options FollowSymLinks MultiViews
   AllowOverride None
   Order allow,deny
   allow from all

a2enmod php5

/etc/php5/apache2/php.ini:

disable_functions = ini_restore
extension=mysql.so
/etc/init.d/apache2 restart

AllowOverride None
Order allow,deny
allow from all

a2enmod php5

/etc/php5/apache2/php.ini:

disable_functions = ini_restore
extension=mysql.so
/etc/init.d/apache2 restart

SSL Zertifikate Ca Cert
Ich habe mich dann bei Ca Cert angemeldet.

mkdir /etc/apache2/ssl/
openssl req -newkey rsa:1024 -subj /CN=DOMAIN.DE -nodes -keyout private.key -out server.csr

neues Serverzertifikat erstellen dann

server.csr —> Inhalt bei cacert einfügen

die Ausgaben als

/etc/apache2/ssl/server.crt

abspeichern.

cd /etc/apache2/ssl/
wget http://wiki.cacert.org/wiki/SimpleApacheCert?action=
                                AttachFile&do=get&target=CAcert_chain.pem

mv ~/private.key /etc/apache2/ssl/
rm ~/server.csr

cp /etc/apache2/ssl/private.key /etc/ssl/private/
chown root.ssl-cert /etc/ssl/private/private.key
chmod 0640 /etc/ssl/private/private.key

cp /etc/apache2/ssl/CAcert_chain.pem /etc/ssl/certs/
cp /etc/apache2/ssl/server.crt /etc/ssl/certs/

Die neuen Cert-Dateien:

/etc/ssl/private/private.key /etc/ssl/certs/CAcert_chain.pem /etc/ssl/certs/server.crt

Apache

/etc/apache2/sites-available/default-ssl:

  # SSL (START)
  SSLEngine on

  SSLCertificateFile /etc/apache2/ssl/server.crt
  SSLCertificateKeyFile /etc/apache2/ssl/private.key
  SSLCertificateChainFile /etc/apache2/ssl/CAcert_chain.pem
  # SSL (ENDE)

  ServerAdmin webmaster@example.de
  ServerName ssl.example.de
  DocumentRoot /var/www/

    Order Deny,Allow
    Allow from all

a2ensite default-ssl

/etc/apache2/ports.conf:

Listen 80
Listen 443

a2enmod ssl

apache2ctl restart

Courier

mv /etc/courier/imapd.pem /etc/courier/imapd.pem.old
cat /etc/ssl/private/private.key /etc/ssl/certs/server.crt > /etc/courier/imapd.pem

/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop-ssl restart

Postfix

/etc/postfix/main.cf:

[...]
# Server side TLS
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/ssl/private/private.key
smtpd_tls_cert_file = /etc/ssl/certs/server.crt
smtpd_tls_CAfile = /etc/ssl/certs/CAcert_chain.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s

# Client side TLS
smtp_use_tls = yes
smtp_tls_key_file = /etc/ssl/private/private.key
smtp_tls_cert_file = /etc/ssl/certs/server.crt
smtp_tls_CAfile = /etc/ssl/certs/CAcert_chain.pem

# Misc TLS
tls_random_source = dev:/dev/urandom

[...]
/etc/init.d/postfix restart

Dann SysCP aufrufen…

https://domain.. /syscp/

…und den Anweisungen unter Server -> Konfiguration folgen…

Spamassassin
apt-get install spamassassin libmail-spf-query-perl libmailtools-perl libnet-dns-perl dcc-client libdbi-perl libio-socket-ssl-perl libnet-ident-perl libnet-perl pyzor razor spamc

/etc/default/spamassassin:

[...]
ENABLED=1
[...]
#OPTIONS="--create-prefs --max-children 5 --helper-home-dir"
OPTIONS="--create-prefs --max-children 5 -q -x -u vmail"
[...]
NICE="--nicelevel 10"
[...]
/etc/init.d/spamassassin restart


ClamAV

apt-get update

apt-get install clamav clamav-daemon clamav-freshclam arj unzoo lha unrar

Maildrop

Änderungen:

https://forum.syscp.org/index.php?topic=3082.0

etch mit maildrop hat seine config in /etc/ nicht in /etc/courier

http://syscp-forum.org/index.php/topic,2345.0.html Problem: Die Userfilter und der Virenscanner wird nicht verwendet

Die Returncodes von
/var/www/syscp/scripts/modules/maildrop/getsettings.php scheinen nicht richtig gesetzt zu werden. (Nebenbei bemerkt: Bei Etch ist PHP5 Standard. Daher müsste die erste Zeile >>#! /usr/bin/php<< lauten. Nicht php4.)

Neues Shell Script, um die Einstellungen aus der DB zu holen: /usr/local/syscp/maildrop/getsettings.sh

https://forum.syscp.org/index.php?topic=3081.0
wegen des Erstellens des Ordners, gibts ein Problem in der default config, wofür ich noch keine schöne Lösung fand,

apt-get update

apt-get install maildrop

/etc/maildropmysql.config:

hostname            127.0.0.1
socket              /var/run/mysqld/mysqld.sock
port                3306
database            syscp
dbuser              syscp
dbpw                MYSQL_PASSWORD
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         100000000
#quota_field        quota
# unused for now, but needs to be a valid field.
mailstatus_field    postfix
where_clause        AND postfix = 'Y'

„MYSQL_PASSWORD“ ersetzen

chmod 600 /etc/maildropmysql.config
chown vmail.vmail /etc/maildropmysql.config

/etc/maildroprc

#########################################################
# 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 username = '$LOGNAME';"
                   |mysql -u syscp -p"MYSQL_PASSWORD" syscp -h 127.0.0.1 | grep @`

# 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"
}

#########################################################
#
# 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"
}

„MYSQL_PASSWORD“ ersetzen

mkdir -p /usr/local/syscp/maildrop

/usr/local/syscp/maildrop/getsettings.sh:

#!/bin/bash

#MySQL Zugangsdaten
user=syscp;
password=MYSQL_PASSWORD;
host=127.0.0.1;
db=syscp;
###

email=$1;
domain=`echo $email | sed -e 's/.*@//'`;

select=$(mysql $db -u$user -p$password -h$host -s -N -e
       "SELECT CONCAT_WS('',virus,spam) FROM modules_maildrop where email in
        ('$email','@$domain') order by length(email) desc LIMIT 1")
if [[ "" == "$select" ]]; then
  select=$(mysql $db -u$user -p$password -h$host -s -N -e
           "SELECT CONCAT_WS('',virus,spam) FROM modules_maildrop
            WHERE email='%GLOBAL'")
fi

case "$select" in
  "YY" | "yy" )
      exit 3;
  ;;

  "YN" | "yn" )
  exit 2;
  ;;

  "NY" | "ny" )
  exit 1;
  ;;

  *)
  exit 0;
  ;;
esac

„MYSQL_PASSWORD“ ersetzen

chmod 700 /usr/local/syscp/maildrop/getsettings.sh
chown vmail.vmail /usr/local/syscp/maildrop/getsettings.sh

hier statt 600 – 700 als Rechte eintragen ansonsten liefert das Script 126 statt 1,2,3 oder 0 zurück

Module für Syscp

Einfach Herunterladen auspacken im Syscp Verzeichnis und die SQL Anweisungen in der Datenbank ausführen.

Maildrop SysCP-Modul

SA-Settings SysCP-Modul

Postfix-Anpassungen

/etc/postfix/main.cf:

[…]

# use this for virtual delivery / fuer die Verwendung ohne Maildrop
#virtual_transport = virtual
#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
[...]

Spamassassin-Anpassungen ¶

/etc/default/spamassassin:

[...]
# Change to one to enable spamd
ENABLED=1
[...]
# Default options for use with spamassassin
#OPTIONS="--create-prefs --max-children 5 --helper-home-dir"

# My options for use with spamc and maildrop
OPTIONS="--create-prefs --max-children 5 -q -x -u vmail"
[...]

/etc/init.d/spamassassin restart

ClamAV Anpassungen

/usr/bin/clamscan.sh:

#!/bin/bash
# Created by Tom Walsh, slim at ala.net
# slightly modified by Wolfgang Ziegler, nuppla at gmx.at

RUN=clamscan
# Enable this line, if you are using the clamav-daemon.
# RUN=clamdscan

#start
MSG=$(cat /proc/self/fd/0) # stdin -> $MSG
SCAN=$(echo "$MSG" | $RUN - --stdout --disable-summary)
EXIT="$?"
VIRUS=$(echo "$SCAN" | awk '{print $2}')
SUBJECT=$(echo "$MSG" | reformail -x Subject:)

if [ "$EXIT" == "1" ]; then
  SUBJECT="**VIRUS** [$VIRUS] $SUBJECT"
  MSG=$(echo "$MSG" | reformail -i"X-Virus-Status: INFECTED")
  MSG=$(echo "$MSG" | reformail -i"Subject: $(echo "$SUBJECT")")
else
  MSG=$(echo "$MSG" | reformail -i"X-Virus-Status: CLEAN")
fi

echo "$MSG"
exit 0
chown vmail.vmail /usr/bin/clamscan.sh
chmod 0755 /usr/bin/clamscan.sh

Bei Debian Etch braucht Maildrop nicht mehr gepatched werden. Es müssen nur die Rechte geändert werden:

chmod +x /var/run/courier/authdaemon

Die Scripte in /etc/cron.d musten angepasst werden (syscp und php5)  wegen Fehlermeldungen.

Ich habe dann postgrey installiert und  eingebaut.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.