Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:postfix_amavis_mailzu_installieren

Postfix AMaViS MailZu installieren

MailZu ist eine einfach und übersichtlich zu Bedienende Web-Anwendung zur Verwaltung der AMaViS (A MAil Virus Scanner) - Quarantäne.

:!: HINWEIS - Die Frage ob eine Quarantäne sinnvoll ist, soll an dieser Stelle NICHT gestellt werden !

Postfix AMaViS MailZu herunterladen

Bevor mit der Installation von MailZu begonnen werden kann, sollte die „aktuelle“ Version von MailZu - Download heruntergeladen werden.

Die hier verwendete und besprochene Version ist die Version MailZu_0.8RC3.tar.gz.

Postfix AMaViS MailZu installieren

Nach dem herunterladen einer Version von MailZu in z.B. das Verzeichnis /tmp auf den lokalen Rechner, sollte sich folgende Datei

MailZu_0.8RC3.tar.gz
im Verzeichnis /tmp befinden.

Das heruntergeladene Archiv mit dem Namen MailZu_0.8RC3.tar.gz kann mit folgendem Befehl entpackt werden:

$ tar xvfz MailZu_0.8RC3.tar.gz

Anschließend sollte sich ein Verzeichnis mit dem Namen MailZu_0.8RC3 im Verzeichnis /tmp befinden:

# ll /tmp/
...
drwxr-xr-x 10   1000   1000   4096 Jun 14  2007 MailZu_0.8RC3
-rw-r--r--  1 user   user   543781 Jun 14  2007 MailZu_0.8RC3.tar.gz
...

Abschliessend kann das heruntergeladene Archiv MailZu_0.8RC3.tar.gz mit folgendem Befehl gelöscht werden:

$ rm /tmp/MailZu_0.8RC3.tar.gz

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root zu werden geben Sie bitte folgenden Befehl ein:

$ su -
Password: 

Postfix AMaViS MailZu Konfiguration Webserver

Hier soll die Konfiguration eines virtuellen Host für den Apache HTTP Server beschrieben werden. Der Aufruf von MailZu soll über die URL

ermöglicht werden.

:!: Falls Sie noch keine Erfahrungen mit virtuellen Hosts in Verbindung mit dem Apache HTTP Server haben sollten, lesen Sie bitte die Dokumentation des Apache HTTP Server Projektes, da hier nur die grundlegenden Schritte erläutert werden.

Falls noch nicht geschehen wird im Verzeichnis /etc/httpd/conf.d eine Datei mit dem Namen vhosts.conf erstellt. Der Inhalt dieser Datei sollte minimal für einen virtuellen Host für myAmavis wie folgt aussehen:

# This configuration file enables the vhosts to this
# Server
#
 
NameVirtualHost *:80
 
#
# mailzu.tachtler.net
#
<VirtualHost *:80>
        ServerAdmin webmaster@tachtler.net
        ServerName mailzu.tachtler.net
        ServerAlias www.mailzu.tachtler.net
        ServerPath /
        DocumentRoot "/var/www/html/mailzu"
        <Directory "/var/www/html/mailzu">
                AllowOverride AuthConfig
                Order allow,deny
                Allow from all
        </Directory>
        DirectoryIndex index.php
        ErrorLog logs/mailzu_error.log
        CustomLog logs/mailzu_access.log combined
</VirtualHost>

Anschließend wird das Verzeichnis /tmp/MailZu_0.8RC3 nach /var/www/html/mailzu mit folgendem Befehl kopiert und gleichzeitig umbenannt:

# mv /tmp/MailZu_0.8RC3 /var/www/html/mailzu

Die Besitzrechte für das Verzeichnis /var/www/html/mailzu müssen noch korrigiert werden, was mit folgendem Befehl durchgeführt wird:

# chown -R root.apache /var/www/html/mailzu

Die Zugriffsrechte müssen ebenfalls noch für das Verzeichnis /var/www/html/mailzu noch korrigiert werden, was mit folgenden Befehlen durchgeführt wird:

# chmod -R o-rx /var/www/html/mailzu

Ein erneuter oder erster Start des Apache HTTP Server mit folgenden Befehl für eine erstmaligen Start

# service httpd start
oder einen erneuten Start des Apache HTTP Server mit folgendem Befehl
# service httpd restart
macht die oben beschriebenen Konfigurationen für den Apache HTTP Server wirksam.

Postfix AMaViS MailZu Konfiguration AMaViS

Nachfolgende Anpassung, neben der Fähigkeit, Daten in eine z.B. MySQL-Datenbank zu schreiben, an der Konfigurationsdatei

  • /etc/amavisd.conf

von AMaViS (A MAil Virus Scanner) sind notwendig, um MailZu in vollem Umfang nutzen zu können (nur relevanter Ausschnitt):

...
# Tachtler - MailZu
# default: $inet_socket_port = 10024;   # listen on this local TCP port(s)
# $inet_socket_port = [10024,10026];  # listen on multiple TCP ports
$inet_socket_port = [10024,9998];   # listen on this local TCP port(s)

# Tachtler - MailZu
$interface_policy{'9998'} = 'AM.PDP';
 
# Tachtler - MailZu
$policy_bank{'AM.PDP'} = {
  protocol => 'AM.PDP',
  inet_acl => [qw( 127.0.0.1 [::1] 192.168.0.1 )],
};
...
# Tachtler - MailZu
@lookup_sql_dsn =
  ( ['DBI:mysql:database=amavis;host=192.168.0.30;port=3306', 'amavis', 'geheim'] );
@storage_sql_dsn = @lookup_sql_dsn;  # none, same, or separate database
...
# Tachtler - MailZu
$virus_quarantine_method          = 'sql:virus-%m';
$spam_quarantine_method           = 'sql:spam-%m';
$banned_files_quarantine_method   = 'sql:banned-%m';
$bad_header_quarantine_method     = 'sql:badh-%m';
...

Anschließend ist eine Neustart von AMaViS (A MAil Virus Scanner) notwendig, was mit nachfolgendem Befehl durchgeführt werden kann:

# service amavisd restart

Die Ausgabe der Log-Datei /var/log/maillog - sollte dann in etwa wie folgt aussehen:

Apr 23 09:49:32 nss amavis[3265]: Net::Server: 2010/04/23-09:49:31 Server closing!
Apr 23 09:49:36 nss amavis[3382]: logging initialized, log level 2, syslog: amavis.mail
Apr 23 09:49:36 nss amavis[3382]: starting.  /usr/sbin/amavisd at amavis.tachtler.net amavisd-new-2.6.4 (20090625), Unicode aware, LANG="en_US.UTF-8"
Apr 23 09:49:36 nss amavis[3382]: user=112, EUID: 112 (112);  group=, EGID: 114 114 (114 114)
Apr 23 09:49:36 nss amavis[3382]: Perl version               5.008008
Apr 23 09:49:36 nss amavis[3382]: SpamControl: scanner SpamAssassin, module Amavis::SpamControl::SpamAssassin
Apr 23 09:49:37 nss amavis[3382]: INFO: SA version: 3.2.5, 3.002005, no optional modules: Image::Info Image::Info::GIF Image::Info::JPEG Image::Info::PNG Image::Info::TIFF
Apr 23 09:49:37 nss amavis[3382]: SpamControl: init_pre_chroot on SpamAssassin done
Apr 23 09:49:37 nss amavis[3383]: Net::Server: Process Backgrounded
Apr 23 09:49:37 nss amavis[3383]: Net::Server: 2010/04/23-09:49:37 Amavis (type Net::Server::PreForkSimple) starting! pid(3383)
Apr 23 09:49:37 nss amavis[3383]: Net::Server: Binding to UNIX socket file /var/amavis/amavisd.sock using SOCK_STREAM
Apr 23 09:49:37 nss amavis[3383]: Net::Server: Binding to TCP port 10024 on host 127.0.0.1
Apr 23 09:49:37 nss amavis[3383]: Net::Server: Binding to TCP port 9998 on host 127.0.0.1
Apr 23 09:49:37 nss amavis[3383]: Net::Server: Group Not Defined.  Defaulting to EGID '114 114'
Apr 23 09:49:37 nss amavis[3383]: Net::Server: User Not Defined.  Defaulting to EUID '112'
Apr 23 09:49:37 nss amavis[3383]: config files read: /etc/amavisd.conf
Apr 23 09:49:37 nss amavis[3383]: Module Amavis::Conf        2.207
Apr 23 09:49:37 nss amavis[3383]: Module Archive::Zip        1.30
Apr 23 09:49:37 nss amavis[3383]: Module BerkeleyDB          0.36
Apr 23 09:49:37 nss amavis[3383]: Module Compress::Zlib      2.02
Apr 23 09:49:37 nss amavis[3383]: Module Convert::TNEF       0.17
Apr 23 09:49:37 nss amavis[3383]: Module Convert::UUlib      1.12
Apr 23 09:49:37 nss amavis[3383]: Module Crypt::OpenSSL::RSA 0.25
Apr 23 09:49:37 nss amavis[3383]: Module DBD::mysql          4.013
Apr 23 09:49:37 nss amavis[3383]: Module DBI                 1.609
Apr 23 09:49:37 nss amavis[3383]: Module DB_File             1.814
Apr 23 09:49:37 nss amavis[3383]: Module Digest::MD5         2.36
Apr 23 09:49:37 nss amavis[3383]: Module Digest::SHA         5.47
Apr 23 09:49:37 nss amavis[3383]: Module Digest::SHA1        2.11
Apr 23 09:49:37 nss amavis[3383]: Module IO::Socket::INET6   2.51
Apr 23 09:49:37 nss amavis[3383]: Module MIME::Entity        5.420
Apr 23 09:49:37 nss amavis[3383]: Module MIME::Parser        5.420
Apr 23 09:49:37 nss amavis[3383]: Module MIME::Tools         5.420
Apr 23 09:49:37 nss amavis[3383]: Module Mail::DKIM::Signer  0.37
Apr 23 09:49:37 nss amavis[3383]: Module Mail::DKIM::Verifier 0.37
Apr 23 09:49:37 nss amavis[3383]: Module Mail::Header        1.77
Apr 23 09:49:37 nss amavis[3383]: Module Mail::Internet      1.77
Apr 23 09:49:37 nss amavis[3383]: Module Mail::SPF           v2.006
Apr 23 09:49:37 nss amavis[3383]: Module Mail::SpamAssassin  3.002005
Apr 23 09:49:37 nss amavis[3383]: Module Net::DNS            0.59
Apr 23 09:49:37 nss amavis[3383]: Module Net::Server         0.97
Apr 23 09:49:37 nss amavis[3383]: Module NetAddr::IP         4.027
Apr 23 09:49:37 nss amavis[3383]: Module Razor2::Client::Version 2.84
Apr 23 09:49:37 nss amavis[3383]: Module Socket6             0.19
Apr 23 09:49:37 nss amavis[3383]: Module Time::HiRes         1.9717
Apr 23 09:49:37 nss amavis[3383]: Module URI                 1.40
Apr 23 09:49:37 nss amavis[3383]: Module Unix::Syslog        1.1
Apr 23 09:49:37 nss amavis[3383]: Amavis::DB code      loaded
Apr 23 09:49:37 nss amavis[3383]: Amavis::Cache code   loaded
Apr 23 09:49:37 nss amavis[3383]: SQL base code        loaded
Apr 23 09:49:37 nss amavis[3383]: SQL::Log code        loaded
Apr 23 09:49:37 nss amavis[3383]: SQL::Quarantine      NOT loaded
Apr 23 09:49:37 nss amavis[3383]: Lookup::SQL code     loaded
Apr 23 09:49:37 nss amavis[3383]: Lookup::LDAP code    NOT loaded
Apr 23 09:49:37 nss amavis[3383]: AM.PDP-in proto code loaded
Apr 23 09:49:37 nss amavis[3383]: SMTP-in proto code   loaded
Apr 23 09:49:37 nss amavis[3383]: Courier proto code   NOT loaded
Apr 23 09:49:37 nss amavis[3383]: SMTP-out proto code  loaded
Apr 23 09:49:37 nss amavis[3383]: Pipe-out proto code  NOT loaded
Apr 23 09:49:37 nss amavis[3383]: BSMTP-out proto code NOT loaded
Apr 23 09:49:37 nss amavis[3383]: Local-out proto code loaded
Apr 23 09:49:37 nss amavis[3383]: OS_Fingerprint code  NOT loaded
Apr 23 09:49:37 nss amavis[3383]: ANTI-VIRUS code      loaded
Apr 23 09:49:37 nss amavis[3383]: ANTI-SPAM code       loaded
Apr 23 09:49:37 nss amavis[3383]: ANTI-SPAM-EXT code   NOT loaded
Apr 23 09:49:37 nss amavis[3383]: ANTI-SPAM-C code     NOT loaded
Apr 23 09:49:37 nss amavis[3383]: ANTI-SPAM-SA code    loaded
Apr 23 09:49:37 nss amavis[3383]: Unpackers code       loaded
Apr 23 09:49:37 nss amavis[3383]: DKIM code            loaded
Apr 23 09:49:37 nss amavis[3383]: Tools code           NOT loaded
Apr 23 09:49:37 nss amavis[3383]: Found $file            at /usr/bin/file
Apr 23 09:49:37 nss amavis[3383]: Found $altermime       at /usr/bin/altermime
Apr 23 09:49:37 nss amavis[3383]: Internal decoder for .mail
Apr 23 09:49:37 nss amavis[3383]: Internal decoder for .asc 
Apr 23 09:49:37 nss amavis[3383]: Internal decoder for .uue 
Apr 23 09:49:37 nss amavis[3383]: Internal decoder for .hqx 
Apr 23 09:49:37 nss amavis[3383]: Internal decoder for .ync 
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .F    at /usr/bin/unfreeze
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .Z    at /usr/bin/uncompress
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .gz   at /usr/bin/gzip -d
Apr 23 09:49:37 nss amavis[3383]: Internal decoder for .gz   (backup, not used)
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .bz2  at /usr/bin/bzip2 -d
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .lzo  at /usr/bin/lzop -d
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .rpm  at /usr/bin/rpm2cpio
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .cpio at /usr/bin/pax
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .tar  at /usr/bin/pax
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .deb  at /usr/bin/ar
Apr 23 09:49:37 nss amavis[3383]: Internal decoder for .zip 
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .7z   at /usr/bin/7za
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .rar  at /usr/bin/unrar
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .arj  at /usr/bin/arj
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .arc  at /usr/bin/nomarch
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .zoo  at /usr/bin/zoo
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .lha  at /usr/bin/lha
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .cab  at /usr/bin/cabextract
Apr 23 09:49:37 nss amavis[3383]: No decoder for       .tnef tried: tnef
Apr 23 09:49:37 nss amavis[3383]: Internal decoder for .tnef
Apr 23 09:49:37 nss amavis[3383]: Found decoder for    .exe  at /usr/bin/unrar; /usr/bin/lha; /usr/bin/arj
Apr 23 09:49:37 nss amavis[3383]: Using primary internal av scanner code for ClamAV-clamd
Apr 23 09:49:37 nss amavis[3383]: Found secondary av scanner ClamAV-clamscan at /usr/bin/clamscan
Apr 23 09:49:37 nss amavis[3383]: Creating db in /var/amavis/db/; BerkeleyDB 0.36, libdb 4.3
Apr 23 09:49:37 nss amavis[3383]: initializing Mail::SpamAssassin
Apr 23 09:49:37 nss amavis[3383]: SpamAssassin debug facilities: info
Apr 23 09:49:42 nss amavis[3383]: SpamAssassin loaded plugins: AWL, AutoLearnThreshold, Bayes, BodyEval, Check, DNSEval, HTMLEval, HTTPSMismatch, Hashcash, HeaderEval, ImageInfo, MIMEEval, MIMEHeader, Pyzor, Razor2, RelayEval, ReplaceTags, SPF, SpamCop, URIDNSBL, URIDetail, URIEval, VBounce, WLBLEval, WhiteListSubject
Apr 23 09:49:42 nss amavis[3383]: SpamControl: init_pre_fork on SpamAssassin done
Apr 23 09:49:42 nss amavis[3389]: TIMING [total 29 ms] - bdb-open: 29 (100%)100, rundown: 0 (0%)100
Apr 23 09:49:42 nss amavis[3389]: storage and lookups will use the same connection to SQL
Apr 23 09:49:42 nss amavis[3390]: TIMING [total 14 ms] - bdb-open: 14 (100%)100, rundown: 0 (0%)100
Apr 23 09:49:42 nss amavis[3390]: storage and lookups will use the same connection to SQL

:!: HINWEIS - Nachfolgende Zeilen sind entscheiden für den Start

...
Apr 23 09:49:37 nss amavis[3383]: Net::Server: Binding to TCP port 10024 on host 127.0.0.1
Apr 23 09:49:37 nss amavis[3383]: Net::Server: Binding to TCP port 9998 on host 127.0.0.1
...

Postfix AMaViS MailZu Konfiguration

Bevor mit der eigentlichen Konfiguration von MailZu begonnen werden kann, kann mit nachfolgendem Befehl eine MUSTER-Konfigurationsdatei als Vorlage für die Konfiguration als Ausgangsbasis kopiert werden :

# cp -a /var/www/html/mailzu/config/config.php.sample /var/www/html/mailzu/config/config.php

Zusätzlich ist mit nachfolgendem Befehl die Log-Datei /var/log/mailzu.log anzulegen:

# touch /var/log/mailzu.log

Anschließend müssen der Log-Datei /var/log/mailzu.log noch die entsprechenden Besitzrechte zugewiesen werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# chown apache.apache /var/log/mailzu.log

Änderungen bzw. Ergänzungen an der Konfiguratiosndatei

  • /var/www/html/mailzu/config/config.php

sind mit

// Tachtler
gekennzeichnet.

:!: HINWEIS - Allgemeiner Teil von /var/www/html/mailzu/config/config.php (Fortsetzung folgt):

<?php
/**
* This file sets all the configuration options
* All configuration options, such as colors,
*  text sizes, email addresses, etc.
*  are set in this file.
* @author Samuel Tran <stran2005@users.sourceforge.net>
* @author Brian Wong <bwsource@users.sourceforge.net>
* @author Jeremy Fowler <jfowler06@users.sourceforge.net>
* @version 04-03-07
* @package MailZu
*/
/***************************************
* MailZu                               *
* Version 0.8                          *
* http://www.mailzu.net                *
*                                      *
/***************************************/
/**
* Please refer to readme.html and LICENSE for any additional information
*
* Copyright (C) 2003 - 2007 MailZu 
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the 
* Free Software Foundation; either version 2 of the License, or (at your option) 
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT 
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with 
* this program; if not, write to the 
* Free Software Foundation, Inc.
* 59 Temple Place
* Suite 330
* Boston, MA
* 02111-1307
* USA
*/
 
/*************************************************/
/*                Instructions                   *
**************************************************
* + All words (string values) must               *
*  be enclosed in quotation marks                *
*  Numbers must not                              *
*                                                *
* + Default values are                           *
*  given in square brackets []                   *
/*************************************************/
 
/**********
* Amavisd-new Settings
*
* The following settings must correspond to your amavisd-new setup
* 
*
***********/
 
// Amavisd-new AM.PDP port
// Since the port number can not be stored in the database
// all instances of amavisd-new must use the same AM.PDP port 
$conf['amavisd']['spam_release_port'] = '9998';
 
// Database type to be used by PEAR [mysql]
/* Options are:
        mysql  -> MySQL
        pgsql  -> PostgreSQL
        ibase  -> InterBase
        msql   -> Mini SQL
        mssql  -> Microsoft SQL Server
        oci8   -> Oracle 7/8/8i
        odbc   -> ODBC (Open Database Connectivity)
        sybase -> SyBase
        ifx    -> Informix
        fbsql  -> FrontBase
*/
$conf['db']['dbType'] = 'mysql';
 
// Database user who can access the amavisd database
// Tachtler
// default: $conf['db']['dbUser'] = 'user';
$conf['db']['dbUser'] = 'amavis';
 
// Password for above user to access the amavisd database
// Tachtler
// default: $conf['db']['dbPass'] = 'pass';
$conf['db']['dbPass'] = 'geheim';
 
// Name of database
// Tachtler
// default: $conf['db']['dbName'] = 'dbname';
$conf['db']['dbName'] = 'amavis';
 
// Database host specification (hostname[:port]) [localhost]
// Tachtler
// default: $conf['db']['hostSpec'] = 'hostname.example.com:3306';
$conf['db']['hostSpec'] = '127.0.0.1:3306';
 
// If using the bytea or BLOB mail_text quarantine type set to
// True. Since amavisd-2.4.4.
// Tachtler
// default: $conf['db']['binquar'] = false;
$conf['db']['binquar'] = true;
...

:!: HINWEIS - Je nachdem welche Authentifizierungsmethode verwendet werden soll, muss der nachfolgende Block ausgewählt werden, hier soll die Authentifizierung via imap erfolgen (Fortsetzung folgt):

...
/**********
* Authentication Settings
*
* Choose your authentication method ($conf['auth']['serverType']),
* Then fill in the necessary auth information for corresponding method
*
***********/
// Available authentication methods
/* Options are:
        ldap -> Standard LDAP server, e.g. OpenLDAP
        ad   -> MS Active Directory
        sql  -> PHP PEAR compatible database
        exchange  -> MS Exchange 5.5
        imap  -> IMAP protocol
*/
// Tachtler
// default: $conf['auth']['serverType'] = 'ldap';
$conf['auth']['serverType'] = 'imap';
...
/*** IMAP Authentication Settings ***/
// List of IMAP servers and ports (e.g.: 10.1.1.20:143)
// Tachtler
// default: $conf['auth']['imap_hosts'] = array( 'imaphost.example.com:143' );
$conf['auth']['imap_hosts'] = array( 'mx1.tachtler.net:143' );
 
// IMAP type
/* Options are:
        imap     -> default
        imaptls  -> do not do start-TLS to encrypt the session, even with servers that support it
        imapssl  -> use the Secure Socket Layer to encrypt the session
        imapcert -> use the Secure Socket Layer to encrypt the session,
                    do not validate certificates from TLS/SSL server, needed if server uses self-signed certificates
*/
// Tachtler
// $conf['auth']['imap_type'] = 'imapssl';
$conf['auth']['imap_type'] = 'imaptls';
 
// Domain name part of the email address, (e.g.: example.com)
// Tachtler
// default: $conf['auth']['imap_domain_name'] = 'example.com';
$conf['auth']['imap_domain_name'] = 'tachtler.net';
...

:!: HINWEIS - Nachfolgende der Berechtigungsteil der Konfigurationsdatei (Fortsetzung folgt):

...
/*** Permission listings ****/
/* The items you put in the admin lists
*  must be the same as the login ID.
*  Example:
*  If you login as 'userid' then..
*  conf['auth']['s_admins'] = array ('userid','userid2');
*
*  OR
*
*  If you login as 'userid@example.com' then...
*  conf['auth']['s_admins'] = array ('userid@example.com',
*                                    'userid2@example.com'
*                                   );
*
*/
 
// List of Super Admins
// Super Admins can do anything mail admins can plus
// change settings
// Tachtler
// default: $conf['auth']['s_admins'] = array ('user1', 'user2');
$conf['auth']['s_admins'] = array ('adminuser');
 
// List of Mail Admins
// Mail Admins can see other users' spam and attachments
// and can perform any action on them
// Tachtler
// default: $conf['auth']['m_admins'] = array ();
$conf['auth']['m_admins'] = array ('adminuser');
 
// User login restriction (Does not affect admins)
// If set to true, users will not be able to login. This is if you do
// not want users to view their quarantine, yet only have admins to
// view quarantines. 
$conf['auth']['login_restriction'] = false;
 
// User restriction exemption
// List of users still allowed to login even if
// $conf['auth']['login_restriction'] = true
//
// Tachtler
// default: $conf['auth']['restricted_users'] = array('user1', 'user2');
$conf['auth']['restricted_users'] = array('klaus');
...

:!: HINWEIS - Zum Abschluß der Verschiedenes-Teil der Konfigurationsdatei:

/**********
* Miscellaneous Settings
*
* The following settings must correspond to your amavisd-new setup
*
***********/
 
// Image to appear at the top of each page ['img/mailzu.gif']
// Leave this string empty if you are not going to use an image
// Specifiy link as 'directory/filename.gif'
$conf['ui']['logoImage'] = 'img/mailzu.gif';
 
// Welcome message show at login page ['Welcome to MailZu!']
$conf['ui']['welcome'] = 'Welcome to MailZu!';
 
// The full url to the root directory of MailZu
// Please do not include the trailing slash
// Tachtler
// $conf['app']['weburi'] = 'https://mailzuhost.example.com/mailzu';
$conf['app']['weburi'] = 'http://mailzu.tachtler.net/mailzu';
 
// How to send email ['mail']
/* Options are:
        'mail' for PHP default mail
        'smtp' for SMTP
        'sendmail' for sendmail
        'qmail' for qmail MTA
*/
// Tachtler
// $conf['app']['emailType'] = 'mail';
$conf['app']['emailType'] = 'smtp';
 
// SMTP email host address []
// This is only required if emailType is SMTP
// Tachtler
// default: $conf['app']['smtpHost'] = '';
$conf['app']['smtpHost'] = 'mx1.tachtler.net';
 
// SMTP port [25]
// This is only required if emailType is SMTP
$conf['app']['smtpPort'] = 25;
 
// Path to sendmail ['/usr/sbin/sendmail']
// This only needs to be set if the emailType is 'sendmail'
$conf['app']['sendmailPath'] = '/usr/sbin/sendmail';
 
// Path to qmail ['/var/qmail/bin/sendmail']
// This only needs to be set if the emailType is 'qmail'
$conf['app']['qmailPath'] = '/var/qmail/bin/sendmail';
 
// Support for recipient delimiters
// Enter the character used as a delimiter for your site
// or leave empty
// $conf['recipient_delimiter'] = '+';
// Tachtler
// default: $conf['recipient_delimiter'] = '';
$conf['recipient_delimiter'] = '+';
 
// The email addresses of the support staff and/or administrator
// An email is sent to these addresses when a user reports an error
// or clicks the "Email Administrator" link
// Tachtler
// default: $conf['app']['adminEmail'] = array('support@example.com');
$conf['app']['adminEmail'] = array('postmaster@tachtler.net');
 
// Email admin upon Release Request
// When users try to release a banned file a request is sent to an
// admin. Admins can always look at 'Pending Requests' in the MailZu
// interface regardless. 
//
// $conf['app']['notifyAdmin'] = 1;
// Tachtler
// default: $conf['app']['notifyAdmin'] = 0;
$conf['app']['notifyAdmin'] = 1;
 
// Show the "Email Administrator" link for users
// If you have a large userbase, you may not want users to have the
// capability to just email the admin
// Note: The "Report Error" link is still available regardless
// of this option. This link is only visible if a fatal error occurs
// with releasing attachments. Default is 1 (show link).
//
// $conf['app']['showEmailAdmin'] = 0;
$conf['app']['showEmailAdmin'] = 1;
 
// Site Quarantine Summary display toggle.
// Enable and display the "Site Quarantine Summary" link for admins.
// Viewing the site summary may be an expensive database query.
// Large sites may want to turn this off.
// $conf['app']['siteSummary'] = 1
$conf['app']['siteSummary'] = 1;
 
// Show Site Quarantine in search only mode if set to 1.
// No message is displayed when clicking on 'Site quarantine'.
// Keep the default for for large sites.
// $conf['app']['searchOnly'] = 1
$conf['app']['searchOnly'] = 1;
 
// The default language code.  This must be included in the language list in
// langs.php
$conf['app']['defaultLanguage'] = 'en_US';
 
// Display the choice for language selection during the login screen if set to 1       
// Otherwise set it to 0
// Default is 1
$conf['app']['selectLanguage'] = '1';
 
// If you are running PHP in safe mode, set this value to 1.
// This toggles if we use the included Pear DB and Mail_Mime libraries included
// with this distribution
$conf['app']['safeMode'] = 0;
 
// View time in 12 or 24 hour format [12]
// Only acceptable values are 12 and 24 (if an invalid number is set, 12 hour
// time will be used)
// Tachtler
// default: $conf['app']['timeFormat'] = 12;
$conf['app']['timeFormat'] = 24;
 
// Title of application ['MailZu']
// Will be used for page titles and in 'From' field of email responses
$conf['app']['title'] = 'MailZu';
 
// If we should log system activity or not [0]
// Can be 0 (for no) and 1 (for yes)
$conf['app']['use_log'] = 1;
 
// If we should log additional debug information
$conf['app']['debug'] = 0;
 
// Directory/file for log ['/var/log/mailzu.log']
// Specify as /directory/filename.extension
$conf['app']['logfile'] = '/var/log/mailzu.log';
 
// Maximum number of messages displayed per page
$conf['app']['displaySizeLimit'] = 50;
 
// Allow users to view quarantined Bad Header messages
// Bad headers are treated like spam and released
// $conf['app']['allowBadHeaders'] = 0
$conf['app']['allowBadHeaders'] = 0;
 
// Allow users to view quarantined Viruses (Dangerous)
// Virues are treated like Banned files and are placed 
// in the Pending Requests and require Admin release
// $conf['app']['allowViruses'] = 0
$conf['app']['allowViruses'] = 0;
 
// Allow users to search by Mailid
// $conf['app']['allowMailid'] = 0
$conf['app']['allowMailid'] = 0;
 
include_once('init.php');
?>

Abschließend die komplette Konfigurationsdatei:

<?php
/**
* This file sets all the configuration options
* All configuration options, such as colors,
*  text sizes, email addresses, etc.
*  are set in this file.
* @author Samuel Tran <stran2005@users.sourceforge.net>
* @author Brian Wong <bwsource@users.sourceforge.net>
* @author Jeremy Fowler <jfowler06@users.sourceforge.net>
* @version 04-03-07
* @package MailZu
*/
/***************************************
* MailZu                               *
* Version 0.8                          *
* http://www.mailzu.net                *
*                                      *
/***************************************/
/**
* Please refer to readme.html and LICENSE for any additional information
*
* Copyright (C) 2003 - 2007 MailZu
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the
* Free Software Foundation, Inc.
* 59 Temple Place
* Suite 330
* Boston, MA
* 02111-1307
* USA
*/
 
/*************************************************/
/*                Instructions                   *
**************************************************
* + All words (string values) must               *
*  be enclosed in quotation marks                *
*  Numbers must not                              *
*                                                *
* + Default values are                           *
*  given in square brackets []                   *
/*************************************************/
 
/**********
* Amavisd-new Settings
*
* The following settings must correspond to your amavisd-new setup
*
*
***********/
 
// Amavisd-new AM.PDP port
// Since the port number can not be stored in the database
// all instances of amavisd-new must use the same AM.PDP port
$conf['amavisd']['spam_release_port'] = '9998';
 
// Database type to be used by PEAR [mysql]
/* Options are:
        mysql  -> MySQL
        pgsql  -> PostgreSQL
        ibase  -> InterBase
        msql   -> Mini SQL
        mssql  -> Microsoft SQL Server
        oci8   -> Oracle 7/8/8i
        odbc   -> ODBC (Open Database Connectivity)
        sybase -> SyBase
        ifx    -> Informix
        fbsql  -> FrontBase
*/
$conf['db']['dbType'] = 'mysql';
 
// Database user who can access the amavisd database
// Tachtler
// default: $conf['db']['dbUser'] = 'user';
$conf['db']['dbUser'] = 'amavis';
 
// Password for above user to access the amavisd database
// Tachtler
// default: $conf['db']['dbPass'] = 'pass';
$conf['db']['dbPass'] = 'geheim';
 
// Name of database
// Tachtler
// default: $conf['db']['dbName'] = 'dbname';
$conf['db']['dbName'] = 'amavis';
 
// Database host specification (hostname[:port]) [localhost]
// Tachtler
// default: $conf['db']['hostSpec'] = 'hostname.example.com:3306';
$conf['db']['hostSpec'] = '192.168.0.30:3306';
 
// If using the bytea or BLOB mail_text quarantine type set to
// True. Since amavisd-2.4.4.
// Tachtler
// default: $conf['db']['binquar'] = false;
$conf['db']['binquar'] = true;
 
/**********
* Authentication Settings
*
* Choose your authentication method ($conf['auth']['serverType']),
* Then fill in the necessary auth information for corresponding method
*
***********/
// Available authentication methods
/* Options are:
        ldap -> Standard LDAP server, e.g. OpenLDAP
        ad   -> MS Active Directory
        sql  -> PHP PEAR compatible database
        exchange  -> MS Exchange 5.5
        imap  -> IMAP protocol
*/
// Tachtler
// default: $conf['auth']['serverType'] = 'ldap';
$conf['auth']['serverType'] = 'imap';
 
 
/*** LDAP Authentication Settings ***/
// List of LDAP servers
$conf['auth']['ldap_hosts'] = array( 'ldaphost.example.com' );
// if set to true, LDAP connection over SSL (PHP 4.0.4 minimum)
// if set to false or not set, unencrypted LDAP connection on port 389
$conf['auth']['ldap_ssl'] = false;
 
// LDAP base dn, e.g. 'dc=example,dc=com'
$conf['auth']['ldap_basedn'] = 'dc=example,dc=org';
 
// LDAP attribute used for the RDN to identify a person
// For instance if the DN for a given user is uid=joesmith,ou=people,dc=example,dc=com
// the attribute would be 'uid'
$conf['auth']['ldap_user_identifier'] = 'uid';
 
// Container where all users are kept, e.g. 'ou=people'
// If you have users in multiple containers, leave this option blank.
// In this particular case you will need to allow anonymous binding
// or specify a search user/password to bind with
//$conf['auth']['ldap_user_container'] = 'ou=people';
$conf['auth']['ldap_user_container'] = '';
 
// LDAP attribute used as login, e.g. 'uid', 'mail' or 'uidNumber'
$conf['auth']['ldap_login'] = 'uid';
 
// LDAP attribute used as name for the welcome message, e.g. 'givenName', 'cn' or 'displayName'
$conf['auth']['ldap_name'] = 'givenName';
 
// LDAP mail attribute(s) used as the final recipient address
// Could be the actual mail attribute or another attribute
// (in the latter case look for the "%m" token in the ldap query filter in amavisd.conf)
$conf['auth']['ldap_mailAttr'] = array('mailRoutingAddress');
 
// If $conf['auth']['ldap_login'] is different from 'uid', we need to determine
// corresponding 'uid' by binding anonymously or with the user defined below.
// Leave blank for anonymous binding.
$conf['auth']['ldap_searchUser'] = '';
$conf['auth']['ldap_searchPassword'] = '';
 
 
/*** Active Directory Authentication Settings ***/
// List of AD Domain controllers
$conf['auth']['ad_hosts'] = array( 'dc1.example.com' );
// if set to true, LDAP connection over SSL (PHP 4.0.4 minimum)
// if set to false or not set, unencrypted LDAP connection on port 389
$conf['auth']['ad_ssl'] = false;
 
// AD base dn, e.g. 'dc=example,dc=com'
$conf['auth']['ad_basedn'] = 'dc=example,dc=com';
 
// AD domain, e.g. 'example.com'
$conf['auth']['ad_domain'] = 'example.com';
 
// AD attribute used to identify a person
$conf['auth']['ad_user_identifier'] = 'samaccoutname';
 
// AD attribute used as login, e.g. 'samaccountname' or 'mail'
$conf['auth']['ad_login'] = 'samaccountname';
 
// AD attribute used as name for the welcome message, e.g. 'givenName', 'cn' or 'displayName'
$conf['auth']['ad_name'] = 'givenName';
 
// AD mail attribute(s) used as the final recipient address
// Could be the actual mail attribute or another attribute
// (in the latter case look for the "%m" token in the ldap query filter in amavisd.conf)
// $conf['auth']['ad_mailAttr'] = array('mail'); // old
// For accounts with multiple email address aliases use proxyAddresses
$conf['auth']['ad_mailAttr'] = array('proxyAddresses');
 
// If $conf['auth']['ad_login'] is different from 'samaccountname', we need to determine
// corresponding 'samaccountname' by binding with the user defined below.
// Ad does not support anonymous bind
$conf['auth']['ad_searchUser'] = 'manager';
$conf['auth']['ad_searchPassword'] = 'secret';
 
 
/*** Database Authentication Settings ***/
// Database type to be used by PEAR
/* Options are:
        mysql  -> MySQL
        pgsql  -> PostgreSQL
        ibase  -> InterBase
        msql   -> Mini SQL
        mssql  -> Microsoft SQL Server
        oci8   -> Oracle 7/8/8i
        odbc   -> ODBC (Open Database Connectivity)
        sybase -> SyBase
        ifx    -> Informix
        fbsql  -> FrontBase
*/
$conf['auth']['dbType'] = 'mysql';
 
// Database host specification (hostname[:port]) [localhost]
$conf['auth']['dbHostSpec'] = '';
 
// Database user who can access the auth database
$conf['auth']['dbUser'] = '';
 
// Password for above user to auth database
$conf['auth']['dbPass'] = '';
 
// Name for auth database
$conf['auth']['dbName'] = '';
 
// Name for auth table that contains usernames and passwords
$conf['auth']['dbTable'] = '';
 
// Name of the Username field of the SQL table
$conf['auth']['dbTableUsername'] = '';
 
// Name of the password field of the SQL table
$conf['auth']['dbTablePassword'] = '';
 
// Name of the 'first name' or 'full name' field of the SQL table
// This is used for the welcome message
// If such a field does not exist, leave it blank
$conf['auth']['dbTableName'] = '';
 
// Name of the 'mail address' field of the SQL table
$conf['auth']['dbTableMail'] = '';
 
// Hash configuration
// true   = passwords are md5 encrypted in database
// false  = passwords are cleartext in database
$conf['auth']['dbIsMd5'] = true;
 
 
/*** Exchange 5.5 Authentication Settings ***/
// Exchange 5.5 server host and IMAP port (e.g.: 10.1.1.20:143)
$conf['auth']['exch_host'] = '';
 
// Exchange's LDAP server, it usually has the same IP as the Exchange server (e.g.: ldap://10.1.1.20)
$conf['auth']['exch_ldap'] = '';
 
// Exchange default NT domain
$conf['auth']['exch_domain'] = '';
 
 
/*** IMAP Authentication Settings ***/
// List of IMAP servers and ports (e.g.: 10.1.1.20:143)
// Tachtler
// default: $conf['auth']['imap_hosts'] = array( 'imaphost.example.com:143' );
$conf['auth']['imap_hosts'] = array( '192.168.0.80:143' );
 
// IMAP type
/* Options are:
        imap     -> default
        imaptls  -> do not do start-TLS to encrypt the session, even with servers that support it
        imapssl  -> use the Secure Socket Layer to encrypt the session
        imapcert -> use the Secure Socket Layer to encrypt the session,
                    do not validate certificates from TLS/SSL server, needed if server uses self-signed certificates
*/
// Tachtler
// $conf['auth']['imap_type'] = 'imapssl';
$conf['auth']['imap_type'] = 'imaptls';
 
// Domain name part of the email address, (e.g.: example.com)
// Tachtler
// default: $conf['auth']['imap_domain_name'] = 'example.com';
$conf['auth']['imap_domain_name'] = 'tachtler.net';
 
 
/**
* End of Authentication Settings
*/
 
/*** Permission listings ****/
/* The items you put in the admin lists
*  must be the same as the login ID.
*  Example:
*  If you login as 'userid' then..
*  conf['auth']['s_admins'] = array ('userid','userid2');
*
*  OR
*
*  If you login as 'userid@example.com' then...
*  conf['auth']['s_admins'] = array ('userid@example.com',
*                                    'userid2@example.com'
*                                   );
*
*/
 
// List of Super Admins
// Super Admins can do anything mail admins can plus
// change settings
// Tachtler
// default: $conf['auth']['s_admins'] = array ('user1', 'user2');
$conf['auth']['s_admins'] = array ('admin');
 
// List of Mail Admins
// Mail Admins can see other users' spam and attachments
// and can perform any action on them
// Tachtler
// default: $conf['auth']['m_admins'] = array ();
$conf['auth']['m_admins'] = array ('admin');
 
// User login restriction (Does not affect admins)
// If set to true, users will not be able to login. This is if you do
// not want users to view their quarantine, yet only have admins to
// view quarantines.
$conf['auth']['login_restriction'] = false;
 
// User restriction exemption
// List of users still allowed to login even if
// $conf['auth']['login_restriction'] = true
//
// Tachtler
// default: $conf['auth']['restricted_users'] = array('user1', 'user2');
$conf['auth']['restricted_users'] = array('klaus');
 
/**********
* Miscellaneous Settings
*
* The following settings must correspond to your amavisd-new setup
*
***********/
 
// Image to appear at the top of each page ['img/mailzu.gif']
// Leave this string empty if you are not going to use an image
// Specifiy link as 'directory/filename.gif'
$conf['ui']['logoImage'] = 'img/mailzu.gif';
 
// Welcome message show at login page ['Welcome to MailZu!']
$conf['ui']['welcome'] = 'Welcome to MailZu!';
 
// The full url to the root directory of MailZu
// Please do not include the trailing slash
// Tachtler
// $conf['app']['weburi'] = 'https://mailzuhost.example.com/mailzu';
$conf['app']['weburi'] = 'https://mailzu.tachtler.net/';
 
// How to send email ['mail']
/* Options are:
        'mail' for PHP default mail
        'smtp' for SMTP
        'sendmail' for sendmail
        'qmail' for qmail MTA
*/
// Tachtler
// default: $conf['app']['emailType'] = 'mail';
$conf['app']['emailType'] = 'smtp';
 
// SMTP email host address []
// This is only required if emailType is SMTP
// Tachtler
// default: $conf['app']['smtpHost'] = '';
$conf['app']['smtpHost'] = 'mx1.tachtler.net';
 
// SMTP port [25]
// This is only required if emailType is SMTP
$conf['app']['smtpPort'] = 25;
 
// Path to sendmail ['/usr/sbin/sendmail']
// This only needs to be set if the emailType is 'sendmail'
$conf['app']['sendmailPath'] = '/usr/sbin/sendmail';
 
// Path to qmail ['/var/qmail/bin/sendmail']
// This only needs to be set if the emailType is 'qmail'
$conf['app']['qmailPath'] = '/var/qmail/bin/sendmail';
 
// Support for recipient delimiters
// Enter the character used as a delimiter for your site
// or leave empty
// $conf['recipient_delimiter'] = '+';
// Tachtler
// default: $conf['recipient_delimiter'] = '';
$conf['recipient_delimiter'] = '+';
 
// The email addresses of the support staff and/or administrator
// An email is sent to these addresses when a user reports an error
// or clicks the "Email Administrator" link
// Tachtler
// default: $conf['app']['adminEmail'] = array('support@example.com');
$conf['app']['adminEmail'] = array('postmaster@tachtler.net');
 
// Email admin upon Release Request
// When users try to release a banned file a request is sent to an
// admin. Admins can always look at 'Pending Requests' in the MailZu
// interface regardless.
//
// $conf['app']['notifyAdmin'] = 1;
// Tachtler
// default: $conf['app']['notifyAdmin'] = 0;
$conf['app']['notifyAdmin'] = 1;
 
// Show the "Email Administrator" link for users
// If you have a large userbase, you may not want users to have the
// capability to just email the admin
// Note: The "Report Error" link is still available regardless
// of this option. This link is only visible if a fatal error occurs
// with releasing attachments. Default is 1 (show link).
//
// $conf['app']['showEmailAdmin'] = 0;
$conf['app']['showEmailAdmin'] = 1;
 
// Site Quarantine Summary display toggle.
// Enable and display the "Site Quarantine Summary" link for admins.
// Viewing the site summary may be an expensive database query.
// Large sites may want to turn this off.
// $conf['app']['siteSummary'] = 1
$conf['app']['siteSummary'] = 1;
 
// Show Site Quarantine in search only mode if set to 1.
// No message is displayed when clicking on 'Site quarantine'.
// Keep the default for for large sites.
// $conf['app']['searchOnly'] = 1
// Tachtler
// $conf['app']['searchOnly'] = 1;
$conf['app']['searchOnly'] = 0;
 
// The default language code.  This must be included in the language list in
// langs.php
// Tachtler
// $conf['app']['defaultLanguage'] = 'en_US';
$conf['app']['defaultLanguage'] = 'de';
 
// Display the choice for language selection during the login screen if set to 1
// Otherwise set it to 0
// Default is 1
$conf['app']['selectLanguage'] = '1';
 
// If you are running PHP in safe mode, set this value to 1.
// This toggles if we use the included Pear DB and Mail_Mime libraries included
// with this distribution
$conf['app']['safeMode'] = 0;
 
// View time in 12 or 24 hour format [12]
// Only acceptable values are 12 and 24 (if an invalid number is set, 12 hour
// time will be used)
// Tachtler
// default: $conf['app']['timeFormat'] = 12;
$conf['app']['timeFormat'] = 24;
 
// Title of application ['MailZu']
// Will be used for page titles and in 'From' field of email responses
$conf['app']['title'] = 'MailZu';
 
// If we should log system activity or not [0]
// Can be 0 (for no) and 1 (for yes)
$conf['app']['use_log'] = 1;
 
// If we should log additional debug information
$conf['app']['debug'] = 0;
 
// Directory/file for log ['/var/log/mailzu.log']
// Specify as /directory/filename.extension
$conf['app']['logfile'] = '/var/log/mailzu.log';
 
// Maximum number of messages displayed per page
// Tachtler
// default: $conf['app']['displaySizeLimit'] = 50;
$conf['app']['displaySizeLimit'] = 25;
 
// Allow users to view quarantined Bad Header messages
// Bad headers are treated like spam and released
// $conf['app']['allowBadHeaders'] = 0
$conf['app']['allowBadHeaders'] = 0;
 
// Allow users to view quarantined Viruses (Dangerous)
// Virues are treated like Banned files and are placed
// in the Pending Requests and require Admin release
// $conf['app']['allowViruses'] = 0
$conf['app']['allowViruses'] = 0;
 
// Allow users to search by Mailid
// $conf['app']['allowMailid'] = 0
$conf['app']['allowMailid'] = 0;
 
include_once('init.php');
?>

Postfix AMaViS MailZu Datenbank Bereinigung

Um zu verhindern, dass sich im Laufe der Zeit sehr viele Einträge in der Datenbank, hier eine MySQL-Datenbank ansammeln, kann via shell-Script diese regelmäßig be- bzw. gereinigt werden.

Dies kann mit nachfolgendem Script, welches von MailZu mitgebracht wird, durchgeführt werden. Das Script befindet sich im Verzeichnis unter:

  • /var/www/html/mailzu/scripts

und trägt den Namen

  • mz_db_clean.pl

Um das Script einsetzbar zu machen, sind nachfolgende Konfigurationen innerhalb des Script notwendig, welche durch den Kommentar

# Tachtler

gekennzeichnet sind:

Hier de notwendigen Konfigurationen von /var/www/html/mailzu/scripts/mz_db_clean.pl (komplettes Konfigurations-Skript):

#!/usr/bin/perl -w
 
use strict;
use Getopt::Long;
 
##### PLEASE CONFIGURE THIS SECTION ######
 
# Globals
# Set this array for database authentication
# Tachtler
# default: my(@storage_sql_dsn) = (
# default:         'DBI:Pg:database=dbname;host=host.example.org',
# default:         'user','password'
# default:                        );
my(@storage_sql_dsn) = (
        'DBI:mysql:database=amavis;host=localhost',
        'amavis','geheim'
                       );
 
# Set this to 1 if you are using the new database schema
# introduced with amavisd 2.4.0. Only do this if you also
# have the foreign key references between the tables and use
# time_iso as a real date type instead of a string.
# Tachtler
# default: my($new_dd) = 1; # 1 or undef
my($new_dd) = undef; # 1 or undef
 
# Purge old messages - One Week
my($interval) = time - 7*24*60*60;
# Purge incomplete messages - 1 hour
my($partial_interval) = time - 60*60;
 
# These variables only matter if $new_dd is set to 1
# The values for these variables must be syntactically
# correct for your database. This value is passed to
# the 'interval' keyword. Please check your database
# documentation
 
# PostgreSQL
# Tachtler
# default: my($new_interval) = '1 week';
# default: my($new_partial_interval) = '1 hour';
# MySQL
# Tachtler
# default: #my($new_interval) = '7 day';
# default: #my($new_partial_interval) = '1 hour';
my($new_interval) = '7 day';
my($new_partial_interval) = '1 hour';
 
# PostgreSQL specific options
# Should we VACUUM ANALYZE the database after the purge?
# Default is undef because we should be using autovacuum
my($postop_vacuum) = undef; # 1 or undef
 
##### END OF CONFIGURATION SECTION ######
 
# Options array
my(%opt);
 
my(@modules);
my(@missing);
 
my(@dsn) = split(/:/,$storage_sql_dsn[0],-1);
push(@modules, 'DBD::'.$dsn[1])  if uc($dsn[0]) eq 'DBI';
 
for my $m (@modules) {
  local($_) = $m;
  $_ .= /^auto::/ ? '.al' : '.pm'  if !/\.(pm|pl|al)\z/;
  s[::][/]g;
  eval { require $_ } or push(@missing, $m);
}
 
die "ERROR: MISSING module(s):\n" . join('', map { "  $_\n" } @missing) if @missing;
 
sub build_queries($) {
  my($dbtype) = shift;
  # Return a hash of queries to be run
  my(%query) = (
               # Old schema queries
               'del_d_flag' =>
                 'DELETE FROM msgrcpt ' .
                 'WHERE rs=\'D\'',
               'del_partial_msg' =>
                 'DELETE FROM msgs ' .
                 "WHERE time_num < $partial_interval " .
                 'AND content IS NULL',
               'del_old_mail_ids' =>
                 'DELETE FROM msgs ' .
                 "WHERE time_num < $interval",
               'del_msgs_mail_ids' =>
                 'DELETE FROM msgs ' .
                 'WHERE NOT EXISTS ' .
                 ' (SELECT 1 FROM msgrcpt ' .
                 '  WHERE msgrcpt.mail_id=msgs.mail_id)',
               'del_quarantine' =>
                 'DELETE FROM quarantine ' .
                 'WHERE NOT EXISTS '.
                 ' (SELECT 1 FROM msgs ' .
                 '  WHERE msgs.mail_id=quarantine.mail_id)',
               'del_msgrcpt' =>
                 'DELETE FROM msgrcpt ' .
                 'WHERE NOT EXISTS ' .
                 ' (SELECT 1 FROM msgs ' .
                 '  WHERE msgs.mail_id=msgrcpt.mail_id)',
 
               # New schema queries
               'del_d_flag_new' =>
                 'DELETE FROM msgs ' .
                 'WHERE mail_id IN ' .
                 '  (SELECT DISTINCT mail_id ' .
                 '   FROM msgrcpt WHERE rs=\'D\')',
 
               # Generic queries
               'del_maddr' =>
                 'DELETE FROM maddr ' .
                 'WHERE NOT EXISTS '  .
                 '  (SELECT sid FROM msgs WHERE sid=id) ' .
                 '   AND NOT EXISTS' .
                 '  (SELECT rid FROM msgrcpt WHERE rid=id)'
 
             );
 
  if ($dbtype eq 'pgsql') {
    $query{'vacuum_analyze'} = 'VACUUM ANALYZE';
    # New schema queries
    $query{'del_old_mail_ids_new'} = 'DELETE FROM msgs ' .
                                     'WHERE time_iso < now() ' .
                                     "- interval '$new_interval'";
    $query{'del_partial_msg_new'} = 'DELETE FROM msgs ' .
                                     'WHERE time_iso < now() ' .
                                     "- interval '$new_partial_interval' " .
                                     ' AND content IS NULL';
  }
 
  if ($dbtype eq 'mysql') {
    # New schema queries
    $query{'del_old_mail_ids_new'} = 'DELETE FROM msgs ' .
                                     'WHERE time_iso < UTC_TIMESTAMP() ' .
                                     "- interval $new_interval";
    $query{'del_partial_msg_new'} = 'DELETE FROM msgs ' .
                                     'WHERE time_iso < UTC_TIMESTAMP() ' .
                                     "- interval $new_partial_interval " .
                                     ' AND content IS NULL';
 
    # Old schema queries
    $query{'del_msgs_mail_ids'} = 'DELETE msgs FROM msgs ' .
                                  'LEFT JOIN msgrcpt USING(mail_id) ' .
                                  'WHERE msgrcpt.mail_id IS NULL';
    $query{'del_quarantine'} = 'DELETE quarantine FROM quarantine ' .
                               'LEFT JOIN msgs USING(mail_id) '.
                               'WHERE msgs.mail_id IS NULL';
    $query{'del_msgrcpt'} = 'DELETE msgrcpt FROM msgrcpt ' .
                            'LEFT JOIN msgs USING(mail_id) ' .
                            'WHERE msgs.mail_id IS NULL';
  }
 
  my(%post_query) = (
                'vacuum_analyze' => 'VACUUM ANALYZE'
                    );
 
  # Order of execution IS IMPORTANT!
  my(@query_order) = qw (del_d_flag del_partial_msg del_msgs_mail_ids
                         del_old_mail_ids del_quarantine del_msgrcpt
                         del_maddr
                        );
 
  @query_order = qw (del_d_flag_new del_partial_msg_new
                         del_old_mail_ids_new del_maddr
                        ) if $new_dd;
 
  my(@post_query_order);
  push(@post_query_order, 'vacuum_analyze') if $dbtype eq 'pgsql' && $postop_vacuum;
 
  return (\%query,\@query_order,\%post_query,\@post_query_order);
}
 
 
sub usage {
  print "Usage:\n";
  print "\tmz_db_clean.pl [--verbose|-v] [--database|-db <dbtype>]\n";
  print "\tmz_db_clean.pl --help|-h \n\n";
  print "\tThe database configuration parameter is REQUIRED!\n\n";
  print "\tPossible parameters for the \'--database\' option is \'mysql\'\n" .
        "\tand 'pgsql'.\n";
  exit;
}
 
sub main {
  Getopt::Long::Configure('no_ignore_case');
  GetOptions(\%opt, 'help|h', 'database|db=s', 'verbose|v',
            ) or exit(1);
  usage if $opt{help};
  usage if not $opt{database};
  my($dbh) = connect_to_sql(@storage_sql_dsn);
  my($query,$query_order,$p_query,$p_query_order) = build_queries($opt{database});
  my($sth_ref) = prepare_queries($dbh,$query,$p_query);
  my($result) = exec_queries($dbh,$sth_ref,$query,$p_query,
                             $query_order,$p_query_order
                            );
  print "Database cleanup successful\n" if $result;
  $dbh->disconnect;
}
 
sub exec_queries($$$$$) {
  my($dbh,$sth_ref,$query,$p_query,$query_o,$p_query_o) = @_;
  my($affected);
 
  $dbh->begin_work;
  eval {
    foreach (@$query_o) {
      if ($opt{verbose}) {
        print "Executing... " . localtime() . "\n";
        print $query->{$_} . "\n";
      }
      $affected = $sth_ref->{$_}->execute or die "Query '$_' did not execute";
      print "$affected rows affected\n" if $opt{verbose};
    }
  };
  if ($@ ne '') {
    $dbh->rollback;
    print "There was an error executing a query! $@\n" .
          "No records modified by database maintenance\n" .
          "Rollback complete.\n";
    return undef
  } else {
    $dbh->commit;
  }
 
  eval {
    foreach (@$p_query_o) {
      if ($opt{verbose}) {
        print "Executing... " . localtime() . "\n";
        print $p_query->{$_} . "\n";
      }
      $affected = $sth_ref->{$_}->execute or die "Query '$_' did not execute";
      print "$affected rows affected\n" if $opt{verbose};
    }
  };
  if ($@ ne '') {
    print "There was an error executing an optional query! $@\n" .
    return undef
  }
 
  return 1;
 
}
 
sub connect_to_sql(@) {
  my(@sql_dsn) = @_;
  my($dsn, $username, $password) = @sql_dsn;
  print "Connecting to SQL database server\n" if $opt{verbose};
  print "Trying dsn '$dsn'\n" if $opt{verbose};
  my($dbh) = DBI->connect($dsn, $username, $password,
#     {PrintError => 1, RaiseError => 0, Taint => 1, AutoCommit => 0} );
     {PrintError => 1, RaiseError => 0, Taint => 1} );
  if ($dbh) {
    print "Connection to '$dsn' succeeded\n" if $opt{verbose};
  } else {
    die "Unable to connect to '$dsn'!\n";
  }
  $dbh;
}
 
sub prepare_queries($$$) {
  my($dbh) = shift;
  my($query) = shift;
  my($p_query) = shift;
  my(%sths);
  foreach my $query_set ($query, $p_query) {
    foreach (keys %$query) {
      $sths{$_} = $dbh->prepare($query->{$_});
    }
  }
  \%sths
}
 
main;

:!: HIWEIS - Nachfolgend der Aufruf des Scripts mit möglichen Parametern

# /var/www/html/mailzu/scripts/mz_db_clean.pl -v -db mysql
Connecting to SQL database server
Trying dsn 'DBI:mysql:database=amavis;host=localhost'
Connection to 'DBI:mysql:database=amavis;host=localhost' succeeded
Executing... Fri Sep  2 13:55:14 2011
DELETE FROM msgrcpt WHERE rs='D'
4 rows affected
Executing... Fri Sep  2 13:55:14 2011
DELETE FROM msgs WHERE time_num < 1314960914 AND content IS NULL
0E0 rows affected
Executing... Fri Sep  2 13:55:14 2011
DELETE msgs FROM msgs LEFT JOIN msgrcpt USING(mail_id) WHERE msgrcpt.mail_id IS NULL
4 rows affected
Executing... Fri Sep  2 13:55:14 2011
DELETE FROM msgs WHERE time_num < 1314359714
527 rows affected
Executing... Fri Sep  2 13:55:15 2011
DELETE quarantine FROM quarantine LEFT JOIN msgs USING(mail_id) WHERE msgs.mail_id IS NULL
0E0 rows affected
Executing... Fri Sep  2 13:55:15 2011
DELETE msgrcpt FROM msgrcpt LEFT JOIN msgs USING(mail_id) WHERE msgs.mail_id IS NULL
0E0 rows affected
Executing... Fri Sep  2 13:55:15 2011
DELETE FROM maddr WHERE NOT EXISTS   (SELECT sid FROM msgs WHERE sid=id)    AND NOT EXISTS  (SELECT rid FROM msgrcpt WHERE rid=id)
19 rows affected
Database cleanup successful

Postfix AMaViS MailZu deutsche Sprachdatei

Unter nachfolgenden Link auf mein Repository –> http://www.repository.tachtler.net/applications/mailzu/ können die entsprechenden deutschen Sprachdateien

  • de.help.php
  • de.lang.php

heruntergeladen werden.

Nachfolgend müssen diese wie folgt in das Verzeichnis von MailZu verschoben werden, was mit nachfolgendem Befehl durchgeführt werden kann (ausgehen davon, das sich beide Dateien nach dem herunterladen im Verzeichnis /tmp befinden):

# mv /tmp/de.* /var/www/html/mailzu/lang

Anschließend müssen auch hier die Besitzrechte ensprechend mit nachfolgendem Befehl richtig gesetzte werden:

# chown root.apache /var/www/html/mailzu/lang/de.*

Anschließend ist in der PHP-Quellcode-Datei von MailZu mit der Bezeichnung

  • /var/www/html/mailzu/config/langs.php

wie folgt zu ergänzen (nur relevanter Ausschnitt):

...
$languages = array (
        // Tachtler
        'de'    => array('de([-_][[:alpha:]]{2})?|german', 'de.lang.php', 'de', 'Deutsch'),
        'en_US' => array('en([-_]us)?|english', 'en_US.lang.php', 'en', 'English US'),
        'en_GB' => array('en([-_]gb)?|english', 'en_GB.lang.php', 'en', 'English GB'),
        'es'    => array('es([-_][[:alpha:]]{2})?|spanish', 'es.lang.php', 'es', 'Español'),
        'cs'    => array('cs([-_][[:alpha:]]{2})?|czech', 'cs.lang.php', 'cs', '&#268;esky'),
        'fr'    => array('fr([-_][[:alpha:]]{2})?|french', 'fr.lang.php', 'fr', 'Fran&ccedil;ais'),
        'it'    => array('it([-_][[:alpha:]]{2})?|italian', 'it.lang.php', 'it', 'Italiano'),
        'pt_BR' => array('pt([-_]br)?|portuguese', 'pt_BR.lang.php', 'pt', 'Portuguese Brazilian')
);
...

Jetzt kann auch die Standard Spracheinstellung wie folgt in der Konfigurationsdatei

  • /var/www/html/mailzu/config/config.php

abgeändert werden (nur relevanter Ausschnitt):

...
// The default language code.  This must be included in the language list in
// langs.php
// Tachtler
// $conf['app']['defaultLanguage'] = 'en_US';
$conf['app']['defaultLanguage'] = 'de';
...

Postfix AMaViS MailZu Patch 2.7.0

Ab der AMaViS Version 2.7.0 ist nachfolgende Programmdatei von MailZu zu „patchen“, da sonst Fehler beim Zugriff auf die Datenbank auftauchen.

Die Datei, welche „gepatched“ werden muss lautet

  • /var/www/mailzu/lib/DBEngine.class.php

Der „Patch“ mit dem Namen Amavisd-new 2.7.0 compatibility kann unter nachfolgendem Link heruntergeladen werden:

:!: HINWEIS - In nachfolgende Datei, wurde von mir der oben genannte „Patch“ bereits eingearbeitet!

Postfix AMaViS MailZu Fehlerbehebung

Im PHP-Quellcode von MailZu haben sich ein paar Fehler eingeschlichen. Nachfolgende Berichtigungen bzw. Ergänzungen zum PHP-Quellcode sollten durchgeführt werden:

Datei: /var/www/html/mailzu/lib/DBEngine.class.php - Zeile: 243:

                # Tachtler
                # default: if ($conf['db']['dbtype'] == 'mysql') {
                if ($conf['db']['dbType'] == 'mysql') {

Datei: /var/www/html/mailzu/messagesAdmin.php - Zeile: 59:

  // Tachtler
  $content_type='';

Datei: /var/www/html/mailzu/messagesPendingAdmin.php - Zeile: 57:

  // Tachtler
  $content_type='';

mail_id mit '_'

Seitdem Postfix auch e-Mail-ID's mit dem Zeichen _ (Unterstrich) vergibt, kann es beim z.B. löschen von e-Mails aus der Quarantäne Anzeige von MailZu zu Problemen kommen.

:!: HINWEIS Nachfolgende Code-Zeilen lösen dieses Problem!

Die Programmdatei von MailZu mit nachfolgendem Namen muss wie folgt beschrieben angepasst werden:

  • lib/Quarantine.lib.php

Die Veränderungen sind ab Zeile 260 durchzuführen:

Vorher (nur relevanter Ausschnitt):

...
                        // Get mail_id and recipient email address
                        $temp = preg_split('/_/', $mail_id_recip, 2);
                        $mail_id = $temp[0];
                        $recip_email = $temp[1];
...

Nachher (nur relevanter Ausschnitt):

...
                        // Get mail_id and recipient email address
                        // Tachtler
                        // default: $temp = preg_split('/_/', $mail_id_recip, 2);
                        // default: $mail_id = $temp[0];
                        // default: $recip_email = $temp[1];
                        $help_recip_email = array_reverse(explode('_', $mail_id_recip));
                        $recip_email = $help_recip_email[0];
                        $help_mail_id = explode('_' . $recip_email, $mail_id_recip);
                        $mail_id = $help_mail_id[0];
...

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/postfix_amavis_mailzu_installieren.txt · Zuletzt geändert: 2013/12/08 10:30 von klaus