PostfixAdmin

Aus Tutorials
Zur Navigation springen Zur Suche springen

Da postfixdmin seine eigene Datenbankstruktur erzeugt, sollte man es daher installieren, bevor man postfix und dovecot konfiuriert.

Es ist nicht möglich, eine bereits bestehende dovecot-Datenbank zu verwenden, falls eine solche, mit abweichender Struktur, besteht.


Installation

postfixadmin herunterladen:

wget https://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.93/postfixadmin-2.93.tar.gz
tar -xzf postfixadmin-2.93.tar.gz
sudo mv postfixadmin-2.93 /var/www/postfixadmin/
sudo chown -R www-data:www-data /var/www/postfixadmin/

Datenbank anlegen:

mysql -u root -p 
mysql> create database if not exists postfix;
mysql> create user 'postfix'@'%' identified by '<password>';
mysql> grant all privileges on postfix.* to 'postfix'@'%';
mysql> flush privileges; 
mysql> quit;

Konfiguration

Apache2

sudo touch /etc/apache2/conf-available/postfixadmin.conf
Alias /postfixadmin "/var/www/postfixadmin/"
<Directory "/var/www/postfixadmin">
    Options +FollowSymLinks
    AllowOverride All

    <IfModule mod_dav.c>
      Dav off
    </IfModule>

    SetEnv HOME /var/www/postfixadmin
    SetEnv HTTP_HOME /var/www/postfixadmin
</Directory>

sudo a2enconf postfixadmin
sudo service apache2 restart

PostfixAdmin

Konfigurationsdatei anlegen (überschreibt die Standardwerte in config.inc.php):

cd /var/www/postfixadmin/
sudo -u www-data nano config.local.php

Datei sollte etwa folgendermaßen aussehen:

<?php
$CONF['configured'] = true;
$CONF['setup_password'] = '<setup password>';
$CONF['default_language'] = 'de';
$CONF['database_type'] = 'mysql';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = '<database password>';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = '<mail address>';
$CONF['encrypt'] = 'dovecot:SHA512-CRYPT';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['transport'] = 'YES';
$CONF['default_aliasis'] = array (
     'abuse' => '<mail address>',
     'hostmaster' => '<mail address>',
     'postmaster' => '<mail address>',
     'webmaster' => '<mail address>'
);
$CONF['password_validation'] = array(
#    '/regular expression/' => '$PALANG key (optional: + parameter)',
    '/.{5}/'                => 'password_too_short 5',      # minimum length 5 characters
    '/([a-zA-Z].*){3}/'     => 'password_no_characters 3',  # must contain at least 3 characters
    '/([0-9].*){1}/'        => 'password_no_digits 1',      # must contain at least 1 digit(s)
);
$CONF['footer_text'] = 'Return to mail.<domain>';
$CONF['footer_link'] = 'https://mail.<domain>';
$CONF['mailbox_postcreation_script'] = 'sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postcreation.sh';
$CONF['mailbox_postdeletion_script'] = 'sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';
?>

Verzeichnisse automatisch erstellen bzw. löschen

In der Datei /var/www/postfixadmin/config.local.php folgende Zeilen einfügen:

$CONF['mailbox_postcreation_script'] = 'sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postcreation.sh';
$CONF['mailbox_postdeletion_script'] = 'sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';

Die Scripte dafür liegen bereits in $DOCUMENT_ROOT/ADDITIONS und müssen nur noch ins cgi-bin-Verzeichnis kopiert werden:

sudo cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin/
sudo cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh /usr/local/bin/
sudo cp /var/www/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh /usr/local/bin/
sudo chown root:vmail /usr/local/bin/postfixadmin-*-post*.sh
sudo chmod 750 /usr/local/bin/postfixadmin-*-post*.sh

Datei /etc/sudoers bearbeiten (nicht direkt, sondern über visudo - macht einen Syntax-Check):

sudo visudo 

Am Ende folgende Zeilen einfügen:

# Allow postfixadmin to create/delete maildirs
www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postcreation.sh
www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-domain-postdeletion.sh

Das erlaubt dem Benutzer www-data die beiden Skripte als Benutzer vmail ohne Passwortabfrage auszuführen.


In der Datei /usr/local/bin/postfixadmin-mailbox-postcreation.sh folgende Zeilen anpassen:

basedir=/var/vmail
maildirmake.dovecot "$maildir"

In der Datei /usr/local/bin/postfixadmin-mailbox-postdeletion.sh folgende Zeilen anpassen:

basedir=/var/vmail
trashbase=/var/vmail-deleted

In der Datei /usr/local/bin/postfixadmin-domain-postdeletion.sh folgende Zeilen anpassen:

basedir=/var/vmail trashbase=/var/vmail-deleted

Fetchmail

Daemon deaktivieren

In der Datei /etc/default/fetchmail folgende Zeile anpassen:

START_DAEMON=no

Danach fetchmail stoppen:

sudo /etc/init.d/fetchmail stop

Abhängigkeiten

sudo apt-get update
sudo apt-get install liblockfile-simple-perl

Script fetchmail.pl

Fertiges Script von /<document root>/ADDITIONS/ nach /usr/local/bin/ kopieren:

sudo cp /var/www/postfixadmin/ADDITIONS/fetchmail.pl /usr/local/bin/
sudo chown root:vmail /usr/local/bin/fetchmail.pl
sudo chmod 750 /usr/local/bin/fetchmail.pl

In der Datei fetchmail.pl folgende Werte anpassen:

# database backend
$db_type = 'mysql';
# host name
$db_host="10.0.0.120";
# database name
$db_name="postfix";
# database username
$db_username="postfix";
# database password
$db_password="<password>";

Lock-Datei anlegen

sudo -u vmail mkdir /home/vmail/fetchmail/
sudo -u vmail touch /home/vmail/fetchmail/fetchmail-all.lock

Pfad zur Lock-Datei von

$run_dir="/var/run/fetchmail";

nach

$run_dir="/home/vmail/fetchmail";

ändern, da /var/run/ bei jedem Neustart geleert wird.

Cronjob anlegen

sudo -i
crontab -e
*/1 * * * * sudo -H -u vmail /usr/local/bin/fetchmail.pl > /dev/null 2&>1

Probleme

Invalid query: FUNCTION postfix.FROM_BASE64 does not exist

Bei Verwendung von PHP 5.5 muss in der Datei <document root>/model/PFAHandler.php folgende Zeile (ca. Zeile 572) von

$base64_decode = "FROM_BASE64(###KEY###)";

auf

$base64_decode = "###KEY###";

ausgebessert werden.

Fetchmail funktioniert nicht

Im Script fetchmail.pl ist in der folgenden Zeile ein Fehler:

} elsif($db_type eq "mysql") {
        $sql_cond = "active = 't' AND unix_timestamp(now())-unix_timestamp(date)";
}

't' muss auf 1 geändert werden:

} elsif($db_type eq "mysql") {
        $sql_cond = "active = 1 AND unix_timestamp(now())-unix_timestamp(date)";
}

Links

http://postfixadmin.sourceforge.net/

https://blog.unterhaltungsbox.com/mailserver-mit-postfix-dovecot-postfixadmin-und-mysql/

https://www.nesono.com/book/export/html/224

http://www.bunzel.net/2012/07/30/postfixadmin-aufsetzen/

https://wiki.archlinux.org/index.php/Virtual_user_mail_system

https://wiki.easycow.de/index.php?title=Fetchmail&redirect=no


Zurück zu Mailserver einrichten