Sichere E-Mail-Archivierung mit Piler

Piler (c) by mailpiler.org

Vorwort und Umgebung

Piler dient zur langjährigen E-Mail-Archivierung in verschlüsselter Form. Import- und Export-Funktionen bringen das Archiv nachträglich auf einen aktuellen Stand oder sorgen für eine reibungslose Notfallwiederherstellung. Nachrichten werden zudem komprimiert und dedupliziert gespeichert

Ein Webdienst steht neben Administratoren und Auditoren auch Mailserver-Benutzern zur Verfügung (wenn konfiguriert), die bei Bedarf Nachrichten reviewen oder mit einem Klick wiederherstellen.

Das Hauptaugenmerk des Artikels liegt wie üblich auf der Installation und Konfiguration der Dienste bis hin zur Funktionalität. Und nicht weiter. :-)

Wie Piler zu bedienen ist, verrät der Entwickler auf der Website.
Auch eine tabellarische Auflistung der Features befindet sich dort.

Eine Übersicht meiner Konfiguration

  • Installation auf Debian Wheezy amd64
  • Mailserver und Piler-Dienst laufen auf getrennten Servern im selben internen Subnetz
  • MTA auf Basis von Postfix vorhanden

Changelog des Artikels

  • 23.04.2015 – Hinweise zu Sphinxsearch Upgrade und Version angepasst
  • 02.04.2015 – STARTTLS Konfiguration
  • 27.03.2015 – Wichtiger Hinweis zu „iv“-Parameter
  • 26.03.2015 – Ausführlichere Postfix Hinweise

Installation

Etwas aufwändiger als sonst gestaltet sich die Bereitstellung der Abhängigkeiten.
Beachtet, dass die Verwendung alternativer Webserver ebenso möglich ist. Insbesondere sind das Nginx und Lighttpd.
Der Einsatz von MariaDB wird offiziell nicht empfohlen.

apt-get install libtre5 libzip2 gettext sysstat build-essential \
catdoc poppler-utils unrtf tnef memcached libpst4 \
php5-memcache php5-gd php5-curl curl php5-ldap libapache2-mod-php5 php5-mysql mysql-server \
mysql-client openssl apache2 checkinstall libwrap0-dev libtre-dev libssl-dev \
libltdl7 libmysqlclient18 libodbc1 libpq5 mysql-common libmysqlclient-dev ppthtml apache2-utils
Während der Installation der Pakete, wird ein MySQL root-Kennwort gesetzt.

Die Kernkomponente Pilers, Sphinx Search, befindet sich zwar ebenso in den offiziellen Paketquellen Debian Wheezys.
Empfohlen wird dennoch die Verwendung der aktuell stabilen Version, herunterzuladen auf der Website des Projekts.

Zum Zeitpunkt des Artikels und unter Verwendung von Debian Wheezy amd64, lade ich das deb-Paket „sphinxsearch_2.2.8-release-1~wheezy_amd64.deb“ herunter und installiere es:

cd ~ ; wget http://sphinxsearch.com/files/sphinxsearch_2.2.9-release-1~wheezy_amd64.deb
dpkg -i sphinxsearch_2.2.9-release-1~wheezy_amd64.deb

Anschließend muss der Sphinx Search Dienst manuell beendet und deaktiviert werden.
Piler baut auf einen eigenen Dienst, um Sphinx Search zu steuern. Dieser Schritt ist daher unumgänglich:

service sphinxsearch stop

Damit das System kein Duplikat des Dienstes „sphinxsearch“ erkennt, empfiehlt es sich, das Init-Script erst zu deaktivieren und anschließend an einen sicheren Ort kopieren.
Weiterhin sollte die Datei „/etc/init.d/sphinxsearch“ geleert, aber nicht entfernt werden, um Fehler bei einem späteren Upgrade des Sphinxsearch-Paketes zu verhindern:

update-rc.d -f sphinxsearch remove
cp /etc/init.d/sphinxsearch /root/
echo > /etc/init.d/sphinxsearch
Zur Erklärung: Sowohl „sphinxsearch“ als auch der im Verlauf installierte Dienst „rc.searchd“ beinhalten die Kopfzeile „Provides: sphinxsearch“.

Wird das Paket Sphinxsearch zu einem späteren Zeitpunkt aktualisiert, wird dpkg das veränderte Init-Script erkennen und per Standard die veränderte Datei nicht wieder ersetzen. Das ist, was wir möchten.

Die Ausführung von Piler und Komponenten, sollte einem weitesgehend unprivilegierten Benutzer auf dem System überlassen werden.
Piler sieht hierfür per Standard den Benutzer/die Gruppe „piler“ vor:

groupadd piler
useradd -g piler -s /bin/bash -d /var/piler piler
usermod -L piler

Im Verzeichnis ~/build lege ich den aktuellen Quell-Code Pilers ab.
Es folgt der gewohnte Drei-Schritt zum Bauen des Paketes. Die Konfiguration habe ich leicht angepasst, das Prefix – wie zu sehen – auf „/usr/local“ belassen.

mkdir ~/build ; cd ~/build
wget -O - https://bitbucket.org/jsuto/piler/downloads/piler-1.1.1.tar.gz | tar xfvz -
cd piler-1.1.1/
./configure --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var --with-database=mysql --enable-starttls --enable-tcpwrappers
make
make install

Im Zuge einer Erst-Installation, triggern wir das „postinstall utility“, das abschließende Konfigurationen für uns vornimmt:

make postinstall

Viele der Standardwerte können mit einem Enter übernommen werden.
Der typische Webserver Gruppenname lautet für Debian und Derivate allerdings „www-data“, wie wir wissen.
Auch sollten die MySQL Parameter der Installation entsprechen – logisch.

>> make postinstall
This is the postinstall utility for piler
It should be run only at the first install. DO NOT run on an existing piler installation!

Continue? [Y/N] [N] Y

Please enter the webserver groupname [apache] www-data
Please enter mysql hostname [localhost] localhost
Please enter mysql socket path [/var/run/mysqld/mysqld.sock] /var/run/mysqld/mysqld.sock
Please enter mysql database [piler] piler
Please enter mysql user name [piler] piler
Please enter mysql password for piler [] meingeheimespasswort
Please enter mysql root password [] meinsqlrootpasswort
mysql connection successful
Please enter the path of sphinx.conf [/etc/sphinxsearch/sphinx.conf] /etc/sphinxsearch/sphinx.conf
Please enter smtp relay [] mein.mail.server
Please enter smtp relay port [25] 25
Correct? [Y/N] [N] Y
Continue and modify system? [Y/N] [N] Y

Done post installation tasks.

Bitte sorgt nun dafür, dass kein Dienst Port 25/tcp blockiert:

netstat -tulpen

Eine Standard-Installation Debians wird vermutlich exim4 installiert haben:

apt-get remove exim4-*
Es ist dennoch möglich, einen MTA auf dem Piler-System zu installieren.
Der SMTPd des MTA sollte in diesem Fall jedoch auf einen anderen Port hören, etwa 10025/tcp.
Im „postinstall utility“ würde die Bitte nach dem SMTP-Relay mit „127.0.0.1“ und Port „10025“ beantwortet.

Die Dienste können anschließend gestartet werden:

service rc.piler start
service rc.searchd start
Mit einer erfolgreichen Installation, wird Piler einen Schlüssel „/etc/piler.key“ anlegen, welcher unbedingt zu sichern ist!
Wird dieser Schlüssel gelöscht oder überschrieben, ist das Archiv nicht mehr zugänglich!

Gleiches gilt für einen iv-Parameter in „/etc/piler.conf“, welcher automatisch generiert wird und nicht mehr verändert werden darf!

Konfiguration

Apache2

Für die Webserver Apache2 und Nginx bringt Piler entsprechende Site-Konfigurationen mit.
Ich bediene mich sinngemäß der Apache2 Konfiguration:

cp ~/build/piler-1.1.1/contrib/webserver/piler-apache-2.x.conf /etc/apache2/sites-available/
a2ensite piler-apache-2.x.conf

Im Detail muss diese noch angepasst werden:

nano /etc/apache2/sites-available/piler-apache-2.x.conf

Wichtig: Ändert „DocumentRoot“ sowie den „Directory“-Abschnitt in „/var/www/piler“ um.

Ich benötige zudem kein seperates Logfile. Daher fällt meine Konfiguration insgesamt bescheiden aus:

<VirtualHost *:80>
    ServerName piler.domain.tld
    DocumentRoot "/var/www/piler"
    <Directory /var/www/piler>
       Order allow,deny
       Allow from all
       AllowOverride all
    </Directory>
</VirtualHost>

Bitte jedes Auftreten der Beispiel-Domäne durch die eigene ersetzen!
Insbesondere der „ServerName“-Parameter darf nicht übersehen werden.

Zuletzt benötigt Piler ein aktives Apache2 Rewrite-Modul:

a2enmod rewrite

Durch den Neustart des Dienstes, werden alle ausstehenden Änderungen übernommen.

service apache2 restart

Webdienst

Die Konfiguration bedient sich zweier Dateien:

– eine globale Datei /var/www/piler/config.php
– eine individuelle/überschreibende Datei /var/www/piler/config-site.php

Vielen dürfte das Konzept von anderen Anwendungen bekannt sein…
Anpassungen erfolgen lediglich in der Konfigurationsdatei „config-site.php“.
Einstellungen, die hier vorgenommen werden, überschreiben die globale Konfiguration.

Einige Grundelemente wird das „postinstall utility“ bereits konfiguriert haben:

nano /var/www/piler/config-site.php

Beispiel:

<?php
$config['SITE_NAME'] = 'piler.domain.tld';
$config['SITE_URL'] = 'http://' . $config['SITE_NAME'] . '/';
$config['DIR_BASE'] = '/var/www/piler/';
$config['ENABLE_SYSLOG'] = 1;
$config['SMTP_DOMAIN'] = 'piler.domain.tld';
$config['SMTP_FROMADDR'] = 'no-reply@piler.domain.tld';
$config['ADMIN_EMAIL'] = 'admin@piler.domain.tld';
$config['DB_DRIVER'] = 'mysql';
$config['DB_PREFIX'] = '';
$config['DB_HOSTNAME'] = 'localhost';
$config['DB_USERNAME'] = 'piler';
$config['DB_PASSWORD'] = 'meingeheimespasswort';
$config['DB_DATABASE'] = 'piler';
$config['SMARTHOST'] = 'mein.mail.server';
$config['SMARTHOST_PORT'] = 25;

# ============
# Hinzugefuegt
# ============
$config['PILER_HOST'] = '0.0.0.0';
$config['DEFAULT_LANG'] = 'de';
?>

Im obigen Beispiel wurde zuerst der wichtige Parameter $config['PILER_HOST'] ergänzt.
Der Wert „0.0.0.0“ ist an dieser Stelle stellvertretend für alle verfügbaren Adressen zu verstehen.
Das ist in Ordnung, da Web- und Piler-Dienst sich einen Server teilen.

$config['DEFAULT_LANG'] belasse ich unkommentiert… :-)

$config['SITE_NAME'] wird per Standard dem lokalen Hostnamen entsprechen (Beispiel: „archive.domain.local“).
Soll Piler extern erreichbar sein, muss hier unbedingt ein extern auflösbarer Name stehen (ausgenommen sind Installationen hinter einem Reverse Proxy).

Die $config['SMTP_DOMAIN'] darf NICHT bereits vom eigenen Mailserver in Verwendung sein (Falsches Beispiel: „domain.tld“).
Ich entscheide mich für „piler.domain.tld“.


Authentifizierung von Benutzern

Am sinnvollsten ist es, denjenigen Benutzern Zugang zum Archiv zu erteilen, die schon über ein IMAP-Konto in der Domäne verfügen.
Dazu eigenet sich ein LDAP-Verzeichnisdienst ebenso gut wie die Prüfung des Logins gegen einen IMAP-Server.

In jedem Fall wird wieder die Konfiguration des Webdienstes geöffnet:

nano /var/www/piler/config-site.php

– 1. Beispiel: LDAP, Active Directory

$config['ENABLE_LDAP_AUTH'] = 1;
$config['LDAP_HOST'] = 'ad.domain.local';
$config['LDAP_HELPER_DN'] = 'CN=Read-Only LDAP,OU=ServiceAccounts,DC=domain,DC=local';
$config['LDAP_HELPER_PASSWORD'] = 'readonlypassword';
$config['LDAP_MAIL_ATTR'] = 'mail';
$config['LDAP_BASE_DN'] = 'DC=domain,DC=local';

Viele Details zur Konfiguration findet ihr hier: http://www.mailpiler.org/en/ldap-authentication.html
Besonders erwähnenswert ist sicherlich „LDAP_AUDITOR_MEMBER_DN“, um Administratoren zu definieren.

– 2. Beispiel: IMAPS

$config['ENABLE_IMAP_AUTH'] = 1;
$config['IMAP_HOST'] = 'imap.domain.tld';
$config['IMAP_PORT'] =  993;
$config['IMAP_SSL'] = true;

Die Änderungen werden sofort wirksam.

Piler-Dienst

Der Dienst, welcher letztendlich die zu archivierenden Nachrichten entgegennimmt, bedient sich der Konfiguratinsdatei „/etc/piler.conf“:

Das „postinstallation utility“ hat hier bereits ganze Arbeit geleistet, lässt dennoch nicht nur Platz für Feinabstimmungen…

WICHTIG ist die Anpassung des Parameters hostid, welcher dem Host der Archive-Mailadresse entsprechen sollte, das bedeutet:

nano /etc/piler.conf
[...]
# Archive-Mailadresse: archive@piler.domain.tld
hostid=piler.domain.tld

Ein Hinweis dazu: Stimmt „hostid“ nicht mit dem Host-Teil aus der Mailadresse überein, erkennt Piler den Archiv-Adressaten als gewöhnlichen Empfänger. (Weiteres hierzu: https://www.mail-archive.com/piler-user@list.acts.hu/msg00643.html)

Ein Blick auf die übrigen Parameter offenbart (größtenteils) Selbsterklärendes. Ansonsten verweise ich auf die Dokumentation sowie die Mailing List.

Besonders Interessant ist womöglich der Ausschluss von als Spam markierten Nachrichten: spam_header_line=X-Spam-Flag: YES

Im Gegensatz zum Webdienst, erfordern obige Änderungen einen Neustart des Dienstes:

service rc.piler restart

Zugriff begrenzen

Piler wird auf Port 25 als eine Art SMTPd auf Mails warten, versteht sich aber nicht als echter MTA. Es besteht keine Sorge, ein offenes Mail-Relay im Netzwerk zu haben.
Aber Vorsicht: Lediglich der eigene Mailserver sollte in der Lage sein, Nachrichten an Piler zu übermitteln!
Da die Piler Installation mit dem Parameter „–enable-tcpwrappers“ konfiguriert wurde, können wir den Zugriff bequem über die Datei „/etc/hosts.allow“ regeln:

nano /etc/hosts.allow

Inhalt:

piler: IP.DES.MAIL.SERVERS: ALLOW
piler: 127.0.0.1: ALLOW
piler: ALL: DENY

Die Adresse „127.0.0.1“ wird für den Piler-eigenen Health-Check ebenfalls zugelassen.
Alternativ/(Zusätzlich) lässt sich der Zugriff via „iptables“ einschränken.


STARTTLS konfigurieren

Durch die Konfigurationsoption --enable-starttls wurde bereits die STARTTLS-Funktion des SMTPd in aktiviert:

/etc/piler.conf

tls_enable=1
pemfile=/etc/piler.pem
cipher_list=HIGH:MEDIUM

Per Standard wird ein Zertifikat auf den Namen „www.example.com“ installiert, das ersetzt werden möchte:

openssl genrsa 2048 > /etc/piler.pem
chmod 600 /etc/piler.pem
openssl req -new -sha256 -key /etc/piler.pem > 1.csr
# 10 Jahre Gültigkeit, Abfrage der Stammdaten:
openssl x509 -in 1.csr -out 1.cert -days 3650 -req -signkey /etc/piler.pem
cat 1.cert >> /etc/piler.pem
Ein drittes Debian-System (etwa der einliefernde Mailserver) kann mit dem Zertifikat vertraut gemacht werden, indem der Zertifikats-Teil in der Datei /etc/piler.pem zwischen -----BEGIN/END CERTIFICATE----- extrahiert und auf dem Ziel-System als /usr/local/share/ca-certificates/piler.crt abgelegt wird. Anschließend reicht die Ausführung des Scripts update-ca-certificates, um das Zertifikat aufzunehmen.

Den Dienst anschließend wieder neustarten:

service rc.piler restart

Konfiguration des Mailservers

Die Archivierung funktioniert, indem der MTA angewiesen wird, jede durchlaufende Nachricht als Blindkopie an Piler zu versenden.

Postfix bewerkstelligt das mit dem Parameter „always_bcc„.

Vielleicht ist dem ein oder anderen beim Durchstöbern der Piler-Konfiguration zudem folgender Parameter aufgefallen:

extra_to_field=X-Envelope-To:

Ein X-Header soll dafür sorgen, dass ALLE Adressaten von Piler erfasst werden können. Hier ein Beispiel:

Ich versende eine Mail an Max und setze Tom auf BCC. Eine weitere Blindkopie erhält der Piler-Dienst.
Piler sieht Tom (Empfänger), mich (Absender) und sich selbst (BCC). Jeder weitere BCC-Addressat bleibt verborgen.

Das „Problem“ wird umgangen, indem ein „X-Envelope-To“ X-Header vom MTA im Nachrichtenkopf gesetzt wird, der ALLE Empfänger beinhaltet.
Auch wenn der X-Header nicht sofort ersichtlich ist, ist er vorhanden. Er kann von allen weiteren Empfängern ausgelesen werden.
Das kann unter Umständen ein Bruch der Richtlinie bedeuten und sollte vorher gut durchdacht werden…


Beispiel-Konfiguration (ohne „X-Envelope-To“)

/etc/postfix/main.cf

# In allen drei Parametern darf "piler.domain.tld" NICHT auftauchen!
# Das verhindert externe Zustellung an das Archiv.
mydestination = domain.tld
virtual_mailbox_domains = domain.tld
relay_domains = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 IP.MAIL.PILER.SERVER
always_bcc = archive@piler.domain.tld
transport_maps = hash:/etc/postfix/transport
smtpd_recipient_restrictions = permit_mynetworks,
  ...
  ...

/etc/postfix/transport

piler.domain.tld   smtp:[IP.MAIL.PILER.SERVER]:25

Erweiterung um „X-Envelope-To“

Wer nicht die Hände vom „X-Envelope-To“ X-Header lassen möchte, kann sich eines Workarounds bedienen.
In diesem Fall wird immer besagter X-Header angehangen, jedoch wieder entfernt, wenn der Transport/nächste Hop „smtp“ oder „lmtp“ lautet.

/etc/postfix/main.cf

smtpd_recipient_restrictions = ...,
  check_recipient_access pcre:/etc/postfix/x-add-envelope-to,
  ...
transport_maps = hash:/etc/postfix/transport

/etc/postfix/x-add-envelope-to

/(.*)/   prepend X-Envelope-To: $1

Nachrichten an Piler werden via „smtp_keep_envelope_to“ versendet:
/etc/postfix/transport

piler.domain.tld   smtp_keep_envelope_to:[IP.MAIL.PILER.SERVER]:25

„smtp“ sowie „lmtp“ entfernen den X-Header wieder. Alle anderen Transporte nicht:

/etc/postfix/master.cf

smtp_keep_envelope_to      unix  -       -       -       -       -   smtp
smtp      unix  -       -       -       -       -       smtp
  -o smtp_header_checks=pcre:/etc/postfix/x-remove-envelope-to
lmtp      unix  -       -       -       -       -       lmtp
  -o lmtp_header_checks=pcre:/etc/postfix/x-remove-envelope-to 

23 Antworten auf “Sichere E-Mail-Archivierung mit Piler

  1. Alois Schickel

    Servus,

    piler 1.2.0 ist seit dem 17.10.2016 verfügbar.

    Wie sieht es mit dem update aus? Schon einmal gemacht?

    Laut Doku soll man lediglich „mysql -u piler -p piler < util/db-upgrade-1.1.0-vs-1.2.0.sql" ausführen, also die DB anpassungen und das GUI Verzeichnis "drüberbügeln".

    Ist das wirklich alles??

    Grüße

  2. Alois Schickel

    Vielen Dank für die Doku.

    Ich habe es auf meinem Debian Jessie (mit ISPConfig 3.1) zum laufen bekommen, mit einigen Anpassungen.

    Leider habe ich ein „kleines Problemchen“ noch mit Piler:

    Alle 15 Minuten wird folgender cron-Job ausgeführt:
    */15 * * * * /usr/bin/indexer –quiet tag1 –rotate

    Wenn ich diesen manuell ausführe (ohne –quiet), funktioniert alles. Wenn aber der cron startet, dann bekomme an root eine Mail, dass die Ausführung fehlgeschlagen ist:
    FATAL: failed to lock /var/piler/sphinx/tag1.tmp.spl: Resource temporarily unavailable, will not index. Try –rotate option

    Meine Recherchen haben leider nichts ergeben, warum hier der Fehler auftritt.

    Vielleicht hat hier jemand einen kleinen Hint dau?

    Grüße

    1. Alois Schickel

      Ich habe den Fehler…..

      Nach „make postinstall“ kommt ein outpit bzgl. der crontab. Ich habe diesen als user root in die cron eingetragen.

      In der oben geschilderten Fehlermeldung seht: failed to lock /var/piler/sphinx/tag1.tmp.spl: Resource temporarily unavailable
      Warum? Weil „postinstall“ die gleiche cron als user piler anlegt. Somit ist klar, warum er manche Files nicht locken kan oder warum die Resource „unavailable“ – weil 2 jobs gleichzeitig versuchen eine Sache auszuführen. Ich habe dann den cron aus root gelöscht und siehe: es läuft ;)

      Noch einmal danke für die Doku. Piler ist definitiv besser als MailArhiva (die alte open source version).

  3. Mike

    Hallo André,

    super Anleitung, danke!
    Habe jedoch folgendes Problem – achja und Linux-Anfänger bitte um Verständnis :-)
    Wenn ich im Web meinen Server Aufrufe erhalte ich folgende Ansicht:

    ?php class ControllerLoginLogin extends Controller { private $error = array(); public function index(){ $this->id = „content“; $this->template = „login/login.tpl“; $this->layout = „common/layout-empty“; if(Registry::get(‚username‘)) { header(„Location: search.php“); exit; } $request = Registry::get(‚request‘); $session = Registry::get(’session‘); $db = Registry::get(‚db‘); $this->load->model(‚user/auth‘); $this->load->model(‚user/user‘); $this->load->model(‚user/prefs‘); $this->load->model(‚domain/domain‘); $this->load->model(‚folder/folder‘); if(ENABLE_SAAS == 1) { $this->load->model(’saas/ldap‘); $this->load->model(’saas/customer‘); } $this->data[‚title‘] = $this->data[‚text_login‘]; $this->data[‚title_prefix‘] = TITLE_PREFIX; $this->data[‚failed_login_count‘] = $this->model_user_auth->get_failed_lo$ if($this->request->server[‚REQUEST_METHOD‘] == ‚POST‘ && $this->validate($ if($this->model_user_auth->checkLogin($this->request->post[‚username‘]$ if($session->get(„ga_block“) == 1) { header(„Location: “ . SITE_URL . „index.php?route=login/ga“); exit; } else if($session->get(„four_eyes“) == 1) { header(„Location: “ . SITE_URL . „index.php?route=login/foureyes$ exit; } else { $data = $session->get(„auth_data“); $this->model_user_auth->apply_user_auth_session($data); $session->remove(„auth_data“); $this->model_user_prefs->get_user_preferences($session->get(‚use$ if(ENABLE_SAAS == 1) { $this->model_saas_customer->online($session->get(‚email‘)); } LOGGER(‚logged in‘); if(isAdminUser() == 1) { header(„Location: “ . SITE_URL . „index.php?route=health/heal$ exit; } header(„Location: “ . SITE_URL . „search.php“); exit; } } else { $this->model_user_auth->increment_failed_login_count($this->data[‚f$ $this->data[‚failed_login_count‘]++; } $this->data[‚x‘] = $this->data[‚text_invalid_email_or_password‘]; } if(ENABLE_GOOGLE_LOGIN == 1) { $client = new apiClient(); $client->setApplicationName(GOOGLE_APPLICATION_NAME); $client->setScopes(array( ‚https://www.googleapis.com/auth/userinfo.email‘, ‚https://www.googleapis.com/auth/userinfo.profile‘, ‚https://mail.google.com/‘, )); $client->setClientId(GOOGLE_CLIENT_ID); $client->setClientSecret(GOOGLE_CLIENT_SECRET); $client->setRedirectUri(GOOGLE_REDIRECT_URL); $client->setDeveloperKey(GOOGLE_DEVELOPER_KEY); $this->data[‚auth_url‘] = $client->createAuthUrl(); } $this->render(); } private function validate() { if(strlen($this->request->post[‚username‘]) error[‚username‘] = $this->data[‚text_invalid_username‘]; } if(CAPTCHA_FAILED_LOGIN_COUNT > 0 && $this->data[‚failed_login_count‘] > $ require_once $_SERVER[‚DOCUMENT_ROOT‘] . ‚/securimage/securimage.php‘; $image = new Securimage(); if($image->check($this->request->post[‚captcha‘]) != true) { $this->error[‚captcha‘] = ‚captcha error‘; } } if (!$this->error) { return true; } else { return false; } } } ?>

    Nun komme ich nicht wirklich weiter…vielleicht kannst du mir da helfen, wäre echt super!
    Danke und Grüße Mike

  4. Christian

    Hallo André,

    danke für die super Anleitung. Habe nach einigen Umwegen den Mailpiler zum laufen bekommen. Allerdings zeitweise das Problem das Nachrichten nicht übermittelt werden. Als Mailserver dient ein MS Exchange 2010. Dort habe ich jetzt das Sizelimit im Sendeconnector von 10 auf 100 MB hochgesetzt. Gibt es seitens Mailpiler auch eine Größenbeschränkung?

    Gruß
    Christian

  5. Andreas Günther

    Hallo,
    ich benutze Postfix 2.11.3 mit Dovecot 2.2.13 auf Debian Jessie. Ich habe nach dieser Anleitung Piler installiert und kann mich gegenüber dem IMAP nicht authentifizieren:
    „2016-02-01 10:42:59 imap-login: Info: Disconnected (no auth attempts in 0 secs): user=, rip=195.84.48.32, lip=192.168.1.2, TLS handshaking: SSL_accept() failed: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca: SSL alert number 48“
    Ich habe wie oben
    $config[‚ENABLE_IMAP_AUTH‘] = 1;
    $config[‚IMAP_HOST‘] = ‚mail.example.com‘; ‚ hier stehen selbstverständlich meine Daten
    $config[‚IMAP_PORT‘] = 993;
    $config[‚IMAP_SSL‘] = true;
    ergänzt. Allerdings mein Dovocot erwartet als Authentifizierung die Benutzermail in der Form „user@example.com“ zuzüglich das Passwortes. Via Mailclients klappt das, auch RoundCube via Webdienst klappt. Lediglich Piler erzeugt obige Fehlermeldung in den Logs auf Dovecot. Möglicherweise fehlt das Server-Zertifikat, wo wird das Piler bekannt gemacht.
    Des Weiteren passt die Apache2-Konfiguration nur bis Apache 2.2, ab Apache 2.4 wird folgende Direktive notwendig:

    Options +Indexes +FollowSymLinks +MultiViews
    AllowOverride All
    Require all granted

    Ich freue mich, wenn ich einen Lösungsweg für die fehlerhafte Authentifizierung erhalte.

    Besten Dank,
    Andreas

    1. Andreas Günther

      In der error.log des Apache finde ich passend zu dem Login-Prozess folgenden Eintrag:
      [Tue Feb 02 17:51:33.950952 2016] [:error] [pid 12718] [client 93.193.107.219:47115] PHP Fatal error: Uncaught exception ‚Zend_Mail_Protocol_Exception‘ with message ‚cannot connect to host; error = (errno = 0 )‘ in /var/www/piler/Zend/Mail/Protocol/Imap.php:100\nStack trace:\n#0 /var/www/piler/Zend/Mail/Protocol/Imap.php(61): Zend_Mail_Protocol_Imap->connect(‚mail.example…‘, 993, true)\n#1 /var/www/piler/model/user/auth.php(348): Zend_Mail_Protocol_Imap->__construct(‚mail.example…‘, 993, true)\n#2 /var/www/piler/model/user/auth.php(49): ModelUserAuth->checkLoginAgainstIMAP(‚wambui@examp…‘, ‚SuqerGheim‘, Array)\n#3 /var/www/piler/controller/login/login.php(44): ModelUserAuth->checkLogin(‚wambui@examp…‘, ‚SuqerGheim‘)\n#4 [internal function]: ControllerLoginLogin->index()\n#5 /var/www/piler/system/front.php(36): call_user_func_array(Array, Array)\n#6 /var/www/piler/system/front.php(14): Front->execute(Object(Router))\n#7 /var/www/piler/index.php(113): Front->dispatch(Object(Router), Object(Router))\n#8 {main}\n thrown in /var/www/piler/Zend/Mail/Protocol/Imap.php on line 100, referer: http://piler.example.com/login.php

      Hier fällt mir sofort auf, dass „mail.example…“ genauso der Username „wambui@examp…“ abgeschnitten sind. Das würde vielleicht erklären, warum im Dovecot-Log „user=“ leer bleibt.
      Zudem finde ich nicht die Funktion imap_open[]:
      /var/www/piler $ grep -r imap_open *
      Wo ist die Funition zur Authentifizierung gegenüber dem Mailserver?

  6. Constantin

    Hallo André,

    vielen Dank für die geniale Anleitung.

    Ich habe piler danach aufgesetzt, habe jetzt aber noch das Problem, dass er sich an IPv6 bindet und die IP4 Verbindung komplett ignoriert.

    Ich verwende Debian 7 und piler 1.1.1.

    Muss ich da noch etwas in den config-Files eintragen?

    Grüße und vielen Dank für Deine Hilfe

    Constantin

    1. Constantin

      Hallo,

      ich hab da noch ne Frage:

      Warum zeigt das WebInterface die Grafiken nur als Platzhalter an. Muss da noch irgendetwas eingestellt werden?
      Und gibt es irgendwo eine ausführlichere Anleitung für die Konfiguration der User, Gruppen etc. Das kommt mir etwas zu kurz.

      Vielen Dank für die Hilfe.

      Grüße
      Constantin

    2. André P. Autor

      Hi,
      danke! :-)
      Hast du es mal nur mit deiner IPv4-Adresse als „listen_addr“ versucht? Anstatt „0.0.0.0“. Wobei das trotzallem eigenartig klingt.
      Zu den Grafiken: Wie lautet denn deine Einstellung für $config['SITE_URL']? Und kopiere mal den Pfad einer defekten Grafik, wohin zeigt sie?
      Beste Grüße

      1. Constantin

        Hallo André,

        das binden an IPv6 hat sich inzwischen geklärt. Ich dachte ich muss von 0.0.0.0 auf localhost umstellen. War ein Fehler. Zurück auf 0.0.0.0 und es hat geklappt.

        Die Grafikpfade kann ich im Moment leider nicht posten, weil ich unterwegs bin. Ich schau mal nach, sobald ich wieder an den Rechner komme.

        Vielen Dank für Deine Hilfe.

        PS: Kennst du eine Website, auf der etwas mehr zur Bedienung von Piler geschrieben wird?

        Grüße
        Constantin

  7. joe

    Hallo,

    danke für die schnelle Antwort.
    Im LOG lässt sich folgendes lesen.

    Apr 6 18:01:13 piler piler[5694]: 400000005522add30ade43c400392425e2b8: from=vorname.nachname@——.com, size=4962/0, attachments=0, reference=, message-id=, retention=0, delay=0.06, delays=0.05/0.00/0.00/0.00/0.00/0.00, status=discarded

    Die Mails werden vom Exchnage-Server an piler weitergeleitet.
    Aber piler verwirft diese, als Domainen sind die bekannten im piler hinterlegt.
    Versteh nicht wieso er die Mail nicht erkennt.

    Gruß
    joe

    1. Samurait

      Hallo Joe,

      Ich hatte das Problem ebenfalls,
      ich habe hierfür die Archivierungsregeln gelöscht und mit
      service rc.piler restart
      service rc.searchd restart
      lösen können.

      Gruß Samu

    1. André P. Autor

      Hi, danke. Zwei Dinge: Bin gerade im Ausland/Urlaub, kann schwer helfen. Aber hast du womöglich irgendwo definiert, welche Domains gesichert werden dürfen/sollen? Logge dich mal als ein User ein, für den Mail gesichert werden soll, nicht als Administrator. Vielleicht darf der Admin in deiner Konfiguration die Nachrichten nicht browsen.
      Viele Grüße

      1. Samurait

        Hallo André,

        Ich habe genau das selbe Problem,
        Die Mails werden auch anscheinend abgespeichert, im Admin Bereich unter Statusmonitor steht auch das er 14 Nachrichten Empfangen hat, Egal was ich aber mache und mit welchem User ich mich einlogge kann ich einfach keine Archivierte E-Mail sehen/suchen.
        Überall Leere Postfächer?
        Mit Freundlichen Grüßen,

        Samurait

  8. Sebastian

    Hallo André,
    danke für die tolle Anleitung und für den Hinweis auf die Software, so etwas suche ich schon länger.

    Aber eine Frage hätte ich noch, die ich grad auf die schnelle nicht selbst beantworten kann. Hast du zufällig ne Idee, ob / wie ich die Archivierung nur für bestimmte User aktivieren kann oder alternativ für bestimmte User oder Domains deaktivieren?

    Danke & Gruß,
    Sebastian

    1. André P. Autor

      Hi Sebastian,
      finde die Software auch toll, bin da eher zufällig drauf gestoßen. :-) Und danke!
      Die Archivierung für bestimmte User erreichst du am besten, indem du auf das always_bcc verzichtest und dafür auf die recipient/sender_bcc_maps zurückgreifst:

      sender_bcc_maps = hash:/etc/postfix/bcc_maps
      recipient_bcc_maps = hash:/etc/postfix/bcc_maps

      Anschließend eine Datei /etc/postfix/bcc_maps erstellen mit diesem Inhaltsmuster:

      @gesamte-domain.tld   archive@piler.domain.tld
      user1@domain.tld   archive@piler.domain.tld
      user2@domain-special.tld   archive@piler.domain.tld

      Abschließend „postmappen“ und „reloaden“…

      postmap /etc/postfix/bcc_maps
      postfix reload

      Hier noch weitere Infos: http://www.postfix.org/postconf.5.html#recipient_bcc_maps (verhält sich gleich wie sender_bcc_maps)

      Viele Grüße
      André

  9. Samurait

    Hallo André,

    Ist es möglich piler auf einem Raspberry pi (1 oder 2) zu installieren?
    Oder denkst du das es sich dafür nicht wirklich eignet?

    Wie sieht es aus mit den Problemen in bezug auf DYN-DNS ?
    Mein Szenario wäre (fufix) Mailserver zur normalen nutzung,
    Und Archivierung von allen Mails in Piler zuhause auf dem Raspberry Pi,
    Dort werden nochmals Backups auf eine NAS gemacht und diese in einem Cloudspeicher verschlüsselt hochgeladen.

    Was meinst du?
    Sinnvoll?

    Mit freundlichen Grüßen,
    Samurait

    1. André P. Autor

      Puh, der Raspberry könnte da schon an seine Grenzen stoßen. :-) Kommt aber auch auf den Mailverkehr an. Kann ich dir leider nicht beantworten, müsste man ausprobieren. Aber so eine MySQL-Datenbank macht dem kleinen Ding bestimmt zu schaffen, oder?
      Mit Dyn-DNS gäbe es keine Probleme. Das lässt sich problemlos so einrichten:

      /etc/postfix/main.cf:
      	smtpd_recipient_restrictions = check_client_access hash:/etc/postfix/client_access,
      	  ...
      	  ...
      
      /etc/postfix/client_access:
      	rasppi.dyndns.org	OK
      

      Du könntest dann aber auch unverschlüsselt auf das NAS sichern, denke ich. :-)

      Viele Grüße
      André

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.