PostfixAdmin: Unterschied zwischen den Versionen

Aus Tutorials
Zur Navigation springen Zur Suche springen
 
(80 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
Es ist nicht möglich, eine bereits bestehende ''dovecot''-Datenbank zu verwenden, falls eine solche, mit abweichender Struktur, besteht.}}
Es ist nicht möglich, eine bereits bestehende ''dovecot''-Datenbank zu verwenden, falls eine solche, mit abweichender Struktur, besteht.}}


== Abhängigkeiten ==
<pre>
sudo apt-get install php5-imap
</pre>


== Installation ==
== Installation ==
Zeile 29: Zeile 35:


<pre>
<pre>
sudo touch /etc/apache2/conf-available/postfixadmin.conf
cd /etc/apache2/conf-available/
sudo nano /etc/apache2/conf-available/postfixadmin.conf
</pre>
</pre>


Zeile 50: Zeile 57:
<pre>
<pre>
sudo a2enconf postfixadmin
sudo a2enconf postfixadmin
sudo service apache2 restart
sudo service apache2 reload
</pre>
</pre>


Zeile 75: Zeile 82:
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['transport'] = 'YES';
$CONF['transport'] = 'YES';
$CONF['default_aliasis'] = array (
$CONF['default_aliasis'] = array (
     'abuse' => '<mail address>',
     'abuse' => '<mail address>',
Zeile 81: Zeile 89:
     'webmaster' => '<mail address>'
     'webmaster' => '<mail address>'
);
);
$CONF['password_validation'] = array(
$CONF['password_validation'] = array(
#    '/regular expression/' => '$PALANG key (optional: + parameter)',
#    '/regular expression/' => '$PALANG key (optional: + parameter)',
Zeile 87: Zeile 96:
     '/([0-9].*){1}/'        => 'password_no_digits 1',      # must contain at least 1 digit(s)
     '/([0-9].*){1}/'        => 'password_no_digits 1',      # must contain at least 1 digit(s)
);
);
$CONF['aliases'] = '100';
$CONF['mailboxes'] = '100';
$CONF['maxquota'] = '100';
$CONF['domain_quota_default'] = '2048';
$CONF['footer_text'] = 'Return to mail.<domain>';
$CONF['footer_text'] = 'Return to mail.<domain>';
$CONF['footer_link'] = 'https://mail.<domain>';
$CONF['footer_link'] = 'https://mail.<domain>';
$CONF['mailbox_postcreation_script'] = 'sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postcreation.sh';
$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['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';
?>
?>
</pre>


==== Setup aufrufen ====
Danach kann unter folgender Adresse kann die Seup-Seite aufgerufen werden:
<pre>
http://<ip address>/postfixadmin/setup.php
</pre>
</pre>


=== Verzeichnisse automatisch erstellen bzw. löschen ===
=== Verzeichnisse automatisch erstellen bzw. löschen ===
{{note|Der Benutzer ''vmail'' muss bereits angelegt sein - siehe dazu die Seite ''Dovecot''.}}
Verzeichnisse für die gelöschten Daten erstellen:
<pre>
sudo mkdir /var/vmail-deleted
sudo chown vmail:vmail /var/vmail-deleted
sudo mkdir /home/vmail-deleted
sudo chown vmail:vmail /home/vmail-deleted
</pre>
==== Maildir erstellen ====


In der Datei ''/var/www/postfixadmin/config.local.php'' folgende Zeilen einfügen:
In der Datei ''/var/www/postfixadmin/config.local.php'' folgende Zeilen einfügen:
Zeile 101: Zeile 135:
$CONF['mailbox_postcreation_script'] = 'sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postcreation.sh';
$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['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';
</pre>
</pre>


Zeile 107: Zeile 142:
sudo cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin/
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-mailbox-postdeletion.sh /usr/local/bin/
sudo chown root:vmail /usr/local/bin/postfixadmin-mailbox-post*.sh
sudo cp /var/www/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh /usr/local/bin/
sudo chmod 750 /usr/local/bin/postfixadmin-mailbox-post*.sh
sudo chown root:vmail /usr/local/bin/postfixadmin-*-post*.sh
sudo chmod 750 /usr/local/bin/postfixadmin-*-post*.sh
</pre>
</pre>


Zeile 121: Zeile 157:
www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postcreation.sh
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-mailbox-postdeletion.sh
www-data ALL=(vmail) NOPASSWD: /usr/local/bin/postfixadmin-domain-postdeletion.sh
</pre>
</pre>
Das erlaubt dem Benutzer ''www-data'' die beiden Skripte als Benutzer ''vmail'' '''ohne''' Passwortabfrage auszuführen.
Das erlaubt dem Benutzer ''www-data'' die hinzugefügten Skripte als Benutzer ''vmail'' '''ohne''' Passwortabfrage auszuführen.




Zeile 135: Zeile 172:
basedir=/var/vmail
basedir=/var/vmail
trashbase=/var/vmail-deleted
trashbase=/var/vmail-deleted
</pre>
In der Datei ''/usr/local/bin/postfixadmin-domain-postdeletion.sh'' folgende Zeilen anpassen:
<pre>
basedir=/var/vmail
trashbase=/var/vmail-deleted
</pre>
==== Homedir ====
Zuerst legen wir ein Verzeignis für die Logdatei an:
<pre>
sudo -u vmail mkdir /home/vmail/logs/
</pre>
===== anlegen =====
Ähnlich dem ursprünglichen Skript ''postfixadmin-mailbox-postcreation.sh'' legen wir ein neues Skipt ''postfixadmin-homedir-postcreation.sh'' an:
<pre>
sudo nano /usr/local/bin/postfixadmin-homedir-postcreation.sh
</pre>
Dieses neue Skript wird mit folgenden Inhalt befüllt:
<pre>
#!/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
</pre>
Das Skript noch ausführbar machen und Besitzer ändern:
<pre>
sudo chmod a+x /usr/local/bin/postfixadmin-homedir-postcreation.sh
sudo chown root:vmail /usr/local/bin/postfixadmin-homedir-postcreation.sh
</pre>
Das fertige Skript wird dann im ursprünglichen Skript ''postfixadmin-mailbox-postcreation.sh'' aufgerufen:
<pre>
sudo nano /usr/local/bin/postfixadmin-mailbox-postcreation.sh
</pre>
Dazu am Ende der Datei anstelle von ''exit 0'' folgende Zeilen einfügen:
<pre>
# create home directory
`dirname "$0"`/postfixadmin-homedir-postcreation.sh `basename "$3"`
exit $?
</pre>
===== löschen =====
Verzeichnis für gelöschte Benutzerverzeichnisse anlegen:
<pre>
sudo mkdir /home/vmail-deleted
sudo chown vmail:vmail /home/vmail-deleted
</pre>
Ähnlich dem ursprünglichen Skript ''postfixadmin-mailbox-postdeletion.sh'' legen wir ein neues Skipt ''postfixadmin-homedir-postdeletion.sh'' an:
<pre>
sudo nano /usr/local/bin/postfixadmin-homedir-postdeletion.sh
</pre>
Dieses neue Skript wird mit folgenden Inhalt befüllt:
<pre>
#!/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 $?
</pre>
Das Skript noch ausführbar machen und Benutzer ändern:
<pre>
sudo chmod a+x /usr/local/bin/postfixadmin-homedir-postdeletion.sh
sudo chown root:vmail /usr/local/bin/postfixadmin-homedir-postdeletion.sh
</pre>
Das fertige Skript wird dann im ursprünglichen Skript ''postfixadmin-mailbox-postdeletion.sh'' aufgerufen:
<pre>
sudo nano /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
</pre>
Dazum am Ende der Datei anstelle von ''exit $?'' folgende Zeilen einfügen:
<pre>
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 $?
</pre>
</pre>


=== Fetchmail ===
=== Fetchmail ===
==== Daemon deaktivieren ====
In der Datei ''/etc/default/fetchmail'' folgende Zeile anpassen:
<pre>
sudo nano /etc/default/fetchmail
</pre>


<pre>
START_DAEMON=no
</pre>
Danach ''fetchmail'' stoppen:
<pre>
sudo /etc/init.d/fetchmail stop
</pre>
==== Abhängigkeiten ====
<pre>
sudo apt-get update
sudo apt-get install liblockfile-simple-perl
</pre>
==== Script ''fetchmail.pl'' ====
Fertiges Script von ''/<document root>/ADDITIONS/'' nach ''/usr/local/bin/'' kopieren:
<pre>
<pre>
sudo cp /var/www/postfixadmin/ADDITIONS/fetchmail.pl /usr/local/bin/
sudo cp /var/www/postfixadmin/ADDITIONS/fetchmail.pl /usr/local/bin/
Zeile 145: Zeile 382:
</pre>
</pre>


=== Probleme ===
In der Datei ''fetchmail.pl'' folgende Werte anpassen:
<pre>
sudo nano /usr/local/bin/fetchmail.pl
</pre>
 
<pre>
# 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>";
</pre>


==== Invalid query: FUNCTION postfix.FROM_BASE64 does not exist ====
==== ''Lock''-Datei anlegen ====
 
<pre>
sudo -u vmail mkdir /home/vmail/fetchmail/
sudo -u vmail touch /home/vmail/fetchmail/fetchmail-all.lock
</pre>
 
<pre>
sudo nano /usr/local/bin/fetchmail.pl
</pre>
 
Pfad zur ''Lock''-Datei von
 
<pre>
$run_dir="/var/run/fetchmail";
</pre>
 
nach
 
<pre>
$run_dir="/home/vmail/fetchmail";
</pre>
 
ändern, da ''/var/run/'' bei jedem Neustart geleert wird.
 
==== Cronjob anlegen ====
 
<pre>
sudo -i
crontab -e
</pre>
 
<pre>
*/1 * * * * sudo -H -u vmail /usr/local/bin/fetchmail.pl > /dev/null 2&>1
</pre>
 
== 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
Bei Verwendung von ''PHP 5.5'' muss in der Datei ''<document root>/model/PFAHandler.php'' folgende Zeile (ca. Zeile 572) von
Zeile 161: Zeile 452:


ausgebessert werden.
ausgebessert werden.
=== Fetchmail funktioniert nicht ===
Im Script ''fetchmail.pl'' ist in der folgenden Zeile ein Fehler:
<pre>
} elsif($db_type eq "mysql") {
        $sql_cond = "active = 't' AND unix_timestamp(now())-unix_timestamp(date)";
}
</pre>
'' 't' '' muss auf ''1'' geändert werden:
<pre>
} elsif($db_type eq "mysql") {
        $sql_cond = "active = 1 AND unix_timestamp(now())-unix_timestamp(date)";
}
</pre>


== Links ==
== Links ==
Zeile 174: Zeile 483:
[https://wiki.archlinux.org/index.php/Virtual_user_mail_system https://wiki.archlinux.org/index.php/Virtual_user_mail_system]
[https://wiki.archlinux.org/index.php/Virtual_user_mail_system https://wiki.archlinux.org/index.php/Virtual_user_mail_system]


[https://www.howtoforge.com/virtual_users_postfix_courier_mailscanner_clamav_centos_p5 https://www.howtoforge.com/virtual_users_postfix_courier_mailscanner_clamav_centos_p5]
[https://wiki.easycow.de/index.php?title=Fetchmail&redirect=no https://wiki.easycow.de/index.php?title=Fetchmail&redirect=no]
 
[https://sourceforge.net/p/postfixadmin/discussion/676076/thread/38548a28/ https://sourceforge.net/p/postfixadmin/discussion/676076/thread/38548a28/]




Zurück zu [[Mailserver einrichten]]
Zurück zu [[Mailserver einrichten]]

Aktuelle Version vom 17. Februar 2018, 18:38 Uhr

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.


Abhängigkeiten

sudo apt-get install php5-imap

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

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

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['aliases'] = '100';
$CONF['mailboxes'] = '100';
$CONF['maxquota'] = '100';
$CONF['domain_quota_default'] = '2048';

$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';
$CONF['domain_postdeletion_script'] = 'sudo -u vmail /usr/local/bin/postfixadmin-domain-postdeletion.sh';
?>

Setup aufrufen

Danach kann unter folgender Adresse kann die Seup-Seite aufgerufen werden:

http://<ip address>/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 -u vmail mkdir /home/vmail/logs/
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 $?

Fetchmail

Daemon deaktivieren

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

sudo nano /etc/default/fetchmail
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:

sudo nano /usr/local/bin/fetchmail.pl
# 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
sudo nano /usr/local/bin/fetchmail.pl

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