PostfixAdmin: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „== Installation == == Konfiguration == == Links == [https://blog.unterhaltungsbox.com/mailserver-mit-postfix-dovecot-postfixadmin-und-mysql/ https://blog.un…“) |
|||
(143 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{note|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 == | |||
<pre> | |||
sudo apt-get install php5-imap | |||
</pre> | |||
== Installation == | == Installation == | ||
''postfixadmin'' herunterladen: | |||
<pre> | |||
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/ | |||
</pre> | |||
Datenbank anlegen: | |||
<pre> | |||
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; | |||
</pre> | |||
== Konfiguration == | == Konfiguration == | ||
=== Apache2 === | |||
<pre> | |||
cd /etc/apache2/conf-available/ | |||
sudo nano /etc/apache2/conf-available/postfixadmin.conf | |||
</pre> | |||
<pre> | |||
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> | |||
</pre> | |||
<pre> | |||
sudo a2enconf postfixadmin | |||
sudo service apache2 reload | |||
</pre> | |||
=== PostfixAdmin === | |||
Konfigurationsdatei anlegen (überschreibt die Standardwerte in ''config.inc.php''): | |||
<pre> | |||
cd /var/www/postfixadmin/ | |||
sudo -u www-data nano config.local.php | |||
</pre> | |||
Datei sollte etwa folgendermaßen aussehen: | |||
<pre> | |||
<?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'; | |||
?> | |||
</pre> | |||
==== Setup aufrufen ==== | |||
Danach kann unter folgender Adresse kann die Seup-Seite aufgerufen werden: | |||
<pre> | |||
http://<ip address>/postfixadmin/setup.php | |||
</pre> | |||
=== 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: | |||
<pre> | |||
$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'; | |||
</pre> | |||
Die Scripte dafür liegen bereits in ''$DOCUMENT_ROOT/ADDITIONS'' und müssen nur noch ins ''cgi-bin''-Verzeichnis kopiert werden: | |||
<pre> | |||
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 | |||
</pre> | |||
Datei ''/etc/sudoers'' bearbeiten (nicht direkt, sondern über ''visudo'' - macht einen Syntax-Check): | |||
<pre> | |||
sudo visudo | |||
</pre> | |||
Am Ende folgende Zeilen einfügen: | |||
<pre> | |||
# 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 | |||
</pre> | |||
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: | |||
<pre> | |||
basedir=/var/vmail | |||
maildirmake.dovecot "$maildir" | |||
</pre> | |||
In der Datei ''/usr/local/bin/postfixadmin-mailbox-postdeletion.sh'' folgende Zeilen anpassen: | |||
<pre> | |||
basedir=/var/vmail | |||
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> | |||
=== 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> | |||
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 | |||
</pre> | |||
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> | |||
==== ''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 | |||
<pre> | |||
$base64_decode = "FROM_BASE64(###KEY###)"; | |||
</pre> | |||
auf | |||
<pre> | |||
$base64_decode = "###KEY###"; | |||
</pre> | |||
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 == | ||
[http://postfixadmin.sourceforge.net/ http://postfixadmin.sourceforge.net/] | |||
[https://blog.unterhaltungsbox.com/mailserver-mit-postfix-dovecot-postfixadmin-und-mysql/ https://blog.unterhaltungsbox.com/mailserver-mit-postfix-dovecot-postfixadmin-und-mysql/] | [https://blog.unterhaltungsbox.com/mailserver-mit-postfix-dovecot-postfixadmin-und-mysql/ https://blog.unterhaltungsbox.com/mailserver-mit-postfix-dovecot-postfixadmin-und-mysql/] | ||
[https://www.nesono.com/book/export/html/224 https://www.nesono.com/book/export/html/224] | |||
[http://www.bunzel.net/2012/07/30/postfixadmin-aufsetzen/ http://www.bunzel.net/2012/07/30/postfixadmin-aufsetzen/] | |||
[https://wiki.archlinux.org/index.php/Virtual_user_mail_system https://wiki.archlinux.org/index.php/Virtual_user_mail_system] | |||
[https://wiki.easycow.de/index.php?title=Fetchmail&redirect=no https://wiki.easycow.de/index.php?title=Fetchmail&redirect=no] | |||
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