PostfixAdmin (Ubuntu 16.04)

Aus Tutorials
Zur Navigation springen Zur Suche springen

Noch in Bearbeitung


Voraussetzungen

LAMP-Server, dazu siehe auch: Apache, MySQL

Installation

PHP

sudo apt-get install php-imap
sudo service apache2 restart

tar-Verzeichnis

Aktuelle Version unter https://sourceforge.net/projects/postfixadmin/files/postfixadmin herunterladen.

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

In dem entpackten Verzeichnis befindet sich auch eine Datei Install.txt, wo die grundlegenden Schritte beschrieben werden.

MySQL

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

cd /etc/apache2/conf-available/
sudo vi /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 reload

PostfixAdmin

Grundkonfiguration

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

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

Datei sollte in der Grundkonfiguration etwa so aussehen:

<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = '<password>';
$CONF['database_name'] = 'postfix';
?>

Setup aufrufen

Wenn die Grundkonfiguration abgeschlossen ist, wird das Setup-Script aufgerufen:

http://10.0.0.120/postfixadmin/setup.php

Verzeichnisse automatisch erstellen bzw. löschen

Der Benutzer vmail muss bereits angelegt sein - siehe dazu die Seite Dovecot.

Verzeichnisse für die gelöschten Daten erstellen:

sudo mkdir /var/vmail-deleted
sudo chown vmail:vmail /var/vmail-deleted
sudo mkdir /home/vmail-deleted
sudo chown vmail:vmail /home/vmail-deleted

Maildir erstellen

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';
$CONF['domain_postdeletion_script'] = 'sudo -u vmail /usr/local/bin/postfixadmin-domain-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 hinzugefügten 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

Homedir

Zuerst legen wir ein Verzeignis für die Logdatei an:

sudo mkdir -p /home/vmail/logs/
sudo chown -R vmail:vmail /home/vmail/
anlegen

Ähnlich dem ursprünglichen Skript postfixadmin-mailbox-postcreation.sh legen wir ein neues Skipt postfixadmin-homedir-postcreation.sh an:

sudo nano /usr/local/bin/postfixadmin-homedir-postcreation.sh

Dieses neue Skript wird mit folgenden Inhalt befüllt:

#!/bin/sh

# Change this to where you keep your virtual mail logfiles.
errorlog=/home/vmail/logs/error.log

# Change this to where you keep your virtual mail users' homedirs.
basedir=/home/vmail

if [ ! -e "$basedir" ]; then
    echo "$0: basedir '$basedir' does not exist; bailing out." >> $errorlog
    exit 1
fi

# create directory /home/vmail/<new user>/
current="${basedir}/$1"
mkdir -p "${current}" 
if [ $? -ne 0 ]; then
    echo "$0: mkdir -p '$current' returned non-zero; bailing out." >> $errorlog
    exit 1
fi

# create directory /home/vmail/<new user>/sieve/
current="${current}/sieve"
mkdir -p "${current}" 
if [ $? -ne 0 ]; then
    echo "$0: mkdir -p '$current' returned non-zero; bailing out." >> $errorlog
    exit 1
fi

# create directory /home/vmail/<new user>/sieve/scripts/
current="${current}/scripts"
mkdir -p "${current}" 
if [ $? -ne 0 ]; then
    echo "$0: mkdir -p '$current' returned non-zero; bailing out." >> $errorlog
    exit 1
fi

exit 0

Das Skript noch ausführbar machen und Besitzer ändern:

sudo chmod a+x /usr/local/bin/postfixadmin-homedir-postcreation.sh
sudo chown root:vmail /usr/local/bin/postfixadmin-homedir-postcreation.sh

Das fertige Skript wird dann im ursprünglichen Skript postfixadmin-mailbox-postcreation.sh aufgerufen:

sudo nano /usr/local/bin/postfixadmin-mailbox-postcreation.sh

Dazu am Ende der Datei anstelle von exit 0 folgende Zeilen einfügen:

# create home directory
`dirname "$0"`/postfixadmin-homedir-postcreation.sh `basename "$3"` 
exit $?
löschen

Verzeichnis für gelöschte Benutzerverzeichnisse anlegen:

sudo mkdir /home/vmail-deleted
sudo chown vmail:vmail /home/vmail-deleted

Ähnlich dem ursprünglichen Skript postfixadmin-mailbox-postdeletion.sh legen wir ein neues Skipt postfixadmin-homedir-postdeletion.sh an:

sudo nano /usr/local/bin/postfixadmin-homedir-postdeletion.sh

Dieses neue Skript wird mit folgenden Inhalt befüllt:

#!/bin/sh

# Change this to where you keep your virtual mail logfiles.
errorlog=/home/vmail/logs/error.log

# Change this to where you keep your virtual mail users' homedirs.
basedir=/home/vmail

# Change this to where you would like deleted homedirs to reside.
trashbase=/home/vmail-deleted


if [ ! -e "$trashbase" ]; then
    echo "trashbase '$trashbase' does not exist; bailing out." >> $errorlog
    exit 1
fi

if [ `echo $1 | fgrep '..'` ]; then
    echo "First argument contained a double-dot sequence; bailing out." >> $errorlog
    exit 1
fi

subdir=`echo "$1" | sed 's/@.*//'`

homedir="${basedir}/${subdir}"
trashdir="${trashbase}/`date +%F_%T`_${subdir}"

parent=`dirname "$trashdir"`
if [ ! -d "$parent" ]; then
    if [ -e "$parent" ]; then
        echo "Strainge - directory '$parent' exists, but is not a directory." >> $errorlog
        echo "Bailing out." >> $basedir/logs/error.log
        exit 1
    else
        mkdir -p "$parent"
        if [ $? -ne 0 ]; then
            echo "mkdir -p '$parent' returned non-zero; bailing out." >> $errorlog
            exit 1
        fi
    fi
fi

if [ ! -e "$homedir" ]; then
    echo "homedir '$homedir' does not exist; nothing to do." >> $errorlog
    exit 1
fi
if [ -e "$trashdir" ]; then
    echo "homedir '$trashdir' already exists; bailing out." >> $errorlog
    exit 1
fi

mv $homedir $trashdir

exit $?

Das Skript noch ausführbar machen und Benutzer ändern:

sudo chmod a+x /usr/local/bin/postfixadmin-homedir-postdeletion.sh
sudo chown root:vmail /usr/local/bin/postfixadmin-homedir-postdeletion.sh

Das fertige Skript wird dann im ursprünglichen Skript postfixadmin-mailbox-postdeletion.sh aufgerufen:

sudo nano /usr/local/bin/postfixadmin-mailbox-postdeletion.sh

Dazum am Ende der Datei anstelle von exit $? folgende Zeilen einfügen:

if [ $? -ne 0 ]; then
    echo "mv $maildir $trashdir returned non-zero; bailing out."
    exit 1
fi

# delete home directory
`dirname "$0"`/postfixadmin-homedir-postdeletion.sh `basename "$1"`
exit $?

Probleme

the templates_c directory doesn’t exist or isn’t writeable for the webserver

Einfach ein leeres Verzeichnis template_c unter /var/www/postfixadmin/ anlegen.

Links

http://blog.cboltz.de/uploads/postfixadmin-30-english.pdf


Zurück zu Mailserver einrichten