Inhaltsverzeichnis
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', 'Česky'), 'fr' => array('fr([-_][[:alpha:]]{2})?|french', 'fr.lang.php', 'fr', 'Franç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]; ...