Nach bald zwei Jahren, wenig freier Zeit, viel Unentschlossenheit und den üblichen Dramen, die einem das Leben um die Ohren wirft, revanchiere ich mich mit einer Neuauflage zum „Mailserver Artikel“.
Es mag einiges noch unaufgeräumt wirken sein, vergebt mir, die nächsten Zeilen habe ich spontan und in sehr kurzer Zeit geschrieben. Ich bin mir sicher, dass sich die Struktur noch verändert. :-)
An dieser Stelle möchte ich auch einfach mal vielen, vielen Dank sagen. Vielen Dank an euch, die Community, die ihr mir so unglaublich viel Feedback gegeben- und garantiert auch in vieler Hinsicht belehrt habt.
Das betrifft jeden einzelnen Artikel, den ich in den letzten Monaten, fast schon Jahren, geschrieben habe.
Der Geschmack, der ersten von Spenden finanzierten Pizza. Daran erinnere ich mich besonders gerne zurück, glaube ich… :-)
Zurück zum Thema.
Einige Eckdaten des Beispielsystems:
- Debian Jessie (8.0)
- Es genügt schon ein Single-Core System mit etwa 1GB RAM, lediglich ClamAV ist etwas hungriger nach Resourcen.
- Viel wichtiger ist einem Mailserver ausreichende Disk-Leistung. Aber auch erst dann, wenn es ernst wird; und das kann dauern.
Ein Server sollte seinen RAM belegen, denkt daran.
Einige Versionen aus dem Debian Jessie Repository:
- Nginx 1.6.2 – Der Webserver, der über HTTPS angesprochen werden soll.
- MySQL 5.5.43 – Eine Datenbank dient der gesamten Mailbox-Verwaltung. Eine weitere Datenbank wird von Roundcube verwendet.
- PHP 5.6.7 – Die Webanwendungen Roundcube und ViMbAdmin arbeiten mit dem PHP-Intepreter zusammen.
- Postfix 2.11 – Der MTA: Zuständig für den Transport von Nachrichten.
- Amavis 2.10.1 – Amavis dient als Content-Filtern und signiert die Nachrichten nach DKIM.
-> ClamAV 0.98.6 – Prüft Nachrichten auf schädlichen Inhalt.
-> Spamassassin 3.4.0 – Ein erprobter Spamfilter.
Anwendungen externer Quellen, die Versionen variieren.
- Dovecot 2.2.x – Der MDA, IMAP- und POP3-Server Dovecot zeugt von höchster Stabilität. In stetiger Entwicklung, daher Installation aus offiziellem Repository.
- Roundcube 1.1.x – Unterstützt den gesamten Dovecot Umfang
- ViMbAdmin 3, sollte nicht mehr als Fork von Postfixadmin betrachtet werden, dient aber ebenso zur Vewaltung der und Mailboxen.
Variablen im Artikel
- Als Hostnamen verwende ich in diesem Artikel mail.domain.tld.
- Die primäre Maildomäne wird domain.tld lauten.
- Platzhalter der primären IP, unter der mein Mailserver extern erreichbar ist, verwende ich 1.2.3.4.
- Passwörter lauten immer changeme.
Im Schnelldurchlauf: Funktionsweise und Vorwort
Annehmen wird Postfix Mails von nicht-autentifizierten Sendern auf Port 25. Vorgeschaltet ist Postscreen, ein Prozess, welcher entscheidet, ob es sich beim Sender um einen „Zombie“ handelt. Zombies können u.a. Spambots sein, die sich an keine/wenige Regeln halten und sich schon beim verbinden auf einfachster Ebene verdächtig anstellen. Auch übernimmt es die Aufgabe, eine IP gegen Blacklists zu prüfen. Postscreen ist in hohem Maße effizient und extrem simpel. Es ist in seiner Fähigkeit so beschränkt, dass es gültige Verbindungen an einen dafür vorgesehenen SMTP-Dienst durchreichen muss, um sie weiter zu verarbeiten.
Auf Port 587, gedacht zur authentifizierten Nachrichtenübertragung („Submission“), arbeitet kein Postscreen Prozess. Postscreen würde Verbindungen von dynamischen Anschlüssen (etwa DSL, Cable) sofort abstrafen und unterbinden.
Beide SMTP-Dienste reichen empfangene Nachrichten an Amavis weiter. Amavis fungiert als SMTP-Proxy. Nachrichten nicht-authentifizierter Benutzer werden Amavis auf Port 10024 erreichen, alle weiteren wiederum auf Port 10025. Amavis wird angewiesen, Nachrichten auf Port 10025 als „von seinem System stammend“ zu behandeln („originating“). Auch werden lediglich solche Nachrichten DKIM-signiert.
Entscheidet sich Amavis dafür, die Nachricht anzunehmen, wird sie nach Bearbeitung in beiden Fällen auf Port 10035 Postfix zurückgeführt.
Postfix wird die Transportregeln nach weiterem Vorgehen befragen und womöglich LMTP verwenden, um Dovecot die Nachricht final zu übermitteln. Die LMTP-Verbindung wird verschlüsselt (Achtung: Funktioniert nicht mit Dovecot aus dem Debian <= Jessie Repository. Unter anderem daher wird Dovecot aus dem offiziellen Dovecot Repository installiert.).
LTMP versteht sich als relativ simple Ableitung des SMTP-Protokolls und wird hauptsächlich zu diesem Zweck verwendet. Es ähnelt als Abkömmling - logischerweise - stark dem SMTP.
Dovecot verwendet in nachstehender Konfiguration das Maildir-Format. Layout- und Namespace-Separator lauten „/“, hauptsächlich um höchste ACL-Kompatibilität zu erreichen. Benutzernamen mit dem Satzzeichen „.“ stehen aus Erfahrung im Konflikt.
Das Hauptverzeichnis für virtuell geroutete Nachrichten lautet /var/vmail. Die weitere Struktur wird unterteilt in Domäne/Benutzer/, das „Maildir“ des Benutzers zuletzt im Unterordner „Maildir“ abgelegt. Für den Benutzer user1@domain1.tld ergibt so die Ordnerstruktur /var/vmail/domain1/user1/Maildir
oder einfacher: ~/Maildir
.
Dovecot stellt Postfix verschiedene Dienste zur Verfügung. Postfix ist unter anderem nicht in der Lage – und möchte auch nicht in der Lage sein -, Absender zu authentifizieren. Es greift auf einen Socket zurück, den Dovecot mit Hilfe des SASL-Mechanismus bereitstellt.
Was fehlt? …und warum?
Wo ist das Greylisting? Wo sind die Scripts, um Spam anzulernen?
Der ein oder andere könnte meine Meinung zum Greylisting bereits kennen. Wer es möchte, kann es einbinden.
Ich bin der Meinung, dass 99% der durch Greylisting abgestraften Mailserver zu Unrecht (temporär) blockiert werden. Ein kompromittierter E-Mail Account, etwa von Google Mail, wird sich an Greylisting nicht stören. Google Server versenden nach einem Fehlversuch erwartungsgemäß ein zweites mal.
Echte Spambots/Zombies werden wesentlich (!) performanter durch Postscreen ausgeschlossen. Hierbei wird auch kein temporärer Fehlercode missbraucht und die Zustellung nicht verzögert.
Das größte Übel: Ein fehlkonfigurierter Absender, der keinen zweiten Zustellversuch unternimmt und die Nachricht als unzustellbar zurück sendet.
Auch das Anlernen von Spam sehe ich zwiespältig. Einen Spamfilter vernünftig anzulernen, ist viel schwieriger als mancher es glauben mag. Zu schnell und unüberlegt bringen wir ihm bei, wie das Filtern nicht funktioniert. :-) Die größte Schuld an „false-positives“ tragen genau diese Lehrversuche.
Kompromittierte Mail-Accounts stellen hier wieder ein großes Problem dar. Ein vertrauter Server versendet authentifizierten Spam. Spamfilter werden der Tatsache, dass der Benutzer authentifizert ist, eine viel höheren Bedeutung zusprechen als der Tatsache, dass 2-3 mal ein dubioses Wort im Text zu finden ist. Hier zu filtern ist ein Drahtseilakt.
Spamfilter sind heutzutage sehr effizient. Zusammen mit Postscreen filtern sie die üblichen Verdächtigen bravorös aus.
Noch einmal kurz und knapp, wie konfiguriere ich meinen Client?
IMAP – Mit STARTTLS auf Port 143, im SSL Wrapper auf Port 993
SMTP – Mit STARTTLS auf Port 587, Port 25 wird als Client bitte nie verwendet.
Inhaltsverzeichnis
1. First things first
2. Webserver
2.1 Webanwendungen
3. Mailserver
3.1 Postfix
3.2 Dovecot
3.3 Content-Filter
4. Dienste neustarten
1. First things first
Nachdem das Debian Jessie System frisch aufgesetzt wurde, vergewissert euch noch einmal, dass die Grundkonfiguration stimmt.
timedatectl set-timezone Europe/Berlin hostnamectl set-hostname mail.domain.tld
Bitte nehmt Abstand davon, einen Hostnamen domain.tld
zu verwenden. domain.tld
alleine ist kein Hostname.
Wählt einen FQDN, der sich aus Hostnamen und Domäne zusammensetzt.
Ich gehe in diesem Artikel von einem Server aus, der sich lediglich im öffentlichen Netz bewegt. Ein interner Name kommt daher nicht in Frage.
Die Datei /etc/hosts
sollte mindestens Folgendem entsprechen:
127.0.0.1 localhost 1.2.3.4 mail.domain.tld mail # ...
Im Terminal teste ich die korrekte Einrichtung:
# hostname -a mail # hostname -d domain.tld # hostname -f mail.domain.tld
Warum ist der Hostname bei einem Mailsystem so wichtig?
Zwar wird der Hostname auch in diesem Artikel gezielt noch einmal in der Postfix-Konfiguration gesetzt.
Es ist dennoch wichtig, dass alle Komponenten im System den korrekten Namen kennen und tragen. Mailserver verwenden strikte Regelwerke, das ist dem hohen Spamaufkommen geschuldet. Das Mindeste, das wir tun können, um diese Kontrollen zu bestehen, ist uns an die Standards zu halten, also RFC-konform zu sein.
RFC-Konformität bedeutet unter anderem, dass unser Mailserver beim Verbindungsaufbau, einen FQDN nennt (Postfix: „myhostname“), der zu seiner IP auflöst und vice versa:
# Server A, mail.domain.tld (1.2.3.4), verbindet sich mit Server B, mail.example.com (2.3.4.5):
> HELO mail.domain.tld
# Interne Prüfung durch mail.example.com: Löst 1.2.3.4 nach mail.domain.tld auf (rDNS)? Löst mail.domain.tld nach 1.2.3.4 auf? Wenn ja, weiter machen…
< HELO mail.example.com ...
Daher bitte unbedingt einen korrekten Reverse-DNS Eintrag vorhalten!
Die meisten Benutzer werden heute einen (virtuellen) Server angemietet haben. Der ISP hält dafür in 99% aller Fälle eine Möglichkeit bereit, einen solchen Eintrag für die entsprechende IP eigenständig zu setzen. Diese Konfiguration ist nicht Bestandteil des lokalen Systems.
2. Webserver
In den ersten Schritten werden folgende Anwendungen installiert und weitesgehend konfiguriert:
- Nginx (HTTPS)
- PHP5
- MySQL
Die Anwendungen werden mit einem Einzeiler installiert:
apt-get -y install nginx-full php-auth-sasl php-http-request php-mail php-mail-mime php-mail-mimedecode php-net-dime php-net-smtp php-net-socket php-net-url php-pear php-soap php5 php5-cli php5-common php5-curl php5-fpm php5-gd php5-imap php-apc php5-intl php5-mcrypt php5-mysql libawl-php php5-xmlrpc mysql-client mysql-server ca-certificates
Die Mailboxverwaltung sollte über HTTPS erfolgen, daher erstelle ich vorab ein selbst-signiertes Zertifikat in /etc/ssl, das den Namen des FQDN trägt. Der Befehl kann 1:1 so kopiert werden, der Hostname wird automatisch ermittelt:
openssl req -new -newkey rsa:4096 -sha256 -days 1095 -nodes -x509 -subj "/C=DE/ST=STATE/L=CITY/O=MAIL/CN=`hostname -f`" -keyout /etc/ssl/`hostname -f`.key -out /etc/ssl/`hostname -f`.cer
Der Key wird im Anschluss vor unbefugtem Zugriff geschützt:
chmod 600 /etc/ssl/`hostname -f`.key
/etc/ssl/mail.domain.tld.cer
ablegen, den Key analog dazu als /etc/ssl/mail.domain.tld.key
Bitte Folgendes nur bei einem selbst-signiertem Zertifikat ausführen, um dem Zertifikat zu vertrauen:
cp /etc/ssl/`hostname -f`.cer /usr/local/share/ca-certificates/ update-ca-certificates
Einige Anwendungen verweigern den Dienst, wenn das Zertifikat selbst-signiert und nicht vertrauenswürdig ist. Das betrifft unter anderem Roundcube und die IMAP-Schnittstelle neuerer PHP Versionen.
PHP sollte nun unsere Zeitzone kennenlernen, dazu bitt die entsprechende Konfiguration öffnen:
nano /etc/php5/fpm/php.ini
Die relevante Zeile wird editiert:
date.timezone = Europe/Berlin
Den Dienst im Anschluss neuladen:
systemctl reload php5-fpm.service
Nun endlich kann die Nginx Site-Konfiguration erstellt und aktiviert werden.
nano /etc/nginx/sites-available/mailserver
Der Inhalt im Folgenden.
Bitte ändert die Werte für server_name, ssl_certificate und ssl_certificate_key entsprechend eurer Konfiguration ab.
server { server_name mail.domain.tld; listen 443 ssl; listen [::]:443 ssl; ssl on; ssl_certificate /etc/ssl/mail.domain.tld.cer; ssl_certificate_key /etc/ssl/mail.domain.tld.key; # Einige Optionen nach Bettercrypto ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA'; add_header Strict-Transport-Security max-age=15768000; ssl_session_cache shared:SSL:5m; ssl_session_timeout 30m; client_max_body_size 0; root /var/www/html; index index.html index.htm index.php; location / { try_files $uri $uri/ index.php; } # Zugriff auf Roundcube Logs, sollte von außerhalb nicht möglich sein location ~ ^/webmail/logs/ { deny all; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_read_timeout 630; fastcgi_keep_conn on; # Dient ViMbAdmin, da Nginx keine htaccess-Datei einlesen wird fastcgi_param APP_ENV production; fastcgi_pass unix:/var/run/php5-fpm.sock; } # Können sensible Daten enthalten, Nginx verwertet sie nicht location ~ /\.ht { deny all; } location = /favicon.ico { log_not_found off; access_log off; } # Keine Notwendigkeit location = /robots.txt { deny all; log_not_found off; access_log off; } location /admin { # Rewrite fix für ViMbAdmin try_files $uri $uri/ /admin/index.php?$args; } }
Die Site-Konfiguration wird im Nginx Server aktiviert und der Dienst neugeladen:
ln -s /etc/nginx/sites-available/mailserver /etc/nginx/sites-enabled/ systemctl reload nginx.service
Zwei Datenbanken werden im nächsten Schritt angelegt. Im selben Schritt wird jeweils ein Benutzer das Recht erhalten, in jeweiliger Datenbank zu arbeiten.
# ViMbAdmin: Datenbankname vimbadmin, Username vimbadmin mysql --defaults-file=/etc/mysql/debian.cnf -e "CREATE DATABASE vimbadmin; GRANT ALL ON vimbadmin.* TO 'vimbadmin'@'localhost' IDENTIFIED BY 'changeme'; FLUSH PRIVILEGES;" # Roundcube: Datenbankname roundcube, Username roundcube mysql --defaults-file=/etc/mysql/debian.cnf -e "CREATE DATABASE roundcube; GRANT ALL ON roundcube.* TO 'roundcube'@'localhost' IDENTIFIED BY 'changeme'; FLUSH PRIVILEGES;"
2.1. Webanwendungen
Nachdem der Webserver vorbereitet ist, kann mit der Installation der Webanwendungen Roundcube und ViMbAdmin begonnen werden.
Die Abhängigkeiten vorab installieren:
apt-get install -y git curl
Mit cURL wird in einem späteren Schritt der PHP-Composer heruntergeladen, git ist eine direkte Abhängigkeit dessen.
Roundcube nun in einem Schritt herunterladen und entpacken. Anschließend wird der Ordner in webmail umbenannt und die Rechte werden angepasst:
cd /var/www/html wget --content-disposition -O - http://sourceforge.net/projects/roundcubemail/files/latest/download | tar xfvz - mv roundcubemail-* webmail
Eine Konfigurationsdatei für Roundcube wird angelegt:
nano /var/www/html/webmail/config/config.inc.php
Der Inhalt, dessen Werte für db_dsnw, default_host und smtp_server angepasst werden müssen.
Hinweis: Der Pfad db_dsnw folgt dem Muster schema://username:password@host/database
.
array( 'allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false, ), ); $config['smtp_conn_options'] = array( 'ssl' => array( 'allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false, ), );
Die Datenbank im nächsten Schritt initialisieren:
mysql --defaults-file=/etc/mysql/debian.cnf roundcube < /var/www/html/webmail/SQL/mysql.initial.sql
Abschließend den Eigentümer des Webroots rekursiv auf "www-data" setzen:
chown -R www-data: /var/www/html
Nun zu ViMbAdmin, das sich im Gegensatz zu Roundcube mit dem PHP Composer installiert.
Den Composer daher vorab installieren und die ausführbare Datei composer.phar
nach /usr/local/bin/
verschieben:
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
Im Anschluss startet die Installation des Paketes ViMbAdmin durch Composer:
composer create-project opensolutions/vimbadmin /srv/vimbadmin -s dev -n --keep-vcs
Nach erfolgreicher Installation, werden noch die Rechte für die Unterverzeichnisse var/
sowie public/
an den Webdienst angepasst:
chown -R www-data: /srv/vimbadmin/{public,var}
Zuletzt eine symbolische Verknüpfung einrichten, um mit dem Browser später das Panel via URL "https://mail.domain.tld/admin" zu erreichen:
ln -s /srv/vimbadmin/public/ /var/www/html/admin
Eine Beispielkonfiguration bringt ViMbAdmin gleich mit. An ihr kann sich orientiert werden:
cp /srv/vimbadmin/application/configs/application.ini.dist /srv/vimbadmin/application/configs/application.ini nano /srv/vimbadmin/application/configs/application.ini
Wichtige Punkte, die unbedingt zu ändern sind, habe ich zusammengefasst. Bitte lest die Datei aufmerksam durch.
;; Die sontigen MySQL-Parameter wie Datenbankname und Benutzer (vimbadmin) stimmen bereits überein, daher brauche ich nur noch das Kennwort durch das vorab festgelegte zu ersetzen resources.doctrine2.connection.options.password = 'changeme' ;; Entspricht dem späteren vmail-Benutzer, dem stellvertretend alle Mailverzeichnisse "gehören" defaults.mailbox.uid = 5000 defaults.mailbox.gid = 5000 ;; Das Maildir wird im Dovecot-Format festgehalten defaults.mailbox.maildir = "maildir:/var/vmail/%d/%u/Maildir:LAYOUT=fs" defaults.mailbox.homedir = "/var/vmail/%d/%u" ;; Einige Details, der Transport sollte per Standard lmtps sein, mit Zeiger auf den passenden Socket defaults.domain.transport = "lmtps:unix:private/dovecot-lmtp" ;; Erlaubt das endgültige Löschen von Mailboxen vom Dateisystem mailbox_deletion_fs_enabled = true ;; Den stärksten Hash-Algorithmus bietet Dovecot durch "doveadm" defaults.mailbox.password_scheme = "dovecot:SHA512-CRYPT" defaults.mailbox.dovecot_pw_binary = "/usr/bin/doveadm pw" ;; Hierbei handelt es sich um die Informationen der Willkommensmail. ;; "mail.%d" (= "mail.domain.tld") trifft für diesen Artikel zu, sollte dem eigenen Hostnamen nach angepasst werden. server.smtp.host = "mail.%d" server.smtp.port = "587" server.smtp.crypt = "TLS" ;; POP3 wird in diesem Artikel nicht verwendet/konfiguriert server.pop3.enabled = 0 ;; Wieder verwende ich "mail.%d" server.imap.host = "mail.%d" server.imap.port = "143" server.imap.crypt = "TLS" ;; Der Webmailer Roundcube ist unter URL/webmail zu erreichen, bitte an den Hostnamen anpassen server.webmail.host = "https://mail.%d/webmail"
Das Archiv-Verzeichnis bitte jetzt erstellen, die Rechte müssen nicht verändert werden (siehe weiter unten zu "Cron"):
mkdir /srv/archives
Es befinden sich neben Parametern wie "Default Quota", die nach eigenem Ermessen verändert werden können, auch noch Angaben zur Identität des Dienstes am Ende der Konfigurationsdatei. Diese Daten sollten selbstverständlich ebenfalls angepasst werden. Bequemen Menschen steht es frei, mit "sed" den Namen "example.com" reihenweise zu ersetzen:
sed -i "s/example.com/domain.tld/g" /srv/vimbadmin/application/configs/application.ini
Damit die Datenbank initialisiert werden kann, benötigt ViMbAdmin noch eine rudimentäre Datei /srv/vimbadmin/public/.htaccess
, die der Beispieldatei /srv/vimbadmin/public/.htaccess.dist
entsprechen darf:
cp /srv/vimbadmin/public/.htaccess.dist /srv/vimbadmin/public/.htaccess
Die Einrichtung der Datenbank kann nun beginnen:
cd /srv/vimbadmin/ ./bin/doctrine2-cli.php orm:schema-tool:create
Das Tool beendet seinen Dienst etwa mit folgenden Informationen:
ATTENTION: This operation should not be executed in a production environment. Creating database schema... Database schema created successfully!
Noch einmal wird die Konfigurationsdatei ViMbAdmins geöffnet, um letzte Informationen einpflegen zu können.
nano /srv/vimbadmin/application/configs/application.ini
Parallel in einem Browser die URL https://mail.domain.tld/admin aufrufen und den Anweisungen nach die drei fehlenden Parameter für das Salting in der geöffneten Datei ergänzen.
Nach dem Hinzufügen des administrativen Accounts, wurde ViMbAdmin in Hinsicht seiner Fähigkeit als Webanwendung erfolgreich installiert und konfiguriert.
Cron wird abschließend noch angewiesen, die Archiv- und Lösch-Funktion ViMbAdmins zu automatisieren. Hierbei handelt es sich um Funktionen, die "root" ausführen muss.
Einzig die Aufgabe des Löschens, könnte dem Benutzer "vmail" zugeordnet werden, das nur als Hinweis.
crontab -e
An das Ende der Datei einzufügen:
# Die 10. Minute jeder 2. Stunde 10 */2 * * * /srv/vimbadmin/bin/vimbtool.php -a archive.cli-archive-pendings # Die 30. Minute jeder 2. Stunde 30 */2 * * * /srv/vimbadmin/bin/vimbtool.php -a archive.cli-restore-pendings # Die 50. Minute jeder 2. Stunde 50 */2 * * * /srv/vimbadmin/bin/vimbtool.php -a archive.cli-delete-pendings # 3:15 AM 15 3 * * * /srv/vimbadmin/bin/vimbtool.php -a mailbox.cli-delete-pending
3. Mailserver
3.1 Postfix
Postfix gibt sich in seinen Abhängigkeiten bescheiden:
apt-get install postfix-mysql postfix-pcre postfix
Zu Beginn erstelle ich das Verzeichnis /etc/postfix/mysql/
, in welchem diverse SQL-Queries gespeichert werden, mit Hilfe derer Postfix ausfindig macht, welche Domänen wie behandelt werden und ob angefragte Domänen/Mailboxen dem System überhaupt angehören. Im Prinzip fragt Postfix an dieser Stelle ab, was wir vorher durch ViMbAdmin in die Datenbank einpflegen.
mkdir /etc/postfix/mysql/
Innerhalb dieses Ordners werden vier Dateien anglegt:
- postfix-mysql-virtual_alias_maps.cf
- postfix-mysql-virtual_domains_maps.cf
- postfix-mysql-virtual_mailbox_maps.cf
- postfix-mysql-virtual_transport_maps.cf
/etc/postfix/mysql/postfix-mysql-virtual_alias_maps.cf
user = vimbadmin password = changeme hosts = 127.0.0.1 dbname = vimbadmin query = SELECT goto FROM alias WHERE address = '%s' AND active = '1'
/etc/postfix/mysql/postfix-mysql-virtual_domains_maps.cf
user = vimbadmin password = changeme hosts = 127.0.0.1 dbname = vimbadmin query = SELECT domain FROM domain WHERE domain = '%s' AND backupmx = '0' AND active = '1'
/etc/postfix/mysql/postfix-mysql-virtual_mailbox_maps.cf
user = vimbadmin password = changeme hosts = 127.0.0.1 dbname = vimbadmin table = mailbox select_field = maildir where_field = username
/etc/postfix/mysql/postfix-mysql-virtual_transport_maps.cf
user = vimbadmin password = changeme hosts = 127.0.0.1 dbname = vimbadmin table = domain select_field = transport where_field = domain additional_conditions = and backupmx = '0' and active = '1'
Das Passwort kann ebenso im Nachgang mit Hilfe von "sed" ersetzt werden:
sed -i 's/changeme/passwort/g' /etc/postfix/mysql/postfix-mysql-virtual_*
Konfigurationsdateien mit sensiblen Informationen, sollten vor unbefugtem Zugriff geschützt werden:
chown -R root:postfix /etc/postfix/mysql chmod 750 /etc/postfix/mysql/ chmod 640 /etc/postfix/mysql/*
Nun zur Konfiguration des Postfix Servers.
Im ersten Schritt wird eine vorherige Konfiguration gelöscht und eine neue erstellt:
rm /etc/postfix/main.cf nano /etc/postfix/main.cf
Es folgt ein vorrangig in englischer Sprache kommentierter Inhalt. Die "Restrictions" habe ich kurzerhand übersetzt.
# SMTPd greeting banner: You MUST specify $myhostname at the start of the text. This is required by the SMTP protocol. smtpd_banner = $myhostname # Disable local biff service biff = no # Do not append the string $mydomain to -locally- submitted email. append_dot_mydomain = no # Readme directory readme_directory = /usr/share/doc/postfix # HTML directory html_directory = /usr/share/doc/postfix/html # Certificates smtpd_tls_cert_file = /etc/ssl/mail.domain.tld.cer smtpd_tls_key_file = /etc/ssl/mail.domain.tld.key # Opportunistic TLS. TLS auth only. smtpd_tls_security_level=may smtpd_tls_auth_only=yes # TLS session cache for SMTPd smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache # Disallow SSLv2 and SSLv3, only accept secure ciphers smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 smtpd_tls_mandatory_ciphers=high # Log TLS handling smtpd_tls_loglevel = 1 smtp_tls_loglevel = 1 # Delay reject until RCPT TO smtpd_delay_reject = yes # Enable elliptic curve cryptography, "ultra" needs more cpu time smtpd_tls_eecdh_grade = strong # Sender, recipient, client and data restrictions # !! non-FQDN HELOs are rejected on Port 25 only, see master.cf # Auth. Benutzer dürfen auch innerhalb der "mynetworks" nur von den Adressen senden, die ihnen zugehörig sind. smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch, # Erst jetzt werden "mynetworks" zugelassen # Unauth. Benutzer wie der Cron-Dienst können so weiterhin Mails versenden, etwa # als cron@fqdn permit_mynetworks, # Anderen unauth. Benutzern das Benutzen jeder Adresse verbieten. reject_sender_login_mismatch, # Alle auth. jetzt zulassen. permit_sasl_authenticated, # Nicht im System vorhandene Absender jetzt ablehnen reject_unlisted_sender, # Ablehnen, wenn die Sender-Domäne nicht existiert reject_unknown_sender_domain # Akzeptiere alle Empfänger, die ein authentifizierter Absender oder ein Absender aus "mynetworks" angibt smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, # Schnittstelle zu Dovecot, um die Quota live zu überprüfen (verhindert Bounces) check_policy_service unix:private/quota-status, # Ablehnen, wenn der HELO FQDN nicht aufzulösen ist reject_unknown_helo_hostname, # Ablehnen, wenn KEIN PTR zu dieser IP existiert # Verhindert nicht, dass ein FALSCHER PTR abgelehnt wird! # Hierfür würde "reject_unknown_client_hostname" verwendet. reject_unknown_reverse_client_hostname, # Kein offenes Relay reject_unauth_destination # Unauth. Benutzer dürfen ihre Befehle nicht "pipen" smtpd_data_restrictions = reject_unauth_pipelining, permit # Eine Art Tabelle mit vorhanden Identitäten und ihren Zugehörigkeiten smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql/postfix-mysql-virtual_alias_maps.cf # Certificates smtp_tls_cert_file = /etc/ssl/mail.domain.tld.cer smtp_tls_key_file = /etc/ssl/mail.domain.tld.key # Opportunistic TLS. Use TLS if this is supported by the remote SMTP server, otherwise use plaintext. smtp_tls_security_level=may # TLS session cache for SMTP smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # A custom list with secure ciphers. tls_high_cipherlist=EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA # Use the FQDN for the local hostname! myhostname = mail.domain.tld # Alias maps and database for -local- delivery only alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases # The domain name that locally-posted mail appears to come from, and that locally posted mail is delivered to. myorigin = mail.domain.tld # The list of domains that are delivered via the -local- mail delivery transport. No external domains like "domain.tld" belong here! "mail.domain.tld" is fine. mydestination = mail.domain.tld, localhost # We lookup MX records to send non-local mail, so this stays empty relayhost = # Trusted SMTP clients with more privileges. Trusted clients can relay mail. mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 # The maximal size of any -local- individual mailbox mailbox_size_limit = 0 # The maximal size of any -virtual- individual mailbox virtual_mailbox_limit = 0 # Handle Postfix-style extensions recipient_delimiter = + # The network interface addresses that this mail system receives mail on. inet_interfaces = all # Specifies what protocols Postfix will use when it makes or accepts network connections, and also controls what DNS lookups Postfix will use when it makes network connections. inet_protocols = ipv4 # VRFY command is not really needed anymore disable_vrfy_command = yes # Please say hello first... smtpd_helo_required = yes # The SASL plug-in type that the Postfix SMTP server should use for authentication. smtpd_sasl_type=dovecot # Where to passthrough our authentication information for the above plug-in smtpd_sasl_path=private/auth_dovecot # Enable SASL authentication in the Postfix SMTP server. smtpd_sasl_auth_enable = yes # Report the SASL authenticated user name in the smtpd Received message header. smtpd_sasl_authenticated_header = yes # Have Postfix advertise AUTH support in a non-standard way. broken_sasl_auth_clients = yes # The lookup tables that the proxymap server is allowed to access for the read-only service. proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps ## Virtual transport configuration # A prefix that the virtual delivery agent prepends to all pathname results from $virtual_mailbox_maps virtual_mailbox_base = / # THIS contains a list of domains we are the final destination for (unlike "mydestination"). virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/postfix-mysql-virtual_domains_maps.cf # Alias specific mail addresses or domains to other local or remote address. virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/postfix-mysql-virtual_alias_maps.cf # Specify a left-hand side of "@domain.tld" to match any user in the specified domain virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/postfix-mysql-virtual_mailbox_maps.cf # The minimum user ID value that the virtual delivery agent accepts virtual_minimum_uid = 5000 # We use "vmail" user with UID/GID 5000 to lookup tables virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 # The default mail delivery transport and next-hop destination for final delivery to domains listed with "virtual_mailbox_domains" virtual_transport = lmtps:unix:private/dovecot-lmtp transport_maps = mysql:/etc/postfix/mysql/postfix-mysql-virtual_transport_maps.cf ## Queue configuration # Consider a message as undeliverable, when delivery fails with a temporary error, and the time in the queue has reached this limit. maximal_queue_lifetime = 1d # Consider a bounce message as undeliverable, when delivery fails with a temporary error, and the time in the queue has reached this limit. bounce_queue_lifetime = 1d # The time between deferred queue scans by the queue manager. queue_run_delay = 300s # The maximal/minimal time between attempts to deliver a deferred message. maximal_backoff_time = 1800s minimal_backoff_time = 300s # Maximum mail size (500 MiB) message_size_limit = 524288000 # This tarpits a client after 3 erroneous commands for 10s smtpd_soft_error_limit = 3 smtpd_error_sleep_time = 10s smtpd_hard_error_limit = ${stress?1}${stress:5} postscreen_access_list = permit_mynetworks # Drop connections from blacklisted servers with a 521 reply postscreen_blacklist_action = drop # Clean Postscreen cache after 24h postscreen_cache_cleanup_interval = 24h postscreen_dnsbl_ttl = 5m postscreen_dnsbl_threshold = 8 postscreen_dnsbl_action = enforce postscreen_dnsbl_sites = b.barracudacentral.org=127.0.0.2*7 dnsbl.inps.de=127.0.0.2*7 bl.mailspike.net=127.0.0.2*5 bl.mailspike.net=127.0.0.[10;11;12]*4 dnsbl.sorbs.net=127.0.0.10*8 dnsbl.sorbs.net=127.0.0.5*6 dnsbl.sorbs.net=127.0.0.7*3 dnsbl.sorbs.net=127.0.0.8*2 dnsbl.sorbs.net=127.0.0.6*2 dnsbl.sorbs.net=127.0.0.9*2 zen.spamhaus.org=127.0.0.[10;11]*8 zen.spamhaus.org=127.0.0.[4..7]*6 zen.spamhaus.org=127.0.0.3*4 zen.spamhaus.org=127.0.0.2*3 hostkarma.junkemailfilter.com=127.0.0.2*3 hostkarma.junkemailfilter.com=127.0.0.4*1 hostkarma.junkemailfilter.com=127.0.1.2*1 wl.mailspike.net=127.0.0.[18;19;20]*-2 hostkarma.junkemailfilter.com=127.0.0.1*-2 postscreen_greet_banner = $smtpd_banner postscreen_greet_action = enforce postscreen_greet_wait = 3s postscreen_greet_ttl = 2d postscreen_bare_newline_enable = no postscreen_non_smtp_command_enable = no postscreen_pipelining_enable = no postscreen_cache_map = proxy:btree:$data_directory/postscreen_cache
sed -i 's/mail.domain.tld/host.example.com/g' /etc/postfix/main.cf
Nun zu den Diensten, die Postfix bereitstellt. Diese werden mit Hilfe der Datei /etc/postfix/master.cf
definiert, die wir ersetzen:
rm /etc/postfix/master.cf nano /etc/postfix/master.cf
Der Inhalt, wieder weitesgehend kommentiert:
# Postscreen on Port 25/tcp, filters zombies (spam machines) on first level with lowest costs. smtp inet n - n - 1 postscreen # Postscreen passes sane clients to the real SMTP daemon here. smtpd pass - - n - - smtpd # Reject non-FQDN HELOs on Port 25 (after passing postscreen process) -o smtpd_helo_restrictions=permit_mynetworks,reject_non_fqdn_helo_hostname -o smtpd_proxy_filter=127.0.0.1:10024 -o smtpd_client_connection_count_limit=10 -o smtpd_proxy_options=speed_adjust # For mail submitting users. Authenticated clients and known networks only. submission inet n - - - - smtpd -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_proxy_filter=127.0.0.1:10025 -o smtpd_client_connection_count_limit=10 -o smtpd_proxy_options=speed_adjust # Handles TLS connections for postscreen to make them readable tlsproxy unix - - n - 0 tlsproxy # This implements an ad-hoc DNS white/blacklist lookup service dnsblog unix - - n - 0 dnsblog pickup fifo n - - 60 1 pickup cleanup unix n - - - 0 cleanup qmgr fifo n - n 300 1 qmgr tlsmgr unix - - - 1000? 1 tlsmgr rewrite unix - - - - - trivial-rewrite bounce unix - - - - 0 bounce defer unix - - - - 0 bounce trace unix - - - - 0 bounce verify unix - - - - 1 verify flush unix n - - 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - - - - smtp relay unix - - - - - smtp showq unix n - - - - showq error unix - - - - - error retry unix - - - - - error discard unix - - - - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - - - - lmtp anvil unix - - - - 1 anvil scache unix - - - - 1 scache # LMTP with STARTTLS support, needs newer Dovecot versions lmtps unix - - - - - lmtp -o lmtp_use_tls=yes -o lmtp_tls_loglevel=1 -o lmtp_tls_CAfile=/etc/ssl/certs/ca-certificates.crt -o lmtp_enforce_tls=yes -o lmtp_tls_mandatory_protocols=!SSLv2,!SSLv3 -o lmtp_tls_protocols=!SSLv2,!SSLv3 -o lmtp_tls_mandatory_ciphers=high -o lmtp_tls_ciphers=high -o lmtp_send_xforward_command=yes -o lmtp_tls_security_level=encrypt -o lmtp_tls_note_starttls_offer=yes # Amavis reinjection, maximal 5 smtpd Prozesse, muss den Amavis Prozessen entsprechen! 127.0.0.1:10035 inet n - - - 5 smtpd -o smtpd_authorized_xforward_hosts=127.0.0.0/8 -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions= -o mynetworks=127.0.0.0/8 -o receive_override_options=no_unknown_recipient_checks
In dieser Konfigurationsdatei muss nichts weiter angepasst werden.
3.2 Dovecot
Wie zu Beginn erwähnt, erfolgt die Installation aus dem offiziellen Repository Dovecots. Dieses wird zuerst eingebunden und der entsprechende Key installiert:
echo 'deb http://xi.rename-it.nl/debian/ stable-auto/dovecot-2.2 main' > /etc/apt/sources.list.d/dovecot.list apt-get update -y apt-get install --force-yes debian-dovecot-auto-keyring
Die Installation beginnt:
apt-get install dovecot-common dovecot-core dovecot-imapd dovecot-lmtpd dovecot-managesieved dovecot-sieve dovecot-mysql
Dovecot wird angewiesen, einen Benutzer "vmail" mit der UID und GID 5000 zu verwenden. Dieser Benutzer muss noch angelegt werden, ebenso das Heimverzeichnis:
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/vmail mkdir /var/vmail chown -R vmail: /var/vmail/
Eine Konfigurationsdatei wird gelöscht und neu erstellt:
rm /etc/dovecot/dovecot.conf nano /etc/dovecot/dovecot.conf
Der Inhalt:
auth_mechanisms = plain login disable_plaintext_auth = yes login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e %c %k" mail_home = /var/vmail/%d/%n mail_location = maildir:~/Maildir:LAYOUT=fs mail_uid = vmail mail_gid = vmail # notify wird von mail_log benötigt. mail_log informiert in diesem Fall über DELETE und EXPUNGE (weiter unten) mail_plugins = quota acl mail_log notify auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@ ssl_protocols = !SSLv3 !SSLv2 ssl_cipher_list = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA log_timestamp = "%Y-%m-%d %H:%M:%S " passdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } # Der "namespace separator" sollte "/" lauten, da es zusammen mit der ACL zu Konflikten käme, wenn der Benutzername das Zeichen "." enthält. namespace inbox { inbox = yes location = separator = / mailbox Trash { auto = subscribe special_use = \Trash } mailbox "Deleted Messages" { special_use = \Trash } mailbox "Gelöschte Objekte" { special_use = \Trash } mailbox "Papierkorb" { special_use = \Trash } mailbox Archive { auto = subscribe special_use = \Archive } mailbox Archiv { special_use = \Archive } mailbox Sent { auto = subscribe special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox "Gesendet" { special_use = \Sent } mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Entwürfe { special_use = \Drafts } mailbox Junk { auto = subscribe special_use = \Junk } prefix = } # Dieser Namespace wird für die ACL Erweiterung benötigt. # Freigegebene Ordner erscheinen automatisch in der Ordnerliste. namespace { type = shared separator = / prefix = Shared/%%u/ location = maildir:%%h/Maildir:LAYOUT=fs:INDEXPVT=~/Maildir/Shared/%%u subscriptions = yes list = yes } protocols = imap sieve lmtp service dict { unix_listener dict { mode = 0660 user = vmail group = vmail } } service auth { unix_listener /var/spool/postfix/private/auth_dovecot { group = postfix mode = 0660 user = postfix } unix_listener auth-master { mode = 0600 user = vmail } unix_listener auth-userdb { mode = 0600 user = vmail } user = root } service managesieve-login { inet_listener sieve { port = 4190 } service_count = 1 process_min_avail = 2 vsz_limit = 128M } service managesieve { process_limit = 256 } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } user = vmail } listen = * ssl_cert =Neben mail.domain.tld bitte auch beide Postmaster-Adressen anpassen.Wie auch Postfix, erhält Dovecot Anweisungen, wie es auf die MySQL-Datenbank zugreifen kann und an welcher Stelle es die notwendigen Daten erhällt.
nano /etc/dovecot/dovecot-mysql.confdriver = mysql connect = "host=localhost dbname=vimbadmin user=vimbadmin password=changeme" default_pass_scheme = SHA512-CRYPT password_query = SELECT username as user, password as password, \ homedir AS home, \ maildir AS mail, uid, gid, \ concat('*:bytes=', quota) as quota_rule \ FROM mailbox WHERE username = '%Lu' AND active = '1' \ AND ( access_restriction = 'ALL' OR LOCATE( '%Us', access_restriction ) > 0 ) user_query = SELECT homedir AS home, \ maildir AS mail, uid, gid, \ concat('*:bytes=', quota) as quota_rule \ FROM mailbox WHERE username = '%u' iterate_query = SELECT username FROM mailbox;changeme bitte durch das MySQL-Kennwort des Benutzer vimbadmin ersetzen.Die Datei wird wieder vor unbefugtem Zugriff geschützt:
chown root:vmail /etc/dovecot/dovecot-mysql.conf chmod 640 /etc/dovecot/dovecot-mysql.confDie weiteren Konfigurationsdateien innerhalb des Dovecot-Verzeichnisses werden nicht gelesen, können jedoch bestehen bleiben. Ein Löschen lohnt sich nicht, da sie durch "dpkg" bei einem Upgrade neu erstellt würden.
Eine Datei "/var/vmail/before.sieve" existiert als globales Sieve-Script, das erstellt werden kann, aber nicht muss.
Häufig wird solch ein Script verwendet, um als Spam markierte Nachrichten in den dafür vorgesehenen Ordner "Junk" zu verschieben, etwa:require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "Junk"; }Von Benutzern durch einen Client erzeugte Scripts sind sofort lauffähig. Unser globales Script muss jedoch zur Ausführung kompiliert und berechtigt werden:
# sievec erstellt eine neue Datei before.svbin sievec /var/vmail/before.sieve # Beide Dateien möchten wir vmail zuweisen chown vmail: /var/vmail/before.*3.3 Content-Filter
Die Abhängigkeiten zu Beginn. Dieses mal mit etwas Abwechslung: Das "non-free" Repository muss aktiviert werden, um auch Anhänge filtern zu können, die mit dem unfreien Werkzeug "rar" gepackt wurden.
apt-get install zip rar unrar unzip p7zip-full amavisd-new clamav-daemon spamassassinIch starte mit der Anpassung des Amavis Filters.
Änderungen in der Datei /etc/amavis/conf.d/50-user überschreiben vorhandene Parameter, daher bitte nur in dieser Datei arbeiten.nano /etc/amavis/conf.d/50-userDer nächste Abschnitt dient als Vorlage einer gesamten Datei 50-user.
Bitte die Vorlage gründlich durchlesen und ergänzen/anpassenuse strict; # Maximale Anzahl an Prozessen, die Amavis vorhält. # Siehe auch Anmerkung in master.cf im Listener für Reinjection $max_servers = 5; # Amavis wird mitgeteilt, wie auf die MySQL-Datenbank zugegriffen werden kann. # "changeme" bitte anpassen @lookup_sql_dsn = ( ['DBI:mysql:database=vimbadmin;host=127.0.0.1;port=3306', 'vimbadmin', 'changeme']); # Hierdurch ermittelt Amavis die lokalen Domänen $sql_select_policy = 'SELECT domain FROM domain WHERE CONCAT("@",domain) IN (%k)'; # Ein Listener für die Herkunft "external" sowie "submission" $inet_socket_port = [10024,10025]; # Mails werden auf Port 10035 zurückgeführt $forward_method = 'smtp:[127.0.0.1]:10035'; $notify_method = 'smtp:[127.0.0.1]:10035'; # Listener :10025 bekommt eine eigene Policy $interface_policy{'10025'} = 'SUBMISSION'; $policy_bank{'SUBMISSION'} = { # Diese Mails kommen von einem vertrauten System originating => 1, # 7-bit Kodierung erzwingen, damit ein späteres Kodieren die DKIM-Signatur nicht zerstört smtpd_discard_ehlo_keywords => ['8BITMIME'], # Viren auch von auth. Sendern ablehnen final_virus_destiny => D_REJECT, final_bad_header_destiny => D_PASS, final_spam_destiny => D_PASS, terminate_dsn_on_notify_success => 0, warnbadhsender => 1, }; # "mail.domain.tld" bitte anpassen $myhostname = "mail.domain.tld"; # Wer wird über Viren, Spam und "bad header mails" informiert? # Den Benutzer "postmaster" bitte nachträglich in ViMbAdmin erstellen (Alias möglich) $virus_admin = "postmaster\@$mydomain"; $spam_admin = "postmaster\@$mydomain"; $banned_quarantine_to = "postmaster\@$mydomain"; $bad_header_quarantine_to = "postmaster\@$mydomain"; # DKIM kann verifiziert werden. $enable_dkim_verification = 1; # AR-Header darf gesetzt werden $allowed_added_header_fields{lc('Authentication-Results')} = 1; # DKIM-Signatur # Gilt nur, wenn "originating = 1", ergo für die SUBMISSION policy bank # "default" ist hierbei der Selector # "domain.tld" als Domäne bitte anpassen # "enable_dkim_signing" nur "1" setzen, wenn Mails wirklich signiert werden sollen. # "/var/lib/amavis/db/dkim_domain.tld.key" sollte ebenso dem Namen der Domäne angepasst werden. # Die TTL beträgt im Beispiel 7 Tage # relaxed/relaxed beschreibt die Header/Body canonicalization, relaxed ist weniger restriktiv $enable_dkim_signing = 1; dkim_key('domain.tld', 'default', '/var/lib/amavis/db/dkim_domain.tld.key'); @dkim_signature_options_bysender_maps = ( { '.' => { ttl => 7*24*3600, c => 'relaxed/relaxed' } } ); # Viren- und Spamfilter ACL; werden automatisch ermittelt @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); #------------ Do not modify anything below this line ------------- 1; # ensure a defined returnDer private Schlüssel für die DKIM-Signatur wird nun erstellt. Ein sicherer Schlüssel ist 2048 Bits lang:
Schon in der Amavis-Konfiguration sollte der Name des Schlüssels /var/lib/amavis/db/dkim_domain.tld.key angepasst worden sein.
Für diesen Artikel behalte ich den Namen bei.amavisd-new genrsa /var/lib/amavis/db/dkim_domain.tld.key 2048Nachdem der Schlüssel geschrieben wurde, kann der notwendige Parameter für die DNS-Zone ausgelesen werden:
amavisd-new showkey domain.tldDie Ausgabe sollte dem DNS-Server zugeführt werden.
Bevor der DNS-Server nicht angepasst wurde, sollten DKIM-Signaturen gemieden werden.
Zwar würden signierte Nachrichten nicht abgelehnt werden. Dennoch sollte sich an die Spielregeln gehalten werden.
Generell ist die Notwendigkeit von SPF- und DKIM-Records umstritten. Administratoren tendieren dazu, das Vorhandensein positiv anzurechnen, etwa wenige (Zehntel)punkte im Spamfilter abzuziehen. Aber die wenigsten Systeme strafen ein Fehlen ab. Selbst fehlerhafte Records unterbinden selten die Annahme jener Nachrichten. Das hat durchaus seine Gründe, etwa ist ein SPF-Record das Sorgenkind des Forwardings. Aber auch da steht die Methode des Forwardings im Vordergrund und begründet die nächste Diskussion...Ein System, das zu restriktiv filtert, möchte keiner gerne verwenden. So sehr sich der Administrator auch wehrt, wird er sich dem Druck der Anwender beugen müssen.
Um Amavis die Verwendung des Virenscanners ClamAV zu gestatten, bedarf es letzten Anpassungen:
# User clamav der Gruppe amavis hinzufügen adduser clamav amavis # Gestatte Gruppen, denen clamav zugehört, das Scannen # ACHTUNG, Ab 0.99.2 startet ClamAV mit diesem Parameter nicht mehr, da er entfernt wurde. Vielen Dank für den Hinweis! sed -i 's/AllowSupplementaryGroups false/AllowSupplementaryGroups true/g' /etc/clamav/clamd.conf4. Dienste neustarten
Spätestens jetzt sollten wir alle Dienste einmal neustarten.
systemctl restart {dovecot,postfix,amavis,spamassassin,clamav-daemon,nginx,php5-fpm,mysql}Bewundert nun euer Werk unter den Adressen https://mail.domain.tld/webmail und https://mail.domain.tld/admin!
Gebt nicht auf, wenn es mal klemmt. Wenn ihr auf Probleme stößt, können wir uns austauschen und den Fehler finden.
Natürlich setzt der Artikel einiges an Verständnis voraus, aber irgendwo hat jeder mal angefangen.
Pingback: Eigener Mailserver – gute Idee? | Dominic Pratt
Erstmal Danke für die Anleitung, hab schon mehrere Mailserver danach aufgesetzt und es lief immer perfekt! Selbst ein Upgrade auf Debian 9 lief nach kleinen Anpassungen, nur jetzt komme ich gerade nicht weiter. Ich kann E-Mails verschicken, nur empfangen kann ich keine. Habe alle configs mehrmals durchgeschaut und weiß nicht wo es klemmt…! dsn=4.7.4, status=deferred (TLS is required, but was not offered by host ….vielleicht hat ja eine ne Idee
Ich habe einen Mailserver nach dieser hervorragenden Anleitung im Einsatz. Danke nochmals für die tolle Anleitung!
Jetzt habe ich ein kleines Problem mit nginx und der Konfiguration.
Ich stelle im Augenblick auf letsencrypt um und versuche nginx so zu konfigurieren, dass alle Anfragen bis auf die Anfrage an /.well-known/acme-challenge/ per https ausgeliefert werden.
Ich verwende in der Regel nur Apache und bin deshalb mit nginx nicht so vertraut.
Bisher ist es so, dass ich immer eine Umleitung nach https erhalte … egal was ich mache.
Ggf. könnt Ihr mir einen Tipp geben?
DANKE!
Hallo André,
Server läuft noch immer toll. Dovecot kann allerdings nicht mehr aktualisiert werden, benötigt jetzt Debian 9.
Wird es für Stretch auch eine Anleitung (mit Transfer-Option) geben?
Vielen Dank vorab
PC-Opa
Hello,
thanks for the instaruction.
I set the white list like this in amawis-new
#Spam Check Whitelist
read_hash(\%whitelist_sender, ‚/etc/amavis/biala_adresy‘);
@whitelist_sender_maps = (\%whitelist_sender);
It’s works fine.
How to set a white list of ip? I have yes but it does not work.
in amawis
$ interface_policy {‚10026‘} = ‚BYPASSSPAM‘;
$ policy_bank {‚BYPASSSPAM‘} = {
originating => 1,
bypass_spam_checks_maps => [1], # do not spam-check
bypass_banned_checks_maps => [1], # do not banned-check
final_spam_destiny => D_PASS, # insure spam passes
final_banned_destiny => D_PASS, # insure banned files pass
};
and in postfix
check_client_access hash:/etc/postfix/white_ip,
in log
receives such a message
warning: access table hash:/etc/postfix/white_ip: with smtpd_proxy_filter specified, action FILTER is unavailable
cat /etc/postfix/white_ip
46.238.212.70 FILTER smtp-amavis:[127.0.0.1]:10026
The problem is probably with smtp_proxy. Do you have any idea for this problem?
Hi danke für die super Anleitung,
alles hat auf Anhieb geklappt.
Nur ein Problem habe ich, wenn ich Mails vom Handy verschicken möchte, bekomme ich direkt nach dem absenden die Mail das die Nachricht nicht gesendet werden kann und das meine IP aufgrund von Spamschutz nur eingeschränkt angenommen wird. Wenn ich über Roundcube versende funktioniert alles wunderbar nur halt nicht über Emailprogramme. Muss ich noch extra Ports oder so öffnen?
Ist es möglich, wenn ich nach dieser Anleitung den Mailserver erstellt habe Debian 8 ohne Probleme auf 9 zu updaten und welche Dateien muss ich abändern?
Danke schon mal für eure Vorschläge.
LG
Wie zwei Kommentare vorher von mir geschrieben:
„Gestern habe ich dann den Schritt gewagt ein Upgrade auf Debian 9 zu machen: was soll ich sagen -> lief nahezu perfekt durch. Lediglich das php-pdo Paket musste nachinstalliert werden. Der Server funktioniert einwandfrei, und ich habe endlich meinen Seelenfrieden. :)“
Gruss Mad
Hallo,
erstmal Danke für die Super Anleitung. Ich als Linux Neuling konnte alles problemlos ohne Fehler installieren.
Jetzt nachdem ich allerdings zwei Fehler:
1.beim Einrichten von IMAP in Outlook:
An Posteingangsserver anmelden (IMAP): Die Verbindung wurde unerwartet vom Server beendet. Möglicherweise liegen Serverprobleme oder Netzwerkprobleme vor, oder das Zeitlimit wurde überschritten.
Die Testmail konnte allerdings gesendet werden, also scheint SMTP zu funktionieren
2. Nachdem ich mich in WebMail erfolgreich eingeloggt habe kommt:
Serverfehler: SELECT: Internal error occurred. Refer to server log for more information.
in der /var/www/html/webmail/log/error steht:
[23-Aug-2017 18:19:41 Europe/Berlin] ERROR: BYE \“Internal error occured. Refer to server log for more information.\“ (6)
[23-Aug-2017 18:19:41 +0200]: PHP Error: Unable to connect to managesieve on localhost:4190 in /var/www/html/webmail/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php on line 216 (GET /webmail/?_task=settings&_action=plugin.managesieve)
[23-Aug-2017 18:19:41 Europe/Berlin] ERROR: Not currently in AUTHORISATION state (1)
[23-Aug-2017 18:19:41 Europe/Berlin] ERROR: Not currently connected (1)
Ich vermute es liegt an einer Einrichtung. Aber…
Vielen Dank
Ich wollte mich nurnoch mal kurz zu Wort melden.
Da mein Anliegen seinerzeit, den Mailserver direkt auf Debian9-Testing aufzusetzen, leider nicht funktionierte, lief mein Mailserver auf Debian 8 aber dank dieser sehr guten Anleitung einwandfrei. Selbst das „Problem“ von mehreren Domains lässt sich durch einfache Anpassung in der /etc/amavis/conf.d/50-user lösen.
Gestern habe ich dann den Schritt gewagt ein Upgrade auf Debian 9 zu machen: was soll ich sagen -> lief nahezu perfekt durch. Lediglich das php-pdo Paket musste nachinstalliert werden. Der Server funktioniert einwandfrei, und ich habe endlich meinen Seelenfrieden. :)
Danke nochmal der tollen Anleitung hier.
Gruss Mad
Pingback: [Debian 8] Mailserver konfigurieren: Postfix, Roundcube, ViMbAdmin, Dovecot, Amavis - Yannici's Blog
Hallo Andre‘,
danke für das großartige Howto jedoch macht mir dovecot Probleme -es fehlt eine w permission für /srv
Error: Namespace “: stat(/srv/vmail/xxxx.de/info/mail) failed: Permission denied (euid=2000() egid=2000() missing +x perm: /srv, we’re not in group 0(root), dir owned by 0:0 mode=0770)
/srv hat root:root
/srv/vmail hat vmail:vmail
Relay access denied; from= to= proto=ESMTP helo=
Jun 26 11:25:30 r2 postfix/smtpd[24371]: disconnect from mx2.mail.org
Wie muss ich hier die Rechte richtig setzen ?
Gruss Uli
Hi,
vielen Dank für dieses wunderbare Tutorial!
Mit dieser Hilfe habe ich meinen ersten Mailserver erfolgreich aufsetzen können :D
Eine Anregung für alle die, die wie ich in einer LAB Umgebung zu Testzwecken einen Mailserver aufsetzen.
Wenn die domain keine TLD ist, sondern wie bei mir xy.lab verweigert ViMbAdmin das Anlegen des Admin Accounts komplett.
die domain kann allerdings unter: /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Validate
per Editor hinzugefügt werden.
Anschließend funktioniert das Anlegen des Accounts problemlos.
Eine Bitte hätte ich dennoch, der Part mit DKIM ist mir noch nicht so klar.
Währe es möglich auf die Integradtion im DNS Server einzugehen?
Vielen Dank und Grüße
Guten Tag Zusammen und vielen Dank für diese Anleitung!
Ich habe die Installation nun fast beendet, Kopfschmerzen bereitet mir
„amavisd-new showkey domain.tld
Die Ausgabe sollte dem DNS-Server zugeführt werden.“
Ich habe mittels Putty und SSH alles gemacht, allerdings stelle ich gerade fest, copy und paste nach Putty ist ja einfach, aber kann mir jemand einen Hinweis geben wie ich den Inhalt des Keys am einfachsten in die Zwischenablage bekomme und ggf. wie genau der TXT Eintrag im DNS aussehen sollte? Denn das ist mir noch etwas unklar.
Danke!
OK, ich habe sowieso erst einmal dkim ausgeschaltet.
Beim testen jetzt habe ich allerdings ein klitzekleines Problem.
Bereich Admin, bisher keine Fehler, Bereich webmail, in ein Postfach eingeloggt, Testemail geschrieben.
Klicke ich in roundcube auf senden erhalte ich „SMTP Fehler (454): Die Authentisierung ist fehlgeschlagen.“
Schaue ich in /var/www/html/webmail/logs/error dann steht da nicht viel an Ergänzung.
Error: Invalid response code received from server (454) in /var/…/rcube.php on line 1712 (POST/webmail/?_task=mail&unlock=…..)
Bin jetzt noch mal alles Punkt für Punkt durchgegangen, die Dienste noch einmal neu gestartet. Wo sollte ich suchen?
Noch einmal vielen Dank!
Hallo,
jemand spontan eine Idee? Musste von php5.6 auf php7.0 umsteigen. Jetzt hab ich ein problem mit open_basdir find aber keine lösung :(
„Warning: is_readable(): open_basedir restriction in effect. File(/usr/share/php//srv/vimbadmin/application/../library/ViMbAdmin/Resource/Auth.php) is not within the allowed path(s): (/usr/share/nginx/mail/:/tmp/:/usr/share/nginx/mail/admin/:/srv/vimbadmin/) in /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Loader.php on line 186
…..“
„Fatal error: Uncaught Zend_Session_Exception: Session must be started before any output has been sent to the browser; output started in /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Loader.php/186 in /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Session.php:456 Stack trace
…..“
Danke :)
hi!
ich hab Eure Config verwendet und sie funktioniert soweit ganz gut.
Ich kann aktuell nur keine Emails von einer bestimmten Domain aus USA empfangen.
Ich bekomme da folgende Meldung :
hostname postfix/smtpd[5965]: warning: hostname XXXX does not resolve to address AAAA.BBBB.CCCC.DDDD
Wenn ich auf diese IP-Adresse einen nslookup durchführe, erhalte ich keinen explizite FQDN zurück, sondern nur einen Verweis auf die allgemeine Domain.
Was kann ich tun ?
Es betrifft eine dieser „Spam-Überprüfungen“ ?
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_unknown_recipient_domain,
reject_non_fqdn_recipient,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf,
reject_unauth_destination,
reject_rbl_client ix.dnsbl.manitu.net,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client bl.spamcop.net,
reject_rbl_client psbl.surriel.com,
reject_rbl_client noptr.spamrats.com
Danke und Grüße,
Raphael
Hallo,
auch von mir Danke für die Mühe, hat auch alles geklappt, habe nur noch eine kurze Anmerkung und Frage.
Anmerkung:
Warum nicht auch den Server mit anderen Mailserver per TLS reden lassen?
Also:
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
Ich verwende ein Letsencrypt Zertifikat dennoch ist die lokale Meldung:
postfix/lmtp[13922]: Untrusted TLS connection established to mailserver.tld[private/dovecot-lmtp]: TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Auch wenn ich die Letsencrypt Chain als CAFile angebe hilft es nicht.
Auch sind alle Verbindungen die „reinkommen“ Untrusted, gibt es da eine Best-Practice für die TLS Konfiguration?
Ich weiß, ist mehr Schönheit als wirklich ein „Problem“, da die TLS Verbindung ja besteht.
Grüße,
Norbert
Einwandfreies Tutorial, alles hat auf Anhieb geklappt. :-)
Nun erhalte ich beim Aufruf von aptitude udpate allerdings folgenden Fehler für das dovecot-Paket
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://xi.rename-it.nl stable-auto/dovecot-2.2 Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY BC64CF5F03A2E7AE
W: Failed to fetch http://xi.rename-it.nl/debian/dists/stable-auto/dovecot-2.2/Release:
W: Some index files failed to download. They have been ignored, or old ones used instead.
Versuche über apt-key den oben genannten PUBKEY zu installieren schlagen allerdings fehl. Weiß jemand Rat?
Danke!
Hallo,
füge stattdessen hier in die sources.list ein:
„deb http://xi.dovecot.fi/debian/ stable-auto/dovecot-2.2 main“
dann
„wget -O – http://xi.dovecot.fi/debian/archive.key | apt-key add -“
ausführen. Damit müsste das Problem behoben sein.
Danke, das hat geholfen :-)
moin moin,
erstmal danke für die tolle anleitung.
und gleich ne kurze frage…
wie verhält sich die config bei zwei domains auf dem server? reicht ein CNAME entry oder muß man anderweitig handgreiflich werden?
danke & mfg
meine vorherige frage hat sich bereits erledigt…
leider ergibt sich ein anderes problem für mich -> diene anleitung funktioniert leider aktuell (noch) nicht für debian 9 (stretch). schade, aber da muss ich wohl noch etwas geduld haben.
mfg
Hallo,
habe ebenfalls Debian 9 „Stretch“, mit dieser Anleitung funktioniert es ziemlich gut.
Was funktioniert denn genau bei dir nicht?
Fehlermeldung?
Gruß joas
hallo und danke der schnellen antwort.
es hapert schon an diversen paketen wie zb php5, welche fehlen. AFAIK ist php5 nicht mehr in stretch vorhanden, und es kann nicht gewiss gesagt werden, ob es vllt noch kommt. ich möchte das system ungern um irgendwelche ports erweitern, also gibt es irgendwelche alternativen…?
wie hat du die geschichte unter deb 9 (ohne fremdpakete) zu laufen gebracht?
mfg
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen…. Fertig
Paket mysql-client ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Doch die folgenden Pakete ersetzen es:
mariadb-client-10.1
Paket php5 ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Paket php5-gd ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Paket php5-cli ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Paket php5-common ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Paket php5-mcrypt ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Paket php5-mysql ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Paket mysql-server ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Doch die folgenden Pakete ersetzen es:
mariadb-server-10.1
Paket php5-curl ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Paket php-apc ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
E: Paket php-mail-mimedecode kann nicht gefunden werden.
E: Für Paket »php5« existiert kein Installationskandidat.
E: Für Paket »php5-cli« existiert kein Installationskandidat.
E: Für Paket »php5-common« existiert kein Installationskandidat.
E: Für Paket »php5-curl« existiert kein Installationskandidat.
E: Paket php5-fpm kann nicht gefunden werden.
E: Für Paket »php5-gd« existiert kein Installationskandidat.
E: Paket php5-imap kann nicht gefunden werden.
E: Für Paket »php-apc« existiert kein Installationskandidat.
E: Paket php5-intl kann nicht gefunden werden.
E: Für Paket »php5-mcrypt« existiert kein Installationskandidat.
E: Für Paket »php5-mysql« existiert kein Installationskandidat.
E: Paket php5-xmlrpc kann nicht gefunden werden.
E: Für Paket »mysql-client« existiert kein Installationskandidat.
E: Für Paket »mysql-server« existiert kein Installationskandidat.
so, mit etwas mühe und einigen anpassungen läuft der nginx mit ViMbAdmin auf php7 unter stretch. das eigentliche problem ist aber, dass eben viele pakete in stretch ersetzt worden sind, so gibt es halt kein mysql-* mehr sondern das paket mariadb, was aber bei mir noch nicht zum stillstand führte. dovecot zb ist in aktueller version direkt in den repos enthalten…
aber leider „amavisd-new“ nicht (kein maintainer). ein „von hand bauen“ bringt leider nichts, da sämtliche paket-abhängigkeiten zu fuss installiert werden müssen, und die doku drückt sich da leider sehr technisch aus.
ergo: ab hier ist erstmal schicht im schacht…schade…
mfg
vielen Dank für die ausführliche Anleitung =)
eine Frage bezüglich des Spamfilters, was ist mit den Paketen „razor“ und „pyzor“?
Sollte man nicht mitinstallieren?
Hallo,
erstmal Danke für dieses sehr verständliche Tutorial. Dennoch habe ich wohl irgendwo einen blöden Fehler gemacht , welchen ich einfach nicht finde. Rufe ich https://domain.tld/admin bzw. /webmail auf erhalte ich von nginx einen 403 forbidden Error.
Anbei mal die config für den webserver
server_name mail1.domain.tld;
listen 443 ssl;
listen [::]:443 ssl;
ssl on;
ssl_certificate /etc/ssl/mail1.doamin.tld.cer;
ssl_certificate_key /etc/ssl/mail1.domain.tld.key;
# Einige Optionen nach Bettercrypto
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ‚EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA‘;
add_header Strict-Transport-Security max-age=15768000;
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 30m;
client_max_body_size 20;
root /var/www/html/webserver;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ index.php;
}
# Zugriff auf Roundcube Logs, sollte von außerhalb nicht möglich sein
location ~ ^/webmail/logs/ {
deny all;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_read_timeout 630;
fastcgi_keep_conn on;
# Dient ViMbAdmin, da Nginx keine htaccess-Datei einlesen wird
fastcgi_param APP_ENV production;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
# Können sensible Daten enthalten, Nginx verwertet sie nicht
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
# Keine Notwendigkeit
location = /robots.txt {
deny all;
log_not_found off;
access_log off;
}
location /admin {
# Rewrite fix für ViMbAdmin
try_files $uri $uri/ /admin/index.php?$args;
}
}
Was habe ich da falsch gemacht?
Danke
du musst auf https://mail1.domain.tld/admin gehen.
Vielen Dank für das tolle Tutorial! Habe jetzt 2 Mail Server nach deinem Tutorial aufgesetzt und beide laufen problemlos.
Ich hätte jetzt noch gerne eingebaut, dass Mails an bestimmte Adressen, über einen anderen Mailserver als relay verschickt werden. Hier stecke ich allerdings fest, weil ich nicht weiß wie ich die entsprechende transport map einrichten kann, da diese ja aus der Vimbadmin Datenbank abgefragt wird.
Hättest du hier vielleicht einen Tipp für mich?
Beste Grüße,
Richard
Bei mir taucht immer ein Fehler auf von anvil. Es scheint mit dem ulimit zu tun zu haben.
dovecot: managesieve-login: Error: read(anvil) failed: EOF
dovecot: auth: Error: read(anvil-auth-penalty) failed: EOF
Sonst geht alles. Hab diesen guide jetzt schon zum zweiten mal benutzt und bin sehr zufrieden.
Danke für das tolle Tutorial, Andre! Spende via Paypal/Donate ist bereits erledigt. Vielen Dank! für eine didaktisch so toll aufbereitete Anleitung, zahle ich gerne!
Oh! Das war aber mehr als eine kleine Spende. :-) Danke!
Erst einmal vielen Dank für die tolle Anleitung! Mein Mailserver läuft. Ich benötige jedoch noch, um Mails in unser CMD einzubinden POP3. Wie ist das nun nachträglich einzurichten?
Ein Traum einer Anleitung! Vielen Dank fürs teilen!
Evtl. kannst du bei der Installation des ClamAV noch einen Hinweis geben, dass dieser über FreshClam erst die DB aktualisieren muss, was eine Weile dauern kann. Ich war da zu schnell und bekam „*** Unchecked ***“ Emails und der daemon-Dienst wollte wegen fehlendem Daily-Verzeichnis nicht starten.
Ich hab den FreshClam Dienst erst einmal beendet, per „freshclam“ die Viren-DB manuell aktualisiert und den Dienst sowie clamav-daemon und amavis neu gestartet, dann gings. Erledigt sich sonst in den nächsten 10 Minuten.
Grüße,
Tim
Hallo – Ich hätte die Kommentare zuerst lesen sollen. Ich hatte das selbe Problem mit freshclam und ich habe das genauso gelöst wie Tim: clamav-freshclam gestoppt, „freshclam“ manuell gestartet und danach clamav-freshclam und clamav-daemon wieder gestartet.
Falls jemand in den Kommentaren nach Fehlermeldungen sucht:
in /var/log/syslog:
(!)connect to /var/run/clamav/clamd.ctl failed, attempt #1: Can’t connect to a UNIX socket /var/run/clamav/clamd.ctl: No such file or directory
Ausgabe von /etc/init.d/clamav-daemon status :
ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc} was not met
Evtl ist das ja ein Bug in der aktuellen Version. Der manuelle freshclam-Aufruf dauert keine Sekunde.
Vielen Dank für diese sehr professionelle Anleitung.
Mein Mail-Server läuft auch einwandfrei.
Gerne schicke ich ein paar Euros per Paypal.
Hi,
mein nach diesem Tutorial aufgesetzter Mailserver läuft immer noch, ich hab allerdings seit einiger Zeit ein kleines Issue dem ich nicht auf die Schliche komme. Vielleicht hat jemand eine Idee: Ein Benutzer bekommt regelmäßig E-Mails doppelt oder mehrfach. Allerdings erst wenn er sie löscht. Also er löscht eine E-Mail und sie ist kurz drauf wieder da. Er löscht sie nochmal und kurz drauf ist sie wieder da. Das sind „interne“ E-Mails (von der gleichen Domain – meinem Server), aber auch externe, zum Beispiel Mails von eBay usw. Im Log haben diese E-Mails die gleiche Message ID, ich bin daher relativ sicher, dass die E-Mails nicht tatsächlich mehrfach zugestellt werden. Er verwendet die GMail App auf einem Android Tablet, und hin und wieder Thunderbird auf einem Notebook. Seine Internetverbindung ist etwas instabil und manchmal langsam, kann also sein, dass da diverse Verbindungsabbrüche im Spiel sind. Ich vermute ja Dovecot als die Komponente die hier doppelt produziert, hab aber keinen Plan wie ich hier weitersuchen kann. Die Logs ergeben keine brauchbaren Infos.
Hatte das schon mal jemand, fällt jemandem eine Lösung oder ein Ansatz wie ich weitersuchen kann dazu ein?
Hallo!
Wirklich ein tolles Tutorial. Ich habe es mit LDAP implementiert und es läuft (immerhin ;-)) mal im Test (für Produktion traue ich mich noch nicht) auf einer Subdomain.
Was mir aufgefallen ist: in den Mail-Headern wird nie Spam erwähnt… funktioniert der SPAM Filter denn dann nicht, und wie kann ich ihn „einschalten“?
Auch wäre noch die Frage, wie ich LDAP statt MySQL bei Amavis einsetzen kann:
# Amavis wird mitgeteilt, wie auf die MySQL-Datenbank zugegriffen werden kann.
# „changeme“ bitte anpassen
@lookup_sql_dsn = (
[‚DBI:mysql:database=vimbadmin;host=127.0.0.1;port=3306‘,
‚vimbadmin‘,
‚changeme‘]);
# Hierdurch ermittelt Amavis die lokalen Domänen
$sql_select_policy = ‚SELECT domain FROM domain WHERE CONCAT(„@“,domain) IN (%k)‘;
Google hat mir da leider gar nicht geholfen und ich habe die beiden Zeilen erst einmal gelöscht.
Danke und viele Grüße!
Die Anleitung ist auch noch im November 2016 nach ein paar Minor Versionssprüngen von Debian Jessie aktuell und gültig.
Der Mailserver funktioniert tadellos…
Andere Frage:
Hat jemand von Euch Erfahrungen in der Installation von Z-Push in Kombination mit Dovecot? Ich bekomme die Konfiguration einfach nicht hin. Z-Push ist außerhalb der Zarafa Groupware Lösung wenig dokumentiert und noch weniger in Kombination mit Dovecot UND Nginx.
Nach ersten Checks von meiner Seite aus sind wohl alle notwendigen PHP-Pakete für Z-Push durch die obige Anleitung schon vorhanden.
Die Herausforderung für mich stellt aber zum Einen das Deaktivieren von einigen PHP-Flags in Nginx dar:
php_flag magic_quotes_gpc muss auf off
php_flag register_globals miss auf off
php_flag magic_quotes_runtime muss auf off
php_flag short_open_tag muss auf on
Zum Anderen die Konfig von Z-Push selbst mit dem Dovecot IMAP Backend in der für Z-Push vorgesehenen Konfig Datei. Welches ist hier die beste Kombination? Host = localhost, Port = 993 und /tls/nocert-validation?
Kann jemand helfen?
Danke und viele Grüße
Daniel
Habe Z-Push selbst zum Laufen bekommen.
Allerdings musste ich dazu auf Apache als Webserver umsteigen. Mit nginx wollte es bei mir einfach nicht funktionieren.
Die apache Konfig für ViMbAdmin und roundcube ist sehr gut auf deren WiKi Seiten dokumentiert.
Für Z-Push gibt es auch einige gute HowTo’s im Netz zu finden (bspw. http://gergernaut.de/z-push-mit-imap-anbindung/).
Achtet zusätzlich noch darauf darauf, dass ihr in der config.php des IMAP Backends die Variable define(‚IMAP_FOLDER_CONFIGURED‘, true); setzt.
Sonst hagelt es im Log Fehlermeldungen, dass die IMAP Ordnerstruktur für Z-Push nicht konfiguriert ist.
Viele Grüße
Daniel
Pingback: Mailserver From Scratch – Debian 8.0 | www.linux-inspired.org
Pingback: Technical Changes Behind the Scene ... - Urs-o-Log
Hey, ich habe das ganze mal realisiert und funktioniert auch tadellos.
Es gibt allerdings ein Problem, welches ich zu lösen versuche und nicht durchsteige. :)
Wieso kann man sich per SMTP nur mit der E-Mail Adresse als Nutzer anmelden und nicht mit dem „Namen“.
In der vimbadmin mysql db (mailbox) steht als Username auch die Mailadresse.
Ist es irgendwie möglich das zu ändern?
Hallo – Ich habe das Tutorial jetzt zum 3 mal angefangen und bleibe immer an der gleichen Stelle hängen. Und zwar dort wo ich https://mail.xxx.de/admin aufrufen soll. Die Verbindung meldet hier eine Time Out zurück. Woran kann das liegen?
Da hast du einen Fehler mit SSL gemacht
hallo an @alle
kann mir jemand erklären wie ich Roundcube & ViMbAdmin aktualisieren kann?
Da ich mich mit git, curl, Composer nicht so super gut auskenne, möchte ich auf sicher gehen, das ich nichts falsche mache.
Hallo André
Vielen dank für dein Anleitung. Alles lief soweit alles super. Nur habe ich folgendes Problem.
Ich habe im ViMbAdmin eine meiner Mailbox gelöscht, und wollte diese wieder mit dem gleichen Namen erstellen. ViMbAdmin meldet mir jetzt aber „Mailbox already exists for „martin@meineadresse.com“
Ein Verzeichniss „/var/vmail/meineadresse.com/martin“ existiert gar nicht mehr, jedoch in der mysql (mysql> show columns from mailbox;) finde ich doch noch auf position 5 einen Eintag „martin@meineadresse.com“
im mysql finde ich auf
1 | postmaster@meineadresse.com ……
2 | hostmaster@meineadresse.com ……
4 | admin@meineadresse.com ……
5 | martin@meineadresse.com ……
Wieso löschte ViMbAdmin nicht komplett alles, wenn ich eine Adresse löschen möchte?
In den Logs habe ich nach fehler gesucht, aber keine passende Einträge gefunden die hier helfen können.
Kenn mich leider mit denn mysql Befehlen nicht so supi aus. Kann mir jemand Helfen das zu berichtigen?
mfg Martin
Hallo zusammen,
zunächst einmal vielen Dank für das tolle Tutorial:-)
Leider habe ich (auch nach dem 2 Versuch) das Problem, dass, sobald ich mich versuche mich mit meinem Benutzer (oder x-beliebigen) bei Roundcube anzumelden, ich immer die Fehlermeldung „Verbindung zum Speicherserver fehlgeschlagen“.
Hat hier jemand eine konstruktive Idee, wo ich den Hebel ansetzen kann?
Vielen Dank im Voraus
M
Hey,
sie dir doch mal dein Syslog an.
ich hatte das selbe Problem bei mir, der user vmail hatte nicht das Recht den Ordner des neuen Nutzers anzulegen. Ein chown -R vmail:vmail hat die lösung gebracht.
LG
Super Tut, super erklärt und durchgängig logisch!!!
Dake dafür!!!
Hat jemand von euch auch das Problem, das die Filer nicht angelegt werden können?
Es kommt immer folgende Fehlermeldung:
mail dovecot: managesieve(123@123.de): Error: sieve: file storage: mkdir_parents_chgrp(/srv/vmail/123.de/damian73/sieve/tmp) failed: Permission denied (euid=5000(vmail) egid=5000(vmail) missing +w perm: /srv, dir owned by 0:0 mode=0755)
Der Fehler ist, das in „/srv/vmail/…“ gesucht wird ind nicht in „/var/vmail/“ finde aber in den Configs nichts dazu passendes.
Kann jemand helfen?
Grüße
Die Frage ist schon etwas älter, aber falls noch jemand das Problem hat:
In der Datei /srv/vimbadmin/application/configs/application.ini gibt es die Einträge zur default-Mailbox, die müssen so aussehen:
defaults.mailbox.maildir = „maildir:/var/vmail/%d/%u/mail:LAYOUT=fs“
defaults.mailbox.homedir = „/var/vmail/%d/%u“
WICHTIG: Die Einstellung muss VOR dem Anlegen der ersten Mailadresse geändert werden. Ansonsten stehen die Pfade verkehrt in der Datenbank. Wer weiss was er tut, kann das natürlich direkt dort ändern.
Sehr schöne Anleitung. Ich würde an deiner Stelle ein Javascript einbauen, wo oben eine Textbox mit dem Domainnamen ist. So kann für alle Configs direkt die richtige Domain angezeigt werden.
( also mail.domain.tld wird überall dann mail.meineseite.de ) Optimal direkt mit random passwort welches oben Gobal angezeigt wird.
Vielen Dank für die ausführliche Anleitung.
leider hab ich ein Problem mit Dovecot…
Der Dienst lässt sich einfach nicht starten.
der einzige Fehler, den ich finden kann ist folgender in syslog
systemd[61527]: Failed at step NAMESPACE spawning /usr/sbin/dovecot: Permission denied
systemd[1]: dovecot.service: control process exited, code=exited status=226
systemd[1]: Unit dovecot.service entered failed state.
Eine Idee was ich übersehen habe?
Hallo André,
der neue Mailserver mit dieser Konfiguration läuft super.
Leider gelingt es mir nicht, von anderen Servern mit PHPMailer oder sSMTP darüber Mails zu versenden (SMTPauth=true; Port=587; Security=tls).
Was muss ich an der Konfiguration dafür ändern?
Kann es sein, dass du den Parameter „mynetworks“ in der main.cf noch anpassen musst?
# Trusted SMTP clients with more privileges. Trusted clients can relay mail.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/21
Du musst natürlich deine IP oder Bereich mit Subnetzmaske angeben.
Hallo Jonas,
habe ich gemacht, ohne verändertem Ergebnis:
Connection: opening to mail.serverdomain.tld:587, timeout=300, options=array ( )
Connection: opened
SERVER -> CLIENT: 220 mail.serverdomain.tld
CLIENT -> SERVER: EHLO XXX.XXX.XXX.XXX
SERVER -> CLIENT: 250-mail.serverdomain.tld 250-PIPELINING 250-SIZE 524288000 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
CLIENT -> SERVER: STARTTLS
SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
CLIENT -> SERVER: EHLO XXX.XXX.XXX.XXX
SERVER -> CLIENT: 250-mail.serverdomain.tld 250-PIPELINING 250-SIZE 524288000 250-ETRN 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
CLIENT -> SERVER: MAIL FROM:
SERVER -> CLIENT: 250 2.1.0 Ok
CLIENT -> SERVER: RCPT TO:
SERVER -> CLIENT: 554 5.7.1 : Client host rejected: Access denied
SMTP ERROR: RCPT TO command failed: 554 5.7.1 : Client host rejected: Access denied
CLIENT -> SERVER: QUIT
SERVER -> CLIENT: 221 2.0.0 Bye
Connection: closed
SMTP Error: The following recipients failed: XXX@XXXXX.XXX: : Client host rejected: Access denied
Eine andere Idee?
Hallo Jonas,
postconf -d zeigt, dass die Erweiterung von mynetworks in main.cf nicht gelesen wird.
Hi Jonas,
ich kann leider auch keine Verbindung zu 587 aufmachen, von extern. Es klappt super vom localhost aber von keinem anderen Rechner. So meine Vermutung ist das er nur von einer bestimmten IP Range Verbindungen annimmt. Ich hab das auch ohne FW getestet bin mir also relativ sicher das meine Annahme stimmt, die Frage ist nur wo kann ich das einstellen das er auch von ausserhalb Verbindungen auf 587 annimt.
Dank und Gruß
MIke
Hi Jonas,
Ich hatte gerade ein Gespräch mit meinem Router und es stellt sich heraus das es bei Telekom Routern eine Email Schutzfunktion gibt. Nachdem ich meinen Server als zulässigen SMTP Server in die Liste eingetragen hatte lief alles wie geschmiert.
Danke für das tolle Tutorial!
Beste Grüße
Mike
haha oh man. Danke für den Hinweis. Habe auf Telekom Hybrid mit LTE Empfang umgestellt… und vor meine AVM Fritzbox 7490 noch den Speedport im Dachboden geklatscht… seit 10 Tagen kann ich meinen SMTP Server nicht mehr erreichen… scheiß speeedport ;-) meinen Mailserverr der Liste hinzugefügt und es geht wieder, oh man,
Hallo André
Dein HowTo läuft bei mir soweit Einwandfrei
Auch https://mail.domain.tld/webmail und https://mail.domain.tld/admin fünktioniert Einwandfrei.
Jedoch möchte (habe) ich nun mein MX-Record auf mx1.domain.tld geändert auch alles im Postfix & Dovecot. Der DNS sollte passen. Im Roundcube kann ich E-Mails senden und Empfangen, jedoch Thunderbird verweigert mir die Verbindung zu mx1.domain.tld. Aus denn Logs bekomme ich nicht viel, jedoch via Telnet erhalte ich folgendes:
telnet mx1.domain.tld 587
Trying x7x.2×9.xx.1xx…
Connected to mx1.domain.tld.
Escape character is ‚^]‘.
220 mx1.domain.tld
EHLO mail.mailserver.de
250-mx1.domain.tld
250-PIPELINING
250-SIZE 524288000
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM:
250 2.1.0 Ok
RCPT TO:
554 5.7.1 : Client host rejected: Access denied
Mein Ziel ist, das ich mich via mail.domain.tld ins Webmail und Admin einloggen kann, aber der die Mails sollten aber via mx1.domain.tld laufen.
Hast du mir vielleicht einen anhaltspunkt?
dovecot ist in jessie in jetzt 2.2.13 – Das reicht scheinbar nicht (Hast du ja geschrieben, aber die Angabe ganz zu Beginn ist dann doch etwas irreführend („Dovecot 2.2.*x* – Der MDA, IMAP- und POP3-Server Dovecot zeugt von höchster Stabilität. In stetiger Entwicklung, daher Installation aus offiziellem Repository.“)
Mit jessie-backports allerdings kommt man auch ohne einen unbekannten key akzeptieren zu müssen an dovecot 2.2.24. Das müsste ja prinzipiell reichen, denn im May 2015, also du den Artikel geschrieben hast, war vermutlich v.2.2.18 o.ä aktuell.
*habs so probiert und es hat funktioniert*
Hier das snippet, um dovecot aus den jessie-backports zu installieren…
Hey,
ich habe einen Mailserver nach der Anleitung gebaut, funktioniert echt super, vielen Dank.
Ich suche allerdings noch nach einer Möglichkeit bestimmte eMail Adressen/Domains zu Whitelisten.
Wie geht man da am besten vor?
Danke und viele Grüße
Jonas
Keiner da, der mir eine Hilfestellung geben kann? :-/
@Andre vielleicht?
Wow!!!
Schon nach der Wheezy-Anleitung hatte ich meinen ersten Mailserver gebaut, jetzt ging es mit diesem Tutorial in weniger als 3 Stunden – und es funktioniert.
Vielen Dank
dovecot: imap(mail@mail.com): Error: User initialization failed: Namespace “: mkdir(/srv/vmail/mail.com/mail/mail) failed: Permission denied (euid=5000(vmail) egid=5000(vmail) missing +w perm: /srv, dir owned by 0:0 mode=0755)
Jemand eine lösung hab alles nach derAnleitung hier gemacht und hab an keiner stelle diesen Pfad zum einstellen gefunden!
/srv/vmail/…
bei mir gibts nur /var/vmail/
Dank der netten Leute in irc://freenode.net/#letsencrypt habe ich jetzt auch eine funktionierende Konfiguration für Zertifikate von Let’s Encrypt für Dovecot, die ich hier gern teilen möchte.
$config[‚imap_conn_options‘] = array(
’ssl‘ => array(
‚allow_self_signed‘ => false,
‚verify_peer‘ => true,
‚verify_depth‘ => 3,
‚verify_peer_name‘ => true,
‚peer_name‘ => ‚mail.domain.tld‘,
‚cafile‘ => ‚/etc/ssl/certs/ca-certificates.crt‘,
‚SNI_enabled‘ => true,
),
);
Analog smtp_conn_options.
Hast du dafür eine lösung ich versuche auch mit Letsencrypt den Mail server zum laufen zubekommen.
Beim login über roundcube kommt dann der fehler hier
Jul 22 16:35:27 Debian-82-jessie-64-minimal dovecot: master: Dovecot v2.2.devel (d81a83b) starting up for imap, sieve, lmtp (core dumps disabled)
Jul 22 16:35:27 Debian-82-jessie-64-minimal dovecot: managesieve-login: Fatal: Couldn’t parse private ssl_key: error:0906D06C:PEM routines:PEM_read_bio:no start line: Expecting: ANY PRIVATE KEY
Jul 22 16:35:27 Debian-82-jessie-64-minimal dovecot: managesieve-login: Fatal: Couldn’t parse private ssl_key: error:0906D06C:PEM routines:PEM_read_bio:no start line: Expecting: ANY PRIVATE KEY
Jul 22 16:35:27 Debian-82-jessie-64-minimal dovecot: master: Error: service(managesieve-login): command startup failed, throttling for 2 secs
Hallo,
ich würde gerne name-„string“@fomain.tld nutzen können. Ich habe dafür in der main.cf folgendes eingetragen:
recipient_delimiter = + eingetragen. In der /etc/amavis/conf.d/20-debian_defaults: $recipient_delimiter = ‚-‚;. In den Logs sehe ich aber immer folgendes:
Jun 17 15:48:04 mail postfix/lmtp[3354]: 08B6862869: to=, relay=mail.domain.tld[private/dovecot-lmtp], delay=2.4, delays=0.32/0.21/0.77/1.1, dsn=5.1.1, status=bounced (host mail.domain.tld[private/dovecot-lmtp] said: 550 5.1.1 User doesn’t exist: name-„string“@domain.tld (in reply to RCPT TO command))
Kann da jemand helfen?
Seit ClamAV 0.99.2 ist die Option „AllowSupplementaryGroups“ entfernt worden, da die Einstellung nun standardmäßig aktiviert ist. Wenn diese Einstellung noch vorhanden ist, startet der ClamAV Daemon nicht mehr (Unknown option AllowSupplementaryGroups).
Siehe http://metadata.ftp-master.debian.org/changelogs//main/c/clamav/clamav_0.99.2+dfsg-0+deb8u1_changelog
Hallo,
vorab danke für das tolle Tutorial !
Kann man mittlerweile aus den offizielen Jessy Repos upgraden oder gibt es dort immernoch kein LMTP ?
Ich bekomme nämlich seit längerer Zeit angezeigt das die Dovecot Pakete bei jedem Upgrade zurückgehalten werden und das nervt langsam ein wenig ^^
Danke und schöne Grüße
Hi!
Danke für die tolle Anleitung.
Gibt es eine Möglichkeit, die Konfiguration so anzupassen, dass Push-Nachrichten für Smartphones möglich sind?
Z.B.: http://mishmashmoo.com.au/blog/?p=208
Kann ich das Paket einfach so installieren?
Was müsste an deiner Konfiguration ausserdem angepasst werden, dass bei STARTTLS nur SSL verwendet werden darf, bzw. über STARTTLS nur verschlüsselte Kommunikation erfolgen darf?
Danke für deine Antwort.
Wunderbar, Danke! Neuer Mailserver steht.
Super Anleitung, vielen Dank!
Wenn ich jett mehrere Domains einrichte und für diese Domains auch (letsencrypt) Zertifikate habe, an welcher Stelle binde ich die ein?
Vielen Dank!
Erstmal vielen Dank für dieses Tutorial.
Ich bin grade bei der Planung eines Mailservers, dass mit verschiedenen LXD-Containern realisiert wird (Mailserver, Sogo, Datenbank, Mailadmin). Ich möchte dabei nicht auf eine Fertiglösung setzen, sondern zumindest ein Stück weit die Materie selbst verstehen, wenn ich den Mailserver aufbaue.
Gibt es bald eine Neuauflage deines „Mailserver from Scratch“ Tutorials, vielleicht mit neuer Software (Sogo, fuglu) ?
Absolut TOP dieses Tutorial, tausend Dank dafür!
Ubuntu 16.04 mit PHP7: Läuft mit der Installation astrein.
Solltet Ihr folgenden Fehler beim Roundcube bekommen:
„FastCGI sent in stderr: „PHP message: PHP Warning: Declaration of rcmail::get_instance($env = “) should be compatible with rcube::get_instance($mode = 0, $env = “) in /var/www/MAILSERVER/webmail/program/include/rcmail.php on line 30″ while reading response header from upstream, client: 185.39.223.5, server: MAILSERVER, request: „GET /webmail/?_task=login HTTP/1.1“, upstream: „fastcgi://unix:/var/run/php/php7.0-fpm.sock:“, host: „MAILSERVER“
Müsst Ihr die aktuelle Roundcube Version aus dem GIT verwenden, da PHP7 im Stable Branch noch Fehler dropped.
https://github.com/roundcube/roundcubemail
@Andre: Der Artikel ist noch aktuell oder ?
machst du hier auch noch ein Changelog ?
BTW: Bin seid Jahren Admin und hab bisher keine bessere Anleitung gefunden die auch endlich mal funktioniert.
Hallo!
Ich kann das leider nicht bestätigen.
Das heißt, ich hatte schon während der Installation Probleme im Zusammenhang mit PHP7, deshalb habe ich jetzt PHP5 + PHP7 installiert.
Wenn ich aber in der Konfiguration von Nginx auf PHP7 FPM Sock umstelle, dann startet weder ViMbAdmin noch Roundcube.
Sind noch weitere Änderungen notwendig, damit ViMbAdmin und Roundcube mit PHP7 funktionieren?
THX
Hallo zusammen,
erst mal schönen Dank für das Tutorial! Leider habe ich Probleme mit ViMbAdmin. im Prinzip ging die Installation problemlos. Leider bekomme ich nur eine halb aufgebaute Seite. Ich verwende statt Nginx Apache.
Im ErrorLog erhalte ich folgende Fehlermeldung:
[Wed Apr 20 18:55:59.859139 2016] [:error] [pid 3439] [client xxx.xxx.xxx.xxx:5242] PHP Fatal error: Uncaught exception ‚Zend_Controller_Response_Exception‘ with message ‚Cannot send headers; headers already sent in , line 0‘ in /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Response/Abstract.php:323\nStack trace:\n#0 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Response/Abstract.php(341): Zend_Controller_Response_Abstract->canSendHeaders(true)\n#1 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Response/Abstract.php(768): Zend_Controller_Response_Abstract->sendHeaders()\n#2 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Front.php(992): Zend_Controller_Response_Abstract->sendResponse()\n#3 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Application/Bootstrap/Bootstrap.php(105): Zend_Controller_Front->dispatch()\n#4 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Application.php(384): Zend_Application_Bootstrap_Bootstrap->run()\n#5 /srv/vimbadmin/public/index.php(34): Zend_ in /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Response/Abstract.php on line 323, referer: https://mail.meineDomain/admin/public/index.php/auth/login
Laut ViMbAdmin Mailingliste soll es ein Konfigfehler in der htaccess oder irgendwo in einer ApacheKonfig sein…
/srv/vimbadmin/public/.htaccess:
SetEnv APPLICATION_ENV production
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ – [NC,L]
RewriteRule ^.*$ /admin/index.php [NC,L]
/etc/apache2/sites-available/myconfig.config:
ServerName mail.meineDomain.de
Redirect permanent / https://mail.meineDomain.de/
SSLEngine on
SSLCertificateFile /etc/ssl/mail.meinedomain.de.cer
SSLCertificateKeyFile /etc/ssl/mail.meinedomain.de.key
# Intermediate Zertifikat
# SSLCertificateChainFile /etc/ssl/sub.class1.server.sha2.ca.pem
# Root Zertifikat
# SSLCACertificateFile /etc/ssl/ca.pem
ServerName mail.einedomain.de
CustomLog ${APACHE_LOG_DIR}/mail.meinedomain.de_access.log combined
ErrorLog ${APACHE_LOG_DIR}/mail.meinedomain.de_error.log
DocumentRoot /var/www/mail.meinedomain.de/htdocs/
HostnameLookups Off
UseCanonicalName Off
ServerSignature Off
#Header always set Strict-Transport-Security „max-age=10886400“
Alias /vimbadmin /srv/vimbadmin/public
SSLRequireSSL
Options FollowSymLinks
AllowOverride FileInfo Indexes Limit
Require all granted
DirectoryIndex index.php index.html index.htm
Hat da möglicherweise jemand eine Idee.. sehe langsam vor lauter Bäumen den Wald nicht mehr :-(
Danke
In der man Page zu update-ca-certificates steht das die Zertifikate mit .crt enden müssen sonst werden sie nicht eingebunden.
Also habe ich das Zertifikat wie folgt erstellt.
openssl req -new -newkey rsa:4096 -sha256 -days 1095 -nodes -x509 -subj „/C=DE/ST=STATE/L=CITY/O=MAIL/CN=`hostname -f`“ -keyout /etc/ssl/`hostname -f`.key -out /etc/ssl/`hostname -f`.crt
Dann kopiert
cp /etc/ssl/`hostname -f`.crt /usr/local/share/ca-certificates/
und nun wird auch das Zertifikat geaddet…
update-ca-certificates
Updating certificates in /etc/ssl/certs… 1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d….done.
Bis dahin erstmal vielen Dank!
Hallo,
super Anleitung. Tolles Projekt. Was ich leider nicht hinbekomme:
Wo kann ich die erlaubte Größe von 2MB des Anhanges in Roundcube vergrößern? Wenn ich google frage kommen Hinweise auf postfix oder php.ini aber finde nichts in roundcube – oder hab es übersehen?!
Vielen Dank für ein Hinweis! Alles Gute
André
Hallo André!
Am Beispiel für 10MB funktioniert das folgendermaßen:
Erstelle im Roundcube-Verzeichnis die Datei „.user.ini“ mit folgendem Inhalt:
upload_max_filesize=10M
post_max_size=10M
In der nginx-Konfiguration mit dem Serverblock für Roundcube ist noch folgender Parameter hinzuzufügen:
client_max_body_size 10M;
Anschließend die Webserver-Dienste neu starten:
systemctl restart {nginx,php5-fpm}
Der Postfix-Parameter „message_size_limit“ (siehe Anleitung) muss natürlich >= 10MB gesetzt sein, sonst meckert wiederum Postfix.
Ich habe die genannten Parameter mit einer 9,9997MB großen Datei ohne Probleme getestet. Die Werte post_max_size & client_max_body_size dürfen auch mind. 1MB höher gewählt werden als das eigentlich gewünschte Limit für die Uploads um längere Texte und ggf. eingebettete Bilder zu erlauben.
Gruß
Stefan
Hallo,
vielen Dank für den Beitrag. Mailserver läuft :-)
Ich musste lediglich für ViMbAdmin einen „Virtual Host“ bei nginX einrichten. Das ist hier aber ganz gut beschrieben, auch für andere Webserver: https://github.com/opensolutions/ViMbAdmin/wiki
Dann hatte ich das Problem „“503 5.5.1 Error: authentication not enabled” das liegt laut diesem Beitrag an einem Typo in einer Standardkonfiguration. Demnach musste ich „smtp_sasl_auth_enable = yes“ hinzufügen. Siehe auch:
http://serverfault.com/questions/712903/503-5-5-1-error-authentication-not-enabled-when-trying-to-connect-to-my-postf
Auch ein guter Tipp danach bei bspw. mxtoolbox checken, ob alles korrekt eingerichtet wurde.
Danke und Grüße,
Alex
Hi, ich frage mich gerade, was der Unterschied sein wird zwischen einem nach diesem Howto aufgesetzten Mailserver und einem per MailCow installierten.
Wäre schön, wenn es dazu mal einen Blog-Post geben würde.
Die MailCow hat noch ein paar andere Funktionen zum einrichten neuer Benutzer und Backup z.B.
Aber es wäre toll wenn SoGo bald fertig wird und oder es dann eine Anleitung gibt für menschen die Nginx über easyengine installiert haben.
Hallo Andre,
vielen Danke für das Tutorial. Ich bin deinen Anleitungen strikt gefolgt, nur jetzt habe ich folgende Fehlermeldungen:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Auf der Vimb-Web:
ViMbAdmin_Exception
File
/srv/vimbadmin/library/ViMbAdmin/Dovecot.php
Line
57
Message
Error executing Dovecot password command: /usr/bin/doveadm pw -s ‚SHA512-CRYPT#md5.salted‘ -u ‚bs@zs-engineering.de‘ -p ‚passwd‘
Code
0
Trace
#0 /srv/vimbadmin/vendor/opensolutions/oss-framework/src/OSS/Auth/Password.php(90): ViMbAdmin_Dovecot::password(‚SHA512-CRYPT#md…‘, ‚passwd‘, ‚bs@zs-engine…‘)
#1 /srv/vimbadmin/application/controllers/MailboxController.php(317): OSS_Auth_Password::hash(‚passwd‘, Array)
#2 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Action.php(516): MailboxController->addAction()
#3 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Dispatcher/Standard.php(308): Zend_Controller_Action->dispatch(‚addAction‘)
#4 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#5 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Application/Bootstrap/Bootstrap.php(105): Zend_Controller_Front->dispatch()
#6 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Application.php(384): Zend_Application_Bootstrap_Bootstrap->run()
#7 /srv/vimbadmin/public/index.php(34): Zend_Application->run()
#8 {main}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Im syslog:
Mar 31 13:18:43 mail dovecot: imap-login: Error: SSL: Stacked error: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca: SSL alert number 48
Mar 31 13:18:43 mail dovecot: imap-login: Disconnected (no auth attempts in 0 secs): user=, rip=xx.xxx.xx.xx, lip=xx.xxx.xx.xxx, TLS: SSL_read() failed: Unknown error, TLS v1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Kannst du mir explizit erklären, wie ich diese Fehler beheben kann?
Vielen Danke im Voraus.
Hallo zusammen,
ich hoffe es kann mir jemand bei meinem Problem weiterhelfen, das wäre echt super super nett!
Und zwar habe ich Postfixadmin, Postfix und Dovecot mit MySQL nach dieser Anleitung installiert:
https://www.debinux.de/2013/10/mailserv … ment-56038
Dort wird auch angegeben wie man eine Allgemeine Quota installieren kann, jedoch würde ich nun via Postfixadmin einzelnen Usern verschiedene Quotas zuteilen. Ich habe mehrere Stunden und Tage damit verbracht Anleitungen aus dem Internet zu nutzen, jedoch hat nichts davon bisher geklappt … Entweder ich konnte mich nicht mehr einloggen, oder ich konnte mich einloggen und die Quota wurde nicht in die Datenbank geschrieben.
Evtl. kann jemand hier mir einen Tipp geben oder mir eine kurze Anleitung schreiben, was ich tuen muss damit es funktioniert, das wäre echt klasse!
Ich bräuchte daher evlt. eine kurze Anleitung was ich wo einstellen muss. Meine Config steht in der der dovecot.conf, so wie auch in dem beigefügten Link beschrieben ist mein Dovecot Server installiert, daher müsste ich nur wissen wie ich die Quota Einstellungen entsprechend umstelle, damit diese in die Datenbank geschrieben werden und auch mit Postfixadmin änderbar sind. Sowie das die Quota per IMAP übertragen wird. (das ist ja jetzt schon der Fall!)
Ich hoffe auf eine kurze Antwort! Vielen Lieben Dank!
Mit freundlichen Grüßen,
Oliver
Hallo,
hat jemand eine gute Anleitung um Postfixadmin und Dovecot auf die Quota umzustellen. Damit ich die Quota per Postfixadmin für jeden User setzen kann? Ich habe schon viele verschiedene Anleitungen gefunden nur diese habe nicht so richtig funktioniert. Hat jemand hier evtl. eine kurze Anleitung für mich oder einen kurzen Tipp? Das wäre echt super!
Oder kann ich die SQL Abfragen die hier erwähnt werden auch für Postfixadmin nutzen?
Ich denke und hoffe es kann mir jemand kurzfristig helfen!
Gruß,
Olli
Sehr schöne Anleitung. Habe das ganze 1:1 auf einem Ubuntu 14.04 (trusty) realisiert. Man muss allerdings Dovecot >= 2.2.16 für den STARTTLS Support aus einem alternativen Repository installieren. V2.2.9 aus der offiziellen stable Quelle reicht nicht.
Hi,
dein Tutorial ist immer wieder hilfreich. Vielen Dank dafür!
LG
Lukas
Hallo,
vielen Dank für die Anleitung. Für alle, die bei der Installation von VimBeAdmin mit Composer Probleme haben:
Smarty (eine Template Engine) lässt sich nicht (mehr) installieren, da die URL „nur“ mit http anstelle mit https beginnt. In dem Moment, in dem ihr die rote Fehlermeldung bekommt, könnt ihr folgendes machen:
– wechselt in das Verzeichnis /srv/vimbadmin mit „cd /srv/vimbadmin“
– öffnet die composer.json in /srv/vimbadmin mit „nano composer.json“ oder mit „vi composer.json“
– tragt direkt unter ‚“license“: „GPL-3.0+“,‘ folgendes ein:
„config“ : {
„secure-http“ : false
},
– Das Komma hinter der letzen geschweiften Klammer nicht vergessen! Danach die Datei speichern und schließen.
– da ihr euch noch immer im Verzeichnis /srv/vimbadmin befindet, könnt ihr direkt von dort aus die Installation von VimBeAdmin mit „composer update“ aktualisieren.
Die Installation sollte direkt an der abgebrochenen Stelle fortsetzen. Nach erfolgreichem Abschluss der Installation einfach mit der Anleitung dieser Webseite fortfahren!
Viel Glück!
Tipp:
Die Anführungszeichen werden leider auf dieser Seite falsch dargestellt. Nehmt euch am besten die anderen Einträge zur Hilfe, sonst gibts Fehler;)
MfG
Daniel
Danke für die hervorragende Vorlage!
Meine Frage:
Welche Plugins sind bei dovecot für POP3 einzutragen bzw. überflüssig?
Meine Konfiguration umfasst bislang:
————————-…————————-
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
mail_plugins = acl mail_log notify
}
————————-…————————-
Quota dürfte ja überflüssig sein, da POP3 keine Daten hinzufügt – nur löscht, bei ACL bin ich mir nicht sicher…
Was brauche ich da _wirklich_?
Hallo Stefan,
hast du das Problem mit pop3 gelöst?
Ich suche auch eine Antwort für dieses Problem
Hallo,
danke nochmal für die Super Anleitung.
hab jetzt alles nochmal neu aufgesetzt und jetzt läufts…. bitte mal meinen Spam löschen *facepalm*
Der Fehler lag wahrscheinlich in einem vergessenen wert den ich zwar später gesetzt hatte aber das ganze zusammenspiel schon so verwurschtelt war das es eben nicht lief…
ich tippe auf “ defaults.mailbox.maildir “ den hatte ich vergessen zu ändern, hab das korrigiert aber wie wir sehen ohne erfolg…
danke nochmal
gruß Mirko
Hallo!
Welche Gründe sprechen gegen Nutzung einer SQL Datenbank durch amavisd-new?
Danke.
bin hier am verzweifeln
bekomme keine mails raus
amavis ärgert mich …
mail.log ->
!)rw_loop: leaving rw loop, no progress, last event (select) 35.035 s ago
Mar 7 22:55:47 mail amavis[11217]: (11217-01) (!)Fyec_qoLEftU FWD from -> , 451 4.5.0 From MTA() during fwd-connect (No greeting, dt: 35.769 s): id=11217-01
Mar 7 22:55:48 mail amavis[11217]: (11217-01) Blocked MTA-BLOCKED {TempFailedInternal}, SUBMISSION LOCAL [62.146.106.29]:37905 [79.238.98.141] -> , Message-ID: , mail_id: Fyec_qoLEftU, Hits: -0.018, size: 362286, 46277 ms
Mar 7 22:55:49 mail amavis[11218]: (11218-01) Negative SMTP response to data-dot (): 451 4.5.0 id=11217-01 – Temporary MTA failure on relaying, From MTA() during fwd-connect (No greeting, dt: 35.769 s): id=11217-01, dt: 44194.5 ms
Mar 7 22:55:49 mail amavis[11218]: (11218-01) (!)L2dVQl4AIzbh FWD from -> , BODY=8BITMIME 451 4.5.0 from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11217-01 – Temporary MTA failure on relaying, From MTA() during fwd-connect (No greeting, dt: 35.769 s): id=11217-01
Mar 7 22:55:49 mail amavis[11218]: (11218-01) Blocked MTA-BLOCKED {TempFailedInternal}, SUBMISSION LOCAL [62.146.106.29]:37905 [79.238.98.141] -> , Message-ID: , mail_id: L2dVQl4AIzbh, Hits: -0.018, size: 362018, 51638 ms
Mar 7 22:55:49 mail amavis[11221]: (11221-01) Negative SMTP response to data-dot (): 451 4.5.0 id=11218-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11217-01 – Temporary MTA failure on relaying, From MTA() during fwd-connect (No greeting, dt: 35.769 s): id=11217-01, dt: 51499.7 ms
Mar 7 22:55:49 mail amavis[11221]: (11221-01) (!)wMH7JmvNDz2m FWD from -> , BODY=8BITMIME 451 4.5.0 from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11218-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11217-01 – Temporary MTA failure on relaying, From MTA() during fwd-connect (No greeting, dt: 35.769 s): id=11217-01
Mar 7 22:55:49 mail amavis[11221]: (11221-01) Blocked MTA-BLOCKED {TempFailedInternal}, SUBMISSION LOCAL [62.146.106.29]:37905 [79.238.98.141] -> , Message-ID: , mail_id: wMH7JmvNDz2m, Hits: -0.018, size: 361750, 58810 ms
Mar 7 22:55:49 mail amavis[11220]: (11220-01) Negative SMTP response to data-dot (): 451 4.5.0 id=11221-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11218-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11217-01 – Temporary MTA failure on relaying, From MTA() during fwd-connect (No greeting, dt: 35.769 s): id=11217-01, dt: 58749.9 ms
Mar 7 22:55:49 mail amavis[11220]: (11220-01) (!)7YvhGHhKSL3K FWD from -> , BODY=8BITMIME 451 4.5.0 from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11221-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11218-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11217-01 – Temporary MTA failure on relaying, From MTA() during fwd-connect (No greeting, dt: 35.769 s): id=11217-01
Mar 7 22:55:49 mail amavis[11220]: (11220-01) Blocked MTA-BLOCKED {TempFailedInternal}, SUBMISSION LOCAL [62.146.106.29]:37905 [79.238.98.141] -> , Message-ID: , mail_id: 7YvhGHhKSL3K, Hits: -0.018, size: 361482, 66244 ms
Mar 7 22:55:49 mail amavis[11216]: (11216-01) Negative SMTP response to data-dot (): 451 4.5.0 id=11220-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11221-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11218-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11217-01 – Temporary MTA failure on relaying, From MTA() during fwd-connect (No greeting, dt: 35.769 s): id=11217-01, dt: 65861.6 ms
Mar 7 22:55:49 mail amavis[11216]: (11216-01) (!)vkwaICgyLxBl FWD from -> , BODY=8BITMIME 451 4.5.0 from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11220-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11221-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11218-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11217-01 – Temporary MTA failure on relaying, From MTA() during fwd-connect (No greeting, dt: 35.769 s): id=11217-01
Mar 7 22:55:49 mail amavis[11216]: (11216-01) Blocked MTA-BLOCKED {TempFailedInbound}, [62.146.106.29]:37905 [79.238.98.141] -> , Message-ID: , mail_id: vkwaICgyLxBl, Hits: -0.018, size: 361208, 87016 ms
Mar 7 22:55:49 mail postfix/smtpd[11608]: proxy-reject: END-OF-MESSAGE: 451 4.5.0 id=11216-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11220-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11221-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11218-01 – Temporary MTA failure on relaying, from MTA(smtp:[127.0.0.1]:10025): 451 4.5.0 id=11217-01 – Temporary MTA failure on relaying, From MTA() during fwd-connect (No greeting, dt: 35.769 s): id=11217-01; from= to= proto=ESMTP helo=
Mar 7 22:55:49 mail postfix/smtpd[11608]: disconnect from smtp03.udag.de[62.146.106.29]
Mar 7 22:55:49 mail postfix/postscreen[11599]: CONNECT from [62.146.106.29]:38149 to [84.200.12.174]:25
main.cf domian.tld hab ich zurück geändert :P ->
# SMTPd greeting banner: You MUST specify $myhostname at the start of the text. This is required by the SMTP protocol.
smtpd_banner = $myhostname
# Disable local biff service
biff = no
# Do not append the string $mydomain to -locally- submitted email.
append_dot_mydomain = no
# Readme directory
readme_directory = /usr/share/doc/postfix
# HTML directory
html_directory = /usr/share/doc/postfix/html
# Certificates
smtpd_tls_cert_file = /etc/ssl/mail.domain.tld.cer
smtpd_tls_key_file = /etc/ssl/mail.domain.tld.key
# Opportunistic TLS. TLS auth only.
smtpd_tls_security_level=may
smtpd_tls_auth_only=yes
# TLS session cache for SMTPd
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
# Disallow SSLv2 and SSLv3, only accept secure ciphers
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_ciphers=high
# Log TLS handling
smtpd_tls_loglevel = 1
smtp_tls_loglevel = 1
# Delay reject until RCPT TO
smtpd_delay_reject = yes
# Enable elliptic curve cryptography, „ultra“ needs more cpu time
smtpd_tls_eecdh_grade = strong
# Sender, recipient, client and data restrictions
# !! non-FQDN HELOs are rejected on Port 25 only, see master.cf
# Auth. Benutzer dürfen auch innerhalb der „mynetworks“ nur von den Adressen senden, die ihnen zugehörig sind.
smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch,
# Erst jetzt werden „mynetworks“ zugelassen
# Unauth. Benutzer wie der Cron-Dienst können so weiterhin Mails versenden, etwa
# als cron@fqdn
permit_mynetworks,
# Anderen unauth. Benutzern das Benutzen jeder Adresse verbieten.
reject_sender_login_mismatch,
# Alle auth. jetzt zulassen.
permit_sasl_authenticated,
# Nicht im System vorhandene Absender jetzt ablehnen
reject_unlisted_sender,
# Ablehnen, wenn die Sender-Domäne nicht existiert
reject_unknown_sender_domain
# Akzeptiere alle Empfänger, die ein authentifizierter Absender oder ein Absender aus „mynetworks“ angibt
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
# Schnittstelle zu Dovecot, um die Quota live zu überprüfen (verhindert Bounces)
check_policy_service unix:private/quota-status,
# Ablehnen, wenn der HELO FQDN nicht aufzulösen ist
reject_unknown_helo_hostname,
# Ablehnen, wenn KEIN PTR zu dieser IP existiert
# Verhindert nicht, dass ein FALSCHER PTR abgelehnt wird!
# Hierfür würde „reject_unknown_client_hostname“ verwendet.
reject_unknown_reverse_client_hostname,
# Kein offenes Relay
reject_unauth_destination
# Unauth. Benutzer dürfen ihre Befehle nicht „pipen“
smtpd_data_restrictions =
reject_unauth_pipelining,
permit
# Eine Art Tabelle mit vorhanden Identitäten und ihren Zugehörigkeiten
smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql/postfix-mysql-virtual_alias_maps.cf
# Certificates
smtp_tls_cert_file = /etc/ssl/mail.domain.tld.cer
smtp_tls_key_file = /etc/ssl/mail.domain.tld.key
# Opportunistic TLS. Use TLS if this is supported by the remote SMTP server, otherwise use plaintext.
smtp_tls_security_level=may
# TLS session cache for SMTP
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# A custom list with secure ciphers.
tls_high_cipherlist=EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
# Use the FQDN for the local hostname!
myhostname = mail.domain.tld
# Alias maps and database for -local- delivery only
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# The domain name that locally-posted mail appears to come from, and that locally posted mail is delivered to.
myorigin = mail.domain.tld
# The list of domains that are delivered via the -local- mail delivery transport. No external domains like „domain.tld“ belong here! „mail.domain.tld“ is fine.
mydestination = mail.domain.tld, localhost
# We lookup MX records to send non-local mail, so this stays empty
relayhost =
# Trusted SMTP clients with more privileges. Trusted clients can relay mail.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
# The maximal size of any -local- individual mailbox
mailbox_size_limit = 0
# The maximal size of any -virtual- individual mailbox
virtual_mailbox_limit = 0
# Handle Postfix-style extensions
recipient_delimiter = +
# The network interface addresses that this mail system receives mail on.
inet_interfaces = all
# Specifies what protocols Postfix will use when it makes or accepts network connections, and also controls what DNS lookups Postfix will use when it makes network connections.
inet_protocols = ipv4
# VRFY command is not really needed anymore
disable_vrfy_command = yes
# Please say hello first…
smtpd_helo_required = yes
# The SASL plug-in type that the Postfix SMTP server should use for authentication.
smtpd_sasl_type=dovecot
# Where to passthrough our authentication information for the above plug-in
smtpd_sasl_path=private/auth_dovecot
# Enable SASL authentication in the Postfix SMTP server.
smtpd_sasl_auth_enable = yes
# Report the SASL authenticated user name in the smtpd Received message header.
smtpd_sasl_authenticated_header = yes
# Have Postfix advertise AUTH support in a non-standard way.
broken_sasl_auth_clients = yes
# The lookup tables that the proxymap server is allowed to access for the read-only service.
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
## Virtual transport configuration
# A prefix that the virtual delivery agent prepends to all pathname results from $virtual_mailbox_maps
virtual_mailbox_base = /
# THIS contains a list of domains we are the final destination for (unlike „mydestination“).
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/postfix-mysql-virtual_domains_maps.cf
# Alias specific mail addresses or domains to other local or remote address.
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/postfix-mysql-virtual_alias_maps.cf
# Specify a left-hand side of „@domain.tld“ to match any user in the specified domain
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/postfix-mysql-virtual_mailbox_maps.cf
# The minimum user ID value that the virtual delivery agent accepts
virtual_minimum_uid = 5000
# We use „vmail“ user with UID/GID 5000 to lookup tables
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
# The default mail delivery transport and next-hop destination for final delivery to domains listed with „virtual_mailbox_domains“
virtual_transport = lmtps:unix:private/dovecot-lmtp
transport_maps = mysql:/etc/postfix/mysql/postfix-mysql-virtual_transport_maps.cf
## Queue configuration
# Consider a message as undeliverable, when delivery fails with a temporary error, and the time in the queue has reached this limit.
maximal_queue_lifetime = 1d
# Consider a bounce message as undeliverable, when delivery fails with a temporary error, and the time in the queue has reached this limit.
bounce_queue_lifetime = 1d
# The time between deferred queue scans by the queue manager.
queue_run_delay = 300s
# The maximal/minimal time between attempts to deliver a deferred message.
maximal_backoff_time = 1800s
minimal_backoff_time = 300s
# Maximum mail size (500 MiB)
message_size_limit = 524288000
# This tarpits a client after 3 erroneous commands for 10s
smtpd_soft_error_limit = 3
smtpd_error_sleep_time = 10s
smtpd_hard_error_limit = ${stress?1}${stress:5}
postscreen_access_list = permit_mynetworks
# Drop connections from blacklisted servers with a 521 reply
postscreen_blacklist_action = drop
# Clean Postscreen cache after 24h
postscreen_cache_cleanup_interval = 24h
postscreen_dnsbl_ttl = 5m
postscreen_dnsbl_threshold = 8
postscreen_dnsbl_action = enforce
postscreen_dnsbl_sites =
b.barracudacentral.org=127.0.0.2*7
dnsbl.inps.de=127.0.0.2*7
bl.mailspike.net=127.0.0.2*5
bl.mailspike.net=127.0.0.[10;11;12]*4
dnsbl.sorbs.net=127.0.0.10*8
dnsbl.sorbs.net=127.0.0.5*6
dnsbl.sorbs.net=127.0.0.7*3
dnsbl.sorbs.net=127.0.0.8*2
dnsbl.sorbs.net=127.0.0.6*2
dnsbl.sorbs.net=127.0.0.9*2
zen.spamhaus.org=127.0.0.[10;11]*8
zen.spamhaus.org=127.0.0.[4..7]*6
zen.spamhaus.org=127.0.0.3*4
zen.spamhaus.org=127.0.0.2*3
hostkarma.junkemailfilter.com=127.0.0.2*3
hostkarma.junkemailfilter.com=127.0.0.4*1
hostkarma.junkemailfilter.com=127.0.1.2*1
wl.mailspike.net=127.0.0.[18;19;20]*-2
hostkarma.junkemailfilter.com=127.0.0.1*-2
postscreen_greet_banner = $smtpd_banner
postscreen_greet_action = enforce
postscreen_greet_wait = 3s
postscreen_greet_ttl = 2d
postscreen_bare_newline_enable = no
postscreen_non_smtp_command_enable = no
postscreen_pipelining_enable = no
postscreen_cache_map = proxy:btree:$data_directory/postscreen_cache
master.cf -> # Postscreen on Port 25/tcp, filters zombies (spam machines) on first level with lowest costs.
smtp inet n – n – 1 postscreen
# Postscreen passes sane clients to the real SMTP daemon here.
smtpd pass – – n – – smtpd
# Reject non-FQDN HELOs on Port 25 (after passing postscreen process)
-o smtpd_helo_restrictions=permit_mynetworks,reject_non_fqdn_helo_hostname
-o smtpd_proxy_filter=127.0.0.1:10024
-o smtpd_client_connection_count_limit=10
-o smtpd_proxy_options=speed_adjust
# For mail submitting users. Authenticated clients and known networks only.
submission inet n – – – – smtpd
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_proxy_filter=127.0.0.1:10025
-o smtpd_client_connection_count_limit=10
-o smtpd_proxy_options=speed_adjust
# Handles TLS connections for postscreen to make them readable
tlsproxy unix – – n – 0 tlsproxy
# This implements an ad-hoc DNS white/blacklist lookup service
dnsblog unix – – n – 0 dnsblog
pickup fifo n – – 60 1 pickup
cleanup unix n – – – 0 cleanup
qmgr fifo n – n 300 1 qmgr
tlsmgr unix – – – 1000? 1 tlsmgr
rewrite unix – – – – – trivial-rewrite
bounce unix – – – – 0 bounce
defer unix – – – – 0 bounce
trace unix – – – – 0 bounce
verify unix – – – – 1 verify
flush unix n – – 1000? 0 flush
proxymap unix – – n – – proxymap
proxywrite unix – – n – 1 proxymap
smtp unix – – – – – smtp
relay unix – – – – – smtp
showq unix n – – – – showq
error unix – – – – – error
retry unix – – – – – error
discard unix – – – – – discard
local unix – n n – – local
virtual unix – n n – – virtual
lmtp unix – – – – – lmtp
anvil unix – – – – 1 anvil
scache unix – – – – 1 scache
# LMTP with STARTTLS support, needs newer Dovecot versions
lmtps unix – – – – – lmtp
-o lmtp_use_tls=yes
-o lmtp_tls_loglevel=1
-o lmtp_tls_CAfile=/etc/ssl/certs/ca-certificates.crt
-o lmtp_enforce_tls=yes
-o lmtp_tls_mandatory_protocols=!SSLv2,!SSLv3
-o lmtp_tls_protocols=!SSLv2,!SSLv3
-o lmtp_tls_mandatory_ciphers=high
-o lmtp_tls_ciphers=high
-o lmtp_send_xforward_command=yes
-o lmtp_tls_security_level=encrypt
-o lmtp_tls_note_starttls_offer=yes
# Amavis reinjection, maximal 5 smtpd Prozesse, muss den Amavis Prozessen entsprechen!
127.0.0.1:10035 inet n – – – 5 smtpd
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=
-o mynetworks=127.0.0.0/8
-o receive_override_options=no_unknown_recipient_checks
irritierend ist allerdings
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Local version: 0.99 Recommended version: 0.99.1
packetverwaltung stallt aber nur die 0.99 bereit … ja auch im update
Hallo!
Vielen Dank für diese sehr gute Anleitung.
Ich habe den Mailserver eingerichtet, allerdings mit 2 Abweichungen vom hier vorgestellten Setup:
1. Die Datenbank läuft auf einem dedizierten Server
2. Der FQDN ist ungleich dem DNS
Die erste Modifikation ist unkritisch, soweit ich das beurteilen kann: alle Anwendungszugriffe von „roundcube“ und „ViMbAdmin“ funktionieren.
Was Probleme bereitet ist die zweite Modifikation.
Dies hängt damit zusammen, dass ich unsicher bin, womit mail.domain.tld in den diversen Konfig-Dateien ersetzt werden muss: FQDN (=mailserver.local.net) oder DNS (mail.domain.de)?
Ich habe folgende Dateien bisher identifiiziert, wo diese Konfiguration relevant ist:
/var/www/html/webmail/config/config.inc.php
/etc/postfix/main.cf
/etc/dovecot/dovecot.conf
/etc/amavis/conf.d/50-user
Ich wäre für jeden Hinweis dankbar, der erklärt, welcher Wert in welcher Konfig-Datei zu setzen ist.
THX
Vielen Dank es läuft alles!
Gab ein kleines Problem mit dem Composer der irgend eine Datei nicht via https laden konnte, hab einfach in der Konfiguration Secure-HTTP auf false gesetzt für den Download und danach wieder geändert
Hallo, bin auch bei der Installation hängen geblieben, da der Composer eine Datei (Smarty/Smarty) nicht laden konnte via HTTPS. Wie kann ich Composer denn Konfiguieren? Welche Datei ist dafür zuständig?
Würde mich über eine Antwort freuen.
Jürgen
Keine Ahnung wie der Composer Konfiguriert werden kann, aber eine andere Lösung.
Nach dem Abbruch des Composers
apt-get install subversion
cd /srv/vimbadmin
nano composer.json
ändere
„url“: „http://smarty-php.googlecode.com/svn/“,
nach
„url“: „https://smarty-php.googlecode.com/svn/“,
composer create-project
In welcher Konfiguration hast du Secure-Http auf false gesetzt? Entweder ich bin blind oder in keiner meiner Konfigs gibt es die Option.
Globale Konfigurationsänderung in composer geht mit:
composer config -g secure-http false
Vielen Dank für das Tutorial.
Es hat eigentlich alles Perfekt funkioniert, nur hab ich ein Problem ;)
Wenn ich Thunderbird starte mit einem Imap Account der ein paar unterordner hat (8 stück verschachtelt) muss ich jeden Ordner anklicken damit dieser Syncronisiert wird.
Und im mail.log steht folgendes:
#Thunderbird beendet
Mar 1 05:17:19 mail dovecot: imap(user@email.tld): Logged out in=230 out=1017
Mar 1 05:17:19 mail dovecot: imap(user@email.tld): Logged out in=122 out=604
Mar 1 05:17:19 mail dovecot: imap(user@email.tld): Logged out in=297 out=1354
Mar 1 05:17:19 mail dovecot: imap(user@email.tld): Logged out in=224 out=22584
Mar 1 05:17:19 mail dovecot: imap(user@email.tld): Logged out in=262 out=2543
Mar 1 05:17:19 mail dovecot: imap(user@email.tld): Logged out in=263 out=1111
Mar 1 05:17:19 mail dovecot: imap(user@email.tld): Logged out in=132 out=610
#Thunderbird gestartet und die Ordner durchgeklickt
Mar 1 05:17:25 mail dovecot: imap-login: Login: user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, mpid=5829, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:25 mail dovecot: imap-login: Login: user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, mpid=5830, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:25 mail dovecot: imap-login: Login: user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, mpid=5831, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:26 mail dovecot: imap-login: Login: user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, mpid=5833, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:31 mail dovecot: imap-login: Login: user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, mpid=5836, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:31 mail dovecot: imap-login: Login: user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, mpid=5837, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:32 mail dovecot: imap-login: Login: user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, mpid=5839, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:33 mail dovecot: imap-login: Login: user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, mpid=5841, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:34 mail dovecot: imap-login: Login: user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, mpid=5844, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:34 mail dovecot: imap-login: Login: user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, mpid=5845, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:35 mail dovecot: imap-login: Maximum number of connections from user+IP exceeded (mail_max_userip_connections=10): user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 1 05:17:35 mail dovecot: imap-login: Maximum number of connections from user+IP exceeded (mail_max_userip_connections=10): user=, method=PLAIN, rip=user.IP.Adress, lip=server.Ip.Adress.im.nat, TLS, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Ist das normal ?
danke und lg
Problem gelöst…;)
Mit der Installation der Composer Version „1.0.0-alpha10“ welche bei der Erstellung dieses Artikels noch aktuell war, lief der Installationsprozess sauber durch.
Alle Composer Versionen ab „alpha11“ lassen von Grundeinstellungsseite nur noch HTTPS zu.
https://getcomposer.org/download/1.0.0-alpha10/composer.phar
Vielleicht bringt mich hier jemand auf die richtige Lösung…
ich habe das Problem das ich seit kurzem wenn ich eine neue E-Mail über Vimbadmin anlege kein Passwort gesetzt wird.
Dieses Problem kann ich derzeit nur lösen in dem ich selbst in die Datenbank reingehe und das Passwort über update mailbox set … blablabla
ich hab schon alle Passwörter durch geguckt und überall ist das richtige gesetzt die Verschlüsslungen sind ebenfalls überall gleich… ich bin am verzweifeln…
so hab mein Problem selbst gelöst :)
ich hatte in meiner php.ini Datei exec in den disable_functions … somit konnte er es nicht ausführen… danach hatte ich noch ein Problem mit den rechten was klar war weil ich das so oft umher gezogen habe das diese nicht mehr passen konnten…
Ich hab seit kurzem ein ähnliches Problem.
Ich kann mich per Vimbadmin nicht mehr anmelden. Meine Benutzer haben Passwörter, Anmeldung per Roundcube und IMAP Client klappt, nur die Anmeldung an Vimbadmin klappt nicht. Vielleicht hängen diese Probleme zusammen?
Hat sich zwischenzeitlich bei ViMbAdmin etwas geändert? Habe die Anleitung auf einem frischen System abgearbeitet aber die Anforderung bricht ab. Im Log steht:
16/02/26 15:50:39 [error] 11165#0: *36 FastCGI sent in stderr: „PHP message: PHP Warning: require_once(/srv/vimbadmin/application/../vendor/autoload.php): failed to open stream: Permission denied in /srv/vimbadmin/public/index.php on line 12
PHP message: PHP Fatal error: require_once(): Failed opening required ‚/srv/vimbadmin/application/../vendor/autoload.php‘ (include_path=‘.:/usr/share/php:/usr/share/pear‘) in /srv/vimbadmin/public/index.php on line 12“ while reading response header from upstream, client: , server: , request: „GET /admin/index.php HTTP/1.1“, upstream: „fastcgi://unix:/var/run/php5-fpm.sock:“, host: „“
Schätze da müssen Zugriffsrechte angepasst werden, aber welche (v.a. da das ja scheinbar bei vielen anderen ohne Änderung funktioniert)?
Ist der Link vorhanden:
ln -s /srv/vimbadmin/public/ /var/www/html/admin
Hat bei mir direkt funktioniert. Ist keine Woche her.
Und die .htaccess:
cp /srv/vimbadmin/public/.htaccess.dist /srv/vimbadmin/public/.htaccess
Hallo, Anleitung ist super aber 2 Problemchen habe ich da doch:
1.) Unter Jessie lassen sich die MySQL User so wie oben angegeben nicht erstellen (ok manuell erledigt…passt!)
2.) alles läuft…kann Emails senden aber erhalte keine?
Jemand ne Idee
Super Tutorial! Vielen Dankd dafür. Hat soweit alles funktioniert.
Jetzt habe ich noch eine Frage: wie lässt sich Amacube (https://github.com/akoeb/amacube) als Roundcube Plugin in dieses Setup integrieren? Das wäre das *Einzige*, was hier noch „fehlen“ würde. Oder gibt es eine gute Alternative zu Amacube?
Gerade lese ich mich in amavis ein und bin noch nicht ganz dahinter gekommen, wie alles miteinander verbunden ist…
Pingback: Eigener Mailserver - eine gute Idee? › Dominic Pratt
Guten Abend!
Geniales Tutorial! Sehr schön, übersichtlich & ausführlich.
Jedoch habe ich ein kleines Problemchen, und zwar:
Bis zum Browser-Aufruf von VimbAdmin funktioniert alles. Antworten vom Bash genauso wie beim Tutorial beschrieben. Geht es dann jedoch um’s aufrufen der /admin-Seite, bockt mein Server und meint, er könne das Directory nicht finden (man wird auf hostname.tld/admin/auth/login weitergeleitet -> nicht vorhanden)
Genaue Antwort von Nginx: https://gyazo.com/8738880ff9d0342c7be8d1abf277215e (Bild)
Eintrag im ServerLog: http://hastebin.com/imarozevex.vbs (Textdatei)
Ich würde mich gewaltig über eine Antwort freuen, da ich dieses Tutorial gerne vollenden möchte ;)
Freundliche Grüsse
raphih18
hallo, auch ich bin völlig begeistert von der Anleitung und schaut soweit alles gut aus.
emails kommen an .. webmail geht, domains einrichten geht, nur komme ich auf die mailbox per imap nicht drauf
Feb 14 19:01:51 mail dovecot: imap-login: Disconnected (auth failed, 1 attempts in 2 secs): user=, method=PLAIN, rip=::1, lip=::1, TLS, TLSv1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)
thunderbird findet beim einrichten imap 143 TSL passwort, normal, sagt aber dann immer passwort ist falsch
hab schon die config rauf und runter gelesen .. finde aber den fehler nicht.
irgendwelche tipps?
danke!
Guten Abend!
Geniales Tutorial! Sehr schön, übersichtlich & ausführlich.
Jedoch habe ich ein kleines Problemchen, und zwar:
Bis zum Browser-Aufruf von VimbAdmin funktioniert alles. Antworten vom Bash genauso wie beim Tutorial beschrieben. Geht es dann jedoch um’s aufrufen der /admin-Seite, bockt mein Server und meint, er könne das Directory nicht finden (man wird auf hostname.tld/admin/auth/login weitergeleitet -> nicht vorhanden)
Genaue Antwort von Nginx: https://gyazo.com/8738880ff9d0342c7be8d1abf277215e (Bild)
Eintrag im ServerLog: http://hastebin.com/imarozevex.vbs (Textdatei)
Ich würde mich gewaltig über eine Antwort freuen, da ich dieses Tutorial gerne vollenden möchte ;)
Freundliche Grüsse
raphih18
Könntest du bitte mal folgendes überprüfen…
shell aufrufen
mysql -u vimbadmin -p
passwort eingeben für die sql datenbank
use vimbadmin
select * from mailbox
und gucken ob die betroffenen User ein leeres Passwort haben?
Hallo André !
Danke für das Tutorial, mal eins von den wenigen, die auf Anhieb funktionieren. Ich hab noch eine kleine Ergänzung: wenn man seinen Benutzern ermöglichen möchte, das Passwort direkt in Roundcube zu ändern, da kann man das ganz leicht erreichen, indem man einfach nur folgendes am Ende der Datei /var/www/html/webmail/config/config.inc.php einfügt:
$config[‚plugins‘] = array(‚password‘);
$config[‚password_db_dsn‘] = ‚mysql://vimbadmin:changeme@localhost/vimbadmin‘;
$config[‚password_query‘] = ‚UPDATE vimbadmin.mailbox SET password = %D WHERE username = %l“@“%d LIMIT 1‘;
$config[‚password_dovecotpw‘] = ‚/usr/bin/doveadm pw‘;
$config[‚password_dovecotpw_method‘] = ‚SHA512-CRYPT‘;
?>
Dabei ist changeme natürlich wieder durch das korrekte MySQL-Passwort von vimbadmin zu ersetzen, wie in der Anleitung auch.
WICHTIG: Die Anführungsstriche bitte durch einfache Hochkommas ersetzen, irgendwie wird das immer umformatiert beim posten.
Viele Grüße,
Marcel
PS:
Den „smtpd_sasl_authenticated_header“ in der main.cf kann man wohl auf „no“ setzen, ohne dass es beim senden/empfangen Probleme gibt.
Habe nur ein großes Postfach und alle Adressen in das Postfach geleitet und in meinem Client als Alias eingerichtet.
Die Adresse von dem Hauptpostfach ist aus „Sicherheitsgründen“ eher kryptisch und wird, wenn „smtpd_sasl_authenticated_header“ auf „yes“ steht, jedoch im Header mitgesendet. (Wenn keiner den Nutzernamen weiß, nützt ihnen auch das Passwort nichts ;), hoffe ich)
Nach kurzen Recherchen und Tests kann ich allerdings sagen, dass das die Gegenstelle nicht interessiert, ob der Part nun mitgesendet wird, oder nicht. habe das nun seit Dezember am Laufen und konnte keine Probleme feststellen.
Kann man eventuell auch ins nächste Mailcow Update im Webinterface als optionale Einstellung unter „Privacy“ packen.
./bin/doctrine2-cli.php orm:schema-tool:create
ATTENTION: This operation should not be executed in a production environment.
Wenn man deine Anleitung denn Produktiv nutzen will, ist diese Meldung hier ok? :/
Fetchmail einzubinden war eigentlich straightforward, also
1. sudo apt-get install fetchmail
2. sudo nano /etc/defaults/fetchmail
dort START_DEAMON=no ändern in START_DEAMON=yes
3. sudo cp /usr/share/doc/fetchmail/examples/fetchmailrc.example /etc/fetchmailrc
4. sudo nano /etc/fetchmailrc
Dort die Server mit den entsprechenden Konten eintragen, die abgeholt werden sollen. z.B.:
poll pop.gmx.net with protocol pop3
user user1@gmx.net password meinpasswort is lokaleskonto@mydomain here;
Der Eintrag sollte eigentlich weitgehend selbsterklärend sein. Zum ersten Testen empfiehlt es sich, vor dem Semikolon noch ein keep einzufügen, damit bleiben die abgeholten NAchrichten auf dem Server liegen, falls irgendwo was klemmt…
Achtung! Wenn fetchmail einmal eine Nachricht erfolgreich abgeholt hat, erkennt es sie als „seen“ und holt sie nicht mehr ab. mit fetchall kann man das aber erzwingen.
5. Damit fetchmail mit der Arbeit beginnt, noch ein
sudo systemctl restart fetchmail.service
und schon sollten die Mails eintrudeln.
Eine Idee, wie man das mit dem fetchmail-plugin von roundcube kombinieren kann? daran beißen ich mir nämlich gerade die Zähne aus…
Pingback: Mailserver auf Debian Jessie - Carsten's Weblog
Erstmal super für das ausführliche Tutorial.
Hat nach kurzen anlauf Schwierigkeiten super geklappt. Habe statt der selbst signierten Zertifikate die kostenlosen von „letsencrypt“ verwendet was auch tadellos funktioniert.
Was mich noch interessiert, hat jemand von euch noch FETCHMAIL integriert? Ich würde gerne meine ganzen alten E-Mail Adressen einsammeln und in meine 2 Useraccounts verteilen.
Gibts da auch eine schritt für schritt anleitung wie das eingebunden wird ?
Grüße Hannes
Klasse Tutorial!
Ich bin 1:1 durchgeflogen und fast alles funktioniert auf Anhieb. Das einzige was ich bisher feststellen konnte ist der folgende Logeintrag:
Dec 7 13:01:58 srv dovecot: imap-login: Error: SSL: Stacked error: error:0608308E:digital envelope routines:EVP_PKEY_get1_EC_KEY:expecting a ec key
Dec 7 13:01:58 srv dovecot: imap-login: Error: SSL: Stacked error: error:0608308E:digital envelope routines:EVP_PKEY_get1_EC_KEY:expecting a ec key
Diese Zeilen erhalte ich sobald sich ein Client per IMAP anmelden möchte. Ich kann keinerlei Funktionseinschränkung feststellen, denn die Clients können sich ihre Mails normal abrufen. Allerdings stören mich diese Einträge – blöderweise finde ich nichts vernünftiges zu dieser Problematik. Immer heißt es nur ich solle darauf achten das die Zertifikate mit einer Leerzeile enden – was sie bereits alle tuen.
Hat hier noch jemand eine Idee?
Grüße
Martin
Beginnt dein privates Zertifikat (/etc/ssl/`hostname -f`.key) nur mit „BEGIN PRIVATE KEY“?
Es kann sein, dass dovecot „BEGIN RSA PRIVATE KEY“ im privaten Key erwartet.
@Tobi
Ich habe nochmal alles rückgängig gemacht und komplett von vorne angefangen und jetzt geht es… Warum auch immer.
Hay,
@Carsten ich habe genau dasselbe Problem, mit apache2 funktioniert auch alles beim anlegen, hab versucht selbst di eProtokollen und die configs (.cf) zu verändern ohne erfolg
@an alle : Währe es möglich das mir jemand der das vollwertig zum laufen bekommen hat auch vlt die Dateien schicken :)
DANKE für diese super Anleitung.
Mit Hilfe der Kommentare habe ich diesen Mail-Server in Kombination mit einem Apache2 installieren können.
In ViMbAdmin komme ich rein und kann dort auch Domains und Mailboxen anlegen. Auch in den Webmailer komme ich rein.
Nur kann ich leider keine Mails aus dem Webmailer versenden:
SMTP Fehler (451): Der Empfänger „xxx@domain.de“ konnte nicht gesetzt werden (4.3.0 : Temporary lookup failure)
Ich habe auch versucht mir eine eMail von aussen zu senden, aber auch das hat leider nicht geklappt.
Wo kann ich denn ansetzen, damit auch das Mail senden/empfangen klappt?
Viele Grüße
Carsten
Hallo Carsten,
ich hatte den Fehler auch. Fündig geworden bin ich in /var/log/mail.log. Die Postfix MySQL Config Dateien hatten einen Schreibfehler (in meinem Fall einen Typo beim DB-Usernamen „vimbadmin“). Nach Korrektur und Neustart aller Dienste lief der Mailserver dann auch wie erwartet reibungslos.
An alle neugierigen Mailserver Admins und die, die es noch werden möchten:
Auch wenn diese Anleitung schon etwas älter ist, ist sie nach wie vor immer noch für das aktuellste Debian Jessie gültig. Und das auch noch im Monat November 2016.
Viele Grüße
Daniel
Guter Artikel, alles ausführlich beschrieben. Am Ende der Datei /var/www/html/webmail/config/config.inc.php fehlt ein „?>“ tag, das könnte noch mit da rein.
Veerschicken von Mails klappt gut, jedoch bekomme ich keine eingehenden Mails
Anonymous TLS connection established from mailout-apollo.uni-duesseldorf.de[134.99.128.36]: TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)
NOQUEUE: reject: RCPT from mailout-apollo.uni-duesseldorf.de[134.99.128.36]: 454 4.7.1 (info@XXXXXXXXXX.XXX): Relay access denied; from=(XXXXXX.XXXXXX@uni-duesseldorf.de) to=(info@XXXXXXXXXX.XXX) proto=ESMTP helo=(mailout-apollo.uni-duesseldorf.de)
disconnect from mailout-apollo.uni-duesseldorf.de[134.99.128.36]
Probiert von verschiedenen Mailservern, es taucht immer eine Relay access denied Fehlermeldung in den Logs auf. Was muss ich umkonfigurieren damit ich Mails empfangen kann?
Hallo Andre,
ich habe mithilfe deiner Anleitung den Mail-Server erfolgreich einrichten können und alles funktioniert soweit einwandfrei. Jetzt will ich aber eine zweite Domain einrichten. Dafür kann ich ja in ViMbAdmin eine neue Domain, Adresse und Alias anlegen. Nach dem Anlegen und Neustart der Postfix, Dovecot,… Dienste und senden einer Testnachricht von meinem Googlemail-Account an die neu angelegte Email kommt diese mit der Meldung zurück, dass der Relay Access verweigert wird.
Beim Domain Hoster ist für die funktionierende Domain A ein MX-Eintrag definiert. Diesen hab ich auch bei der neuen Domain B eingetragen (MX bei A = mail.domainA.de, MX bei B = mail.domainA.de). Muss ich noch weitere Einstellungen tätigen, damit ich Emails bei der neuen Domain empfangen kann? Login über Roundcube funktioniert für beide Domains.
Es reicht, wenn
DomainB.tld. 86400 IN MX mail.DomainA.tld.
in der DNS-Zone der DomainB eingetragen ist. Am mailserver selbst muss nichts mehr angepasst werden. Wie schon angemerkt, sollte die DomainB in vimbadmin eingetragen sein.
evtl. kann man mit einem A-Record noch auf die IP von domainA verweisen (war bei meinem Provider voreingestellt)
Dauert dann ca. ein Tag bis alle DNS-Server die neue Domain kennen.
Hallo Andre,
danke für das gut kommentierte Tutorial und der schnellen Hilfe per Email. Ich hab dein Wink mit dem Zaunspfahl gleich für ein Betriebssystemwechsel genutzt. Bisher habe ich immer auf Apache gesetzt aber nginx ist irgenwie leichter zu konfigurieren.
Mein Problem ist noch, dass man das Userpasswort nicht via Roundcube ändern lässt. Im Netz habe ich diverse Anleitungen gefunden, wie man das Passwortplugin aktivieren kann. aber leider komme ich damit noch nicht so zurecht :( Das Passwortplugin wird inzwischen angezeigt aber ich kann das Passwort nicht speichern.
Mit
server {
listen 80;
listen [::]:80;
server_name mail.example.com;
return 301 https://$server_name$request_uri;
}
erzwinge ich quasi eine SSL Verschlüsselung für den Roundcube- bzw VimbAdminzugang.
Gruß
Jörg
Vielen dank für die Anleitung.
Ich habe den Content Filter mal bisschen getestet und er funktioniert recht gut. Emails werden gelöscht. Jedoch werden die Benutzer nicht darüber benachrichtigt.
Die Mails wurden erkannt welches man am „/var/log/clamav/clamav.log“ sieht.
Was mich jedoch nun verwundert, dass es einmal beim eMail-Test von Outlook funktioniert hat mit „Delivery status notification, invalid header section: missing required header field“
Wenn man das gefixt bekommt, wäre es perfekt.
Zunächst einmal einen Großen Dank für diese erstklassige Anleitung. Ich habe mit dieser Anleitung einen gut funktionierenden Mailserver aufgebaut und bin bisher sehr zufrienen.
Jetzt habe ich eine Frage/Problem:
Ich versuche den Mailserver als Relay für meinen Webserver (auf einer anderen Maschine) zu nutzen. Das funktoniert per SMTP auch super solange der verwendete Account mit dem Sender (From) übereinstimmt. Sobald ich eine andere Adressen (selbst der gleichen Domain) verwende, kommt folgender Fehler im Log „Sender address rejected: not owned by user“ und die Mail wird nicht versendet.
Das ist allerdings ein Szenario was am Webserver ständig vorkommt.
Was muss ich an der Konfiguration ändern, dass ein Accout prinzipiell relayed … egal was kommt?
Gruß und Danke!
Hi,
am einfachsten ist es, du entfernst aus der main.cf-Datei die Anweisung
reject_authenticated_sender_login_mismatch
. Alternativ verwendest du -keine- Authentifizierung und fügst deinen Webserver zu „mynetworks“ hinzu. Das ist aber potentiell gefährlich. Nämlich dann, wenn der Webserver (oder eben eine Anwendung darauf) gehackt- und der Mailserver vom Webserver aus als offenes Relay verwendet wird.Oder du erstellst dir für die E-Mail Adresse, mit der du dich einloggst jeweils einen Alias. Der Benutzer, auf den ein Alias „zeigt“, darf auch unter diesem Alias E-Mails versenden. Das wäre die sauberste Lösung. :-) Allerdings musst du dann wirklich jeden Absender auch als Alias einbinden.
Viele Grüße
André
Was wäre die schnellste Variante das ein 2ter Server auch die Mails darüber verschickt?
Einen Mailaccount anlegen und dann über SMTP senden lassen oder gibt es noch eine schönere Variante?
VG
Sven
Ja, das ist wohl die sauberste Lösung, wenn von Anwendungen aus Mails versendet werden sollen. Der primäre Mailserver kann auch als „relayhost“ auf dem zweiten Server verwendet werden, allerdings nur nach Authentifizierung. Zu „mynetworks“ siehe meinen Kommentar eine Etage über dir. :-)
Hallo André
aus dem nichts taucht auf einmal ein dickes problem auf. Seit gestern, Nov 15 21:39:26, werden alle Nachrichten ‚rejected‘ mit
Client host rejected: cannot find your reverse hostname
An der Konfiguration habe ich nichts geändert. Mir fiel es heute auf, da ich täglich newsletter bekomme und diese heute morgen ausblieben. Versenden nach draussen, über den mailserver per desktop client funktioniert. Im mail.log fällt folgendes beim empfangen auf(1. mail von iCloud an mailserver, 2. von web.de an mailserver, 3. von privater Adresse, die bei einem normalen webhost ist, an mailserver):
egal von wo, nichts kommt durch. versenden nach draussen vom desktop client sowie aus roundcube funktioniert und sieht so aus:
Vielleicht weisst du wie das passieren konnte und was ich unternehmen kann, um wieder emails empfangen zu können? Ich nehme an, ich könnte in /etc/postfix/main.cf ‚reject_unknown_reverse_client_hostname‘ auskommentieren. Da es aber bisher wunderbar damit geklappt hat, frage ich mich, ob es vielleicht eine andere Lösung gibt.
Vielen Dank!
Hallo André,
ersteinmal vielen Dank für die gute ausfürliche Anleitung.
Ich habe hier ein Problem beim abholen der Mails. Wenn ich dies mit fetchmail mache, landen die Mails nicht in den angelegten User. Kann ich hier überhaupt fetchmail zum abholen einsetzten?
Gruß Thomas
Hallo Thomas, hast Du schon ne Lösung für das fetchmail Problem?
Hallo Andre
Also ich bin noch mal neu angefangen. Habe mein Vserver also noch mal neu aufgespielt mit debian 8. Und habe wieder nginx installiert.
Folgender Fehler immer noch: https://mail.tt-osl-pokal.de/admin/ Bad Gatway 502
im Eror log von Nginx steht weiterhin: 2015/11/09 23:40:23 [crit] 7737#7737: *200 connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: ****, server: mail.tt-osl-pokal.de, request: „GET /admin/ HTTP/1.1“, upstream: „fastcgi://unix:/var/run/php5-fpm.sock:“, host: „mail.tt-osl-pokal.de“
Hallo,
habe den Mailserver eingerichtet und alles funktioniert auch super. Vielen Dank dafür.
Neben dem Mailserver möchte ich gerne noch owncloud einrichten. Anscheinend vergebe ich aber falsche Rechte und kann die cloud nach der Installation nicht mehr aufrufen. Bekomme dann ständig ein 404 Not Found. Kann mir bitte jemand sagen, wie ich dem owncloud-Ordner die richtigen Rechte vergebe und dann auch eine Subdomain in nginx (cloud.domain.tld) hinzufüge?
Das ist das einzige Problem, welches ich habe. Ich hoffe, ihr könnt mir helfen.
Vielen Dank schon mal
Hallo Andre,
ich habe noch eine Frage. Die Installation hat soweit komplett super geklappt.
Ich kann auch User und Domains anlegen und mich in Roundcube damit einloggen.
Wenn ich allerdings eine Mail senden will, geht sie nicht raus und ich bekomme im Roundcube
SMTP Fehler: [451] 4.3.0 Error: queue file write error
Kannst Du mir sagen, an welchen Stellen ich ansetzen muss?
Danke Dir.
Ergänzung, ich bekomme im Log z.B.
Nov 4 23:11:29 mail postfix/smtpd[1178]: warning: timeout talking to proxy 127.0.0.1:10025
Nov 4 23:11:29 mail postfix/smtpd[1178]: proxy-reject: END-OF-MESSAGE: 451 4.3.0 Error: queue file write error;
Amavis ist jedoch gestartet.
Hallo, ich bin relativ weit gekommen in der Anleitung, allerdings startet jetzt mein nginx nicht mehr.
failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failed
Wo muss ich ansetzen?
cp /etc/ssl/`hostname -f`.cer /usr/local/share/ca-certificates/
und update-ca-certificates
habe ich für mein selbst erstelltes Zertifikat bereits gemacht….
Vielen Dank.
Hat sich erledigt. Habe die Zertifikate nochmal neu erstellt. Danach ging es.
Hallo André,
zunächst vielen Dank für die sensationell gute Anleitung.
Ich habe alles fast auf Anhieb zum Laufen bekommen. Danke!
Jetzt habe ich die Herausforderung noch pop3 zum Laufen zu bringen.
Meine Kunden verwenden neben IMAP leider auch noch POP3.
Was muss ich denn alles anpassen um POP3 zu ermöglichen. Über „sachdienliche“ Hinweise bin ich sehr dankbar ;-)
Vermutlich muss die dovecot.conf; aplication.ini angepasst werden, oder?
Danke im Voraus für Deine Mühe!
Gruß
Dino
Moin,
nach ein paar kleinen Problemen die ich selbst zu verantworten hatte :-D läuft nun über den Webmailer alles ohne Probleme!
Der Empfang auf dem Emailclient per imap und pop funktioniert auch, nur der Versand von Emails per smtp klappt nicht.
Erster versuch auf Port 25
Zurückgewiesen wegen Spam
Zweiter versuch auf Port 587
Zurückgewiesen weil kein FQDN
Dritter Versuch auf Port 587
Zurückgewiesen wegen Spam
Ich werde jetzt mal 24 Stunden warten damit sich postscreen zurücksetzt und dann nochmal probieren.
Danke aber für das tolle Tutorial!
Gruß, Stefan
alles klar, laeuft jetzt alles!
Eine Frage habe ich aber noch, gibt es eine Moeglichkeit das die Nutzer ihr Passwort selbst aendern koennen?
Gruss, Stefan
Hi André
Wollte mich herzlich bedanken für die tolle Anleitung. Schade ist nur, dass man ja fast nichts mehr überlegen muss ;-)
Ist ja alles Fix Fertig… Super!
Ich wollte noch kurz Fragen betreff Ports. Da ich nur die Ports mit meiner Firewall öffnen will die es auch braucht.
Port: 25, 443, 143, 587, 993, 4190
Stimmt das so? Müssen alle diese Ports von aussen Erreichbar sein?
Das andere ist, habe jetzt ein selbst signiertes Zertifikat. Das Klappt auch. Möchte jetzt dies aber mit einem StartSSL Zertifikat austauschen. Kann ich das Zertifikat einfach nur austauschen?
Oder wie gehe ich da vor?
Ich versteh es nicht es kommt immer aufs selbe hinaus er sagt mir immer bad gateway wenn ich die seite admin und webmail aufrufen will was mach ich falsch
Error log sagt mir:
2015/10/09 01:25:13 [crit] 21587#0: *13 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: ******, server: mail.tt-osl-pokal.de, request: „GET /webmail/ HTTP/1.1“, upstream: „fastcgi://unix:/var/run/php5-fpm.sock:“, host: „mail.tt-osl-pokal.de“
Hi,
schast du einmal nach, wie dein Listener heißt? ->
cat /etc/php5/fpm/pool.d/www.conf | grep "listen ="
Anschließend kannst du den ausgegebenen Namen in deiner Nginx-Site verwenden (anstelle von „/var/run/php5-fpm.sock“).
Eventuell ist auch ein TCP-Listener eingetragen, das wäre merkwürdig aber denkbar. Du verwendest Debian Jessie? PHP5-FPM startet? ->
service php5-fpm start
root@mail:~# cat /etc/php5/fpm/pool.d/www.conf | grep „listen =“
listen = /var/run/php5-fpm-www.sock
was soll ich da anderes eingeben ?
root@mail:~# service php5-fpm status
● php5-fpm.service – The PHP FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php5-fpm.service; enabled)
Active: active (running) since Fri 2015-10-09 03:24:41 CEST; 9h ago
Process: 28484 ExecStartPre=/usr/lib/php5/php5-fpm-checkconf (code=exited, status=0/SUCCESS)
Main PID: 28491 (php5-fpm)
Status: „Processes active: 0, idle: 9, Requests: 2, slow: 0, Traffic: 0req/sec“
CGroup: /system.slice/php5-fpm.service
├─28491 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
├─28495 php-fpm: pool mailserver
├─28496 php-fpm: pool mailserver
├─28497 php-fpm: pool mailserver
├─28498 php-fpm: pool www
├─28499 php-fpm: pool www
├─28500 php-fpm: pool www
├─28501 php-fpm: pool vserver3010
├─28502 php-fpm: pool vserver3010
└─28503 php-fpm: pool vserver3010
Hi Maik,
in dem Fall „/var/run/php5-fpm-www.sock“.
1.
nano /etc/nginx/sites-available/mailserver
2. „/var/run/php5-fpm.sock“ durch „/var/run/php5-fpm-www.sock“ ersetzen. :-)
Anschließend nur Nginx durchstarten:
service nginx restart
jetzt hab ich noch ein weiteres problem weil ich den nginx aupgraden wollte und dabein ist das rausgekommen:
root@mail:/etc# aptitude install nginx
The following NEW packages will be installed:
nginx
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/486 kB of archives. After unpacking 1212 kB will be used.
(Reading database … 59546 files and directories currently installed.)
Preparing to unpack …/nginx_1.9.5-1~jessie_amd64.deb …
———————————————————————-
Thanks for using nginx!
Please find the official documentation for nginx here:
* http://nginx.org/en/docs/
Commercial subscriptions for nginx are available on:
* http://nginx.com/products/
———————————————————————-
Unpacking nginx (1.9.5-1~jessie) …
dpkg: error processing archive /var/cache/apt/archives/nginx_1.9.5-1~jessie_amd64.deb (–unpack):
trying to overwrite ‚/usr/share/nginx/html/index.html‘, which is also in package nginx-common 1.8.0-1~dotdeb+8.2
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
/var/cache/apt/archives/nginx_1.9.5-1~jessie_amd64.debE: Sub-process /usr/bin/dpkg returned an error code (1)
Failed to perform requested operation on package. Trying to recover:
So jetzt hab ich es soweit hinbekommen das ich nginx wieder hinbekommen habe aber bei der version 1.9.5 gibt es die verzeichnisse sites-avabile und enable nicht mehr stattdessen nur noch conf.d kann ich die seite einfach unter conf.d hinzufügen und alles genau gleich machen ?
Die Verzeichnisse sind Abhängig von der Konfiguration. :-) Aber ja, alles in conf.d sollte funktionieren, wenn sie in der nginx.conf eingebunden werden.
naja bin bis wieder nur bis zum teil gekommen das ich auf die web oberfläche muss und da sagt er mir dann wenn ich nginx neustarte nginx -t
nginx: [emerg] open() „/etc/nginx/snippets/fastcgi-php.conf“ failed (2: No such file or directory) in /etc/nginx/conf.d/mailserver.conf:26
nginx: configuration file /etc/nginx/nginx.conf test failed
Wenn du zeit hast kannst ja mal drüber schauen bei mir
Oder weist du dazu auch keine lösung liegt ja irgendwie an dem script
Hi, meine Mail an dich kam gerade wieder zurück (nach 24 Stunden).
Es liegt genau daran:
„/etc/nginx/snippets/fastcgi-php.conf“ failed (2: No such file or directory)
. Die Datei gibt es in deinem Nginx Paket einfach nicht. Dort sind einige FCGI-relevante Einstellungen drin, die einfach für alle Sites gelten sollen und so schnell eingebunden werden können, ohne jedes mal 20 Zeilen zu kopieren.Ich empfehle einfach die Debian-eigene Nginx-Version zu übernehmen oder wenigstens die Datei
/etc/nginx/snippets/fastcgi-php.conf
an selbige Stelle zu kopieren, damit sie eingebunden werden kann.Ich weis nicht ob das weiter hilft habe eine fastcgi_params im haupt Verzeichnis von nginx ist das die selbe Datei ? muss ich das Script nur dahin ändern ?
Also ich hab die datei jetzt mal umgeschrieben und jetzt hab ich folgendes unter: https://mail.tt-osl-pokal.de/
403 Forbidden
nginx/1.9.5
Stimmt unter dem Verzeichnis findet man ja auch nix. Aber unter https://mail.tt-osl-pokal.de/webmail/ kommt wieder Bad Gateway Obwoll bei cat /etc/php5/fpm/pool.d/www.conf | grep „listen =“
listen = /var/run/php5-fpm-www.sock
das raus kommt und die mailserver.conf datei auch das fastcgi_pass unix:/var/run/php5-fpm-www.sock;
hat.
In der Error datei steht wieder das selbe wie beim anfang 2015/10/16 17:42:28 [crit] 27637#27637: *33 connect() to unix:/var/run/php5-fpm-www.sock failed (13: Permission denied) while connecting to upstream, client: *****, server: mail.tt-osl-pokal.de, request: „GET /webmail/ HTTP/1.1“, upstream: „fastcgi://unix:/var/run/php5-fpm-www.sock:“, host: „mail.tt-osl-pokal.de“
Hast du schon nen Lösungsansatz für mich ?
Bist du noch da ?
Also um noch mal Konkret zu werden der fehler heist immer noch:
2015/10/23 02:23:15 [crit] 5810#5810: *4 connect() to unix:/var/run/php5-fpm-mailserver.sock failed (13: Permission denied) while connecting to upstream, client: ****, server: mail.tt-osl-pokal.de, request: „GET /vibadmin/ HTTP/1.1“, upstream: „fastcgi://unix:/var/run/php5-fpm-mailserver.sock:“, host: „mail.tt-osl-pokal.de“
Nur ich weis nicht was der für eine erlaubnis haben will.
bist du noch da ?
kann das villeicht daran liegen das ich keine php5-fpm.conf habe ?
wenn das daran liegt kannst du mir eine geben ?
Hi Andre,
das tutorial hat mir sehr geholfen und der mailserver war recht flott am laufen.
nun, nach einigen wochen im betrieb habe ich ein problem mit dem adminpanel.
ich bekomme einen fehler. ich hatte in letzter zeit aber ausser updates nichts weiter gemacht.
Vielleicht kannst du mir weiterhelfen:
Die mysql db von vimbadmin sieht ok aus. ich weiss nicht woran es liegt.
Doctrine\Common\Persistence\Mapping\MappingException
File
/srv/vimbadmin/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php
Line
86
Message
Invalid mapping file ‚Entities.Admin.dcm.xml‘ for class ‚Entities\Admin‘.
Code
0
Trace
#0 /srv/vimbadmin/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/FileDriver.php(117): Doctrine\Common\Persistence\Mapping\MappingException::invalidMappingFile(‚Entities\\Admin‘, ‚Entities.Admin….‘)
#1 /srv/vimbadmin/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php(58): Doctrine\Common\Persistence\Mapping\Driver\FileDriver->getElement(‚Entities\\Admin‘)
#2 /srv/vimbadmin/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php(116): Doctrine\ORM\Mapping\Driver\XmlDriver->loadMetadataForClass(‚Entities\\Admin‘, Object(Doctrine\ORM\Mapping\ClassMetadata))
#3 /srv/vimbadmin/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(332): Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata(Object(Doctrine\ORM\Mapping\ClassMetadata), NULL, false, Array)
#4 /srv/vimbadmin/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(216): Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata(‚Entities\\Admin‘)
#5 /srv/vimbadmin/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(265): Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor(‚Entities\\Admin‘)
#6 /srv/vimbadmin/vendor/doctrine/orm/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php(67): Doctrine\ORM\EntityManager->getClassMetadata(‚Entities\\Admin‘)
#7 /srv/vimbadmin/vendor/doctrine/orm/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php(50): Doctrine\ORM\Repository\DefaultRepositoryFactory->createRepository(Object(Doctrine\ORM\EntityManager), ‚Entities\\Admin‘)
#8 /srv/vimbadmin/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(665): Doctrine\ORM\Repository\DefaultRepositoryFactory->getRepository(Object(Doctrine\ORM\EntityManager), ‚\\Entities\\Admin‘)
#9 /srv/vimbadmin/application/controllers/AuthController.php(52): Doctrine\ORM\EntityManager->getRepository(‚\\Entities\\Admin‘)
#10 /srv/vimbadmin/vendor/opensolutions/oss-framework/src/OSS/Controller/Trait/Auth.php(99): AuthController->_preLogin()
#11 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Action.php(516): AuthController->loginAction()
#12 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Dispatcher/Standard.php(308): Zend_Controller_Action->dispatch(‚loginAction‘)
#13 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#14 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Application/Bootstrap/Bootstrap.php(105): Zend_Controller_Front->dispatch()
#15 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Application.php(384): Zend_Application_Bootstrap_Bootstrap->run()
#16 /srv/vimbadmin/public/index.php(34): Zend_Application->run()
#17 {main}
Ich habe seit ein paar Tagen das selbe Problem und leider immer noch keine Lösung gefunden. Falls jemand eine Lösung hat, wäre ich sehr dankbar!
Siehe bitte https://github.com/opensolutions/ViMbAdmin/issues/154#issuecomment-157759979
Kurz: Du musst in der Datei vimbadmin/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php
direkt vor der Zeile
class XmlDriver extends FileDriver
die Zeile
libxml_disable_entity_loader(false);
einfügen. Dann geht es wieder.
Perfekte anleitung….
Super Vielen Dank, er rennt
Nach Zimbra fail on jessie, Horde Horror nun Roundcube echt nice.
Hi,
vielen Dank für dieses super geschriebene Howto/Tutorial! Meine Tests mit einem Digitalocean Droplet haben gezeigt, dass die ganz kleine Droplet Variante mit 512MB RAM zu wenig ist, mit 1GB RAM funktionerts. Ich plane meinen Mailserver bei einem anderen Anbieter als KVM basierten virtuellen Server mit 2+ GB RAM laufen zu lassen. Ich schwanke jetzt zwischen SSD oder normaler Platte, das ist natürlich ein preislicher Unterschied. Machts irgendeinen Sinn, für private Zwecke (3-5 Mailboxen mit durchschnittlichem Mailaufkommen) auf SSD Speicher zu setzen?
Zu Hardware Anforderungen für derartig gestaltete Mailserver findet man interessanterweise fast nichts. Mit jeder Wald und Wiesen Maschine dürfts dem Test nach aber aufgrund von amavis und clamav nicht funktionieren. Hast du, oder jemand der mitliest, einen Rat parat? Was sind die entscheidenden Faktoren bei der Performance? Anzahl der Mailboxen, Anzahl der E-Mails? Sind bei zu kleiner/langsamer Dimensionierung Instabilitäten und Verlust von E-Mails und Daten zu erwarten oder dauern Zustellung und Empfang einfach nur länger? Oder ist das in dieser Größenordnung alles schnurz :D?
Hi Chris,
der Flaschenhals eines Mailservers ist immer die Diskperformance. Allerdings noch nicht bei 3-5 Mailboxen. :-) Woran die meisten sehr sehr günstigen VPS scheitern, wird allerdings – wie du schon gemerkt hast – der Content-Scanner sein (ClamAV, SA etc.). Mit einem GB RAM (oder 1,5), bist du schon sehr gut unterwegs. SSD ist natürlich nie verkehrt, jedoch möchte ich dir da auch nichts vormachen, HDD reicht für deine Belange noch aus. Bis du auf die ersten Grenzen stößst, braucht es schon 50-60 aktiv genutzte Mailboxen – wenn nicht noch mehr.
Ich habe seit ein paar Monaten mein kleines KVM-Hosting servercow.de am laufen, vielleicht magst du es dir mal anschauen. Individuelle Angebote sind gar kein Problem.
Beste Grüße und vielen Dank für deine netten Worte,
André
Hi André,
ist einfach genial wie du dich um deinen Blog kümmerst und auch hier noch Fragen beantwortest, da sitzt das PayPal Passwort gleich ganz locker :).
servercow.de hab ich mir angesehen, das Angebot finde ich sehr gut – und es könnte hier auf debinux.de meiner Meinung nach viel prominenter beworben werden :D.
Eine Frage hab ich noch: Gibts bestimmte Gründe warum du fürs „Frontend“ des Mailservers auf nginx setzt? Macht der mit anderen diversen Mailserver bezogenen Webtools (ich hab AfterLogic Webmail Pro im Auge) eine bessere Figur? Oder sinds die üblichen Gründe wie Performance, kleinerer Footprint im System, oder einfach persönliche Neigung zu nginx anstatt Apache?
Ich arbeite beruflich hauptsächlich mit Apache und bin mit dessen Konfiguration und Features natürlich besser vertraut als mit nginx (wer hat mir die .htaccess geklaut?!?). Für den Mailserver wirds zwar bei nginx bleiben, der hat seine Chance verdient. Sollte ich dennoch mal zum altbewährten Apache wechseln, erwartet mich böses?
Beste Grüße, Chris
Hi Chris,
zur Zeit komme ich leider nicht soo viel zum Schreiben, wie ich es mir wünschen würde. :-( Aber vielen Dank! :-)
Du kannst in der mailcow.config von „nginx“ auf „apache2“ umstellen. Ich teste es seit einer Weile immer mit beiden HTTPds. Aber ja, Nginx ist – zugegeben – mein persönlicher Vorzug. :-)
Servercow möchte ich den Menschen nicht unter die Nase reiben. Ich finde es schön, wenn Leute es weiterempfehlen, weil es ihnen gefällt. So funktioniert das ganz miteinander auch viel besser. Übrigens geht auch viel Zeit in den Support von Servercow. Standardantworten gibt es (fast) gar nicht. :-)
Viele Grüße
André
Hallo,
erstaml danke für die Super Anleitung.
Ich habe ein Problem mit der Anmeldung bei Roundcube.
Wenn ich mich einloggen möchte bekomme ich immer folgenden Fehler.
Warning: stream_socket_client(): unable to connect to ssl://webmail.example.com:993 (Verbindungsaufbau abgelehnt) in /var/www/html/webmail/program/lib/Roundcube/rcube_imap_generic.php on line 858
IMAP Error in /var/www/html/webmail/program/lib/Roundcube/rcube_imap.php (198): Login failed for postmaster@example.com from 192.168.1.1. Could not connect to ssl://webmail.example.com:993: Verbindungsaufbau abgelehnt
Hi Kai,
versuchst du es mal mit „tls://x.y.z“ in der Datei
/var/www/html/webmail/config/config.inc.php
, wo jetzt nochssl://x.y.z
steht? Der SSL-Listener ist evtl. gar nicht aktiv (Port 993), jedoch IMAP und IMAP nach STARTTLS.Ich bin ratlos….
Leider ist es mit der angegebenen amavis-config so, dass sämtliche Mails direkt nach „Postmaster“ verschoben werden und nicht etwa als „****SPAM****“ markiert. So ist es gekommen, dass mehrere Rechnungen und andere Mails einfach zu Postmaster geschoben wurden und nicht – ob Spam oder nicht – beim eigentlichen Mailaccount.
Kann mir jemand helfen?
Hallo,
könnte man noch zusätzlich erklären welche Eintragungen bei einem sicheren BackupMX erforderlich oder weggelassen werden können? Als Basis dient die komplette obige Installation, jedoch als ‚backup-mx.domain.tld‘.
MFG
Wenn ich versuche https://mail.domain.tld/admin aufzurufen bekomme ich unter Chrome folgende Fehlermeldung (Diese Webseite ist nicht verfügbar. ERR_TUNNEL_CONNECTION_FAILED ). Ich bin mir sicher dass ich bei nginx alles nach Anleitung richtig konfiguriert habe.
Hi Dennis,
hast du schon eine Lösung dafür gefunden? Darüber stolper ich nämlich im Moment auch.
Ansonsten ein super Tutorial!
Schöne Grüße
Daniel
Die Installation hat soweit Funktioniert nur das ich nicht auf die seite von vibadmin und roundmail komme.
https://www.mail.tt-osl-pokal.de/webmail
https://www.mail.tt-osl-pokal.de/admin
Diese Webseite ist nicht verfügbar.
DNS_PROBE_FINISHED_NXDOMAIN
Ich habe ein Fehler meiner seits entdeckt.
Ich habe das www. dafor gemacht das ist falsch gewesen aber wenn ich nur https://mail.tt-osl-pokal.de/webmail oder https://mail.tt-osl-pokal.de aufrufe dann kommt : 502 Bad Gateway
nginx
MFG
Hallo Andrè,
Ich habe es rausgefunden, vielleicht kannst du es ja bestätigen. Einfach in Vimbadmin eine Domain anlegen und die DKIM Einstellungen, sowie DNS Einträge anpassen. Schon kann gemailt werden …
Mit ist beim testen der SPAM Funktion ein Problem aufgefallen, dass du ggf. in deinem Skript anpassen kannst.
In der Datei /etc/amavis/conf.d/20-debian_defaults sind folgende default-values gesetzt, die du in deiner /etc/amavis/conf.d/50-user nicht anpasst.
$sa_tag2_level_deflt = 6.31
$sa_kill_level_deflt = 6.31
Das führt dazu, dass Spam anhand deines Sievescript unter /var/vmail/before.sieve niemals nach „Junk“ verschoben wird, sonder gleich gelöscht.
Folgender Eintrag in /etc/amavis/conf.d/50-user löst das Problem:
$sa_kill_level_deflt = 999
Kannst du das so bestätigen?
Hallo André,
Nochmals vielen Dank für dein tolles How-To. Die meisten values und Einstellungen kann ich nachvollziehen und verstehen, sodass das Abarbeiten echt Spaß macht. Besonders gut gefällt mir, dass du einen starken Fokus auf Sicherheit legst!
Ich habe einen V-Server von netcup erstmal mit seinem default Domainname eingerichtet: v22015092657327610.yourvserver.net
Sodass theoretisch mit dieser Domain Mails versendet und empfangen werden könnte.
Wie füge ich nun weitere Domain hinzu, die über diesen Server abgedeckt werden sollen?
Ich musste in /etc/nginx/sites-enabled/mailserver folgendes Eintragen, da ich die URL https://mail.domain.tld/admin nicht öffnen konnte, bzw. nur eine weiße Seite gesehen habe.
location ~ \.php$ {
# Prevent Zero-day exploit
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#NOTE: You should have „cgi.fix_pathinfo = 0;“ in php.ini
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Hi Andre,
ich danke dir für das Tutorial – echt super, hat mir gut weitergeholfen!
Kennst du https://starttls.info? Wenn ich meinen Server nach der Konfiguration in deinem Beitrag teste, werden 2 Warnungen angezeigt:
– Anonymous Diffie-Hellman is accepted. This is suspectible to Man-in-the-Middle attacks.
– Weakest accepted cipher: 0.
Könnte man das noch fixen?
Danke schonmal & viele Grüsse
Alex
Hi Alex,
danke!
Fügst du deiner main.cf einmal Folgendes hinzu? ->
Das sollte es schon beheben. Kannst du das bestätigen?
Beste Grüße,
André
Hi André,
ja, das behebt es, damit bekomme ich dort 94,8% – super!
Danke nochmal!
Viele Grüße,
Alex
Hallo André,
mir ist aufgefallen, dass das versenden einer mail immer mindestens 5 sekunden dauert. der prozess „delivering mail“ alleine dauert schon mindestens 5 sekunden. Hast du eine Ahnung, woran das liegen könnte? Bei meinem eMail account der über einen Webhost läuft, dauert der gesamte prozess des sendens nichtmal 2 sekunden.
Vielen Dank und beste Grüße,
Dennis
Hi,
das liegt daran, dass Amavis die Mail „live“ überprüft. Das ist durchaus die bessere Wahl!
So wird Spam gar nicht erst vom SMTPd angenommen, Postfix sagt dir sozusagen „ich schaue schnell nach, ob es Spam ist“. Ein gewöhnlicher Filter nimmt die Mail erst an (bzw. der SMTPd nimmt sie an) und gibt sie anschließend weiter zur Überprüfung.
So weißt du auch sofort, ob deine ausgehende Mail als Spam erkannt wird – jedenfalls von deinem eigenen System. :-)
Danke für die Erklärung! :-)
edit:
Wenn ich das abschalten wollte, was müsste ich dann machen?
Hallo zusammen,
kann mir jemand weiterhelfen?
Ich bin inzwischen etwas ratlos. Ich setze gerade meinen Mailserver nach dieser Anleitung neu auf. Wegen einer unverträglichkeit muss ich dabei aber apache als Webserver nehmen. Nun habe ich ein Problem. Wenn ich das erste mal versuche auf vimbadmin zuzugreifen, bekomme ich die Fehlermeldung „File does not exist: /var/www/html/vimbadmin“ im error.log.
Ich habe mich bei der Konfig des Apache an den Beitrag von Tantalus gehalten.
Der vHost in der apache Konfiguration sieht bei mir so aus:
Servername example.org
Redirect permanent / https://example.org/
SSLEngine on
SSLCertificateFile /etc/ssl/example.de.cer
SSLCertificateKeyFile /etc/ssl/example.de.key
# Intermediate Zertifikat
# SSLCertificateChainFile /etc/ssl/sub…ca.pem
# Root Zertifikat
# SSLCACertificateFile /etc/ssl/ca.pem
Servername example.org
CustomLog ${APACHE_LOG_DIR}/access.log combined
ErrorLog ${APACHE_LOG_DIR}/error.log
DocumentRoot /var/www/html
HostnameLookups Off
UseCanonicalName Off
ServerSignature Off
Header always set Strict-Transport-Security „max-age=10886400“
SSLRequireSSL
Options FollowSymLinks
AllowOverride FileInfo Indexes Limit
Allow from all
DirectoryIndex index.php index.html index.htm
Kann mir bitte jemand weiterhelfen? Ich steh total auf dem Schlauch…
Grüße
Hallo @all,
nach endlich vielen Versuchen hab ich es jetzt geschafft die VimbAdmin-Seite zu bekommen. Man muss die RewriteRule in der .htaccess im admin-Verzeichnis von vimbadmin etwas ändern und zwar:
Diese Zeile auskommentieren oder löschen und durch die zweite Zeile ersetzen:
#RewriteRule ^.*$ /vimbadmin/index.php [NC,L]
RewriteRule ^.*$ /admin/index.php [NC,L]
Dann klappts auch mit dem Apache ;-)
Grüße
Hi,
sorry, habe zur zeit viel um die Ohren, aber vielen Dank für den nützlichen Hinweis! :-)
Hallo André,
vielen Dank für diese tolle Anleitung.
Ich bin gerade dabei einen vServer damit einzurichten, habe aber noch einige Fragen, wie es mit der Absicherung der einzelnen Dienste im Internet aussieht.
Der vServer soll meine E-Mailserver und mein Webserver werden. Über eine Firewall werden nur die absolut nötigen Ports freigegeben.
Eigentlich wollte ich außer Postfix, Dovecot, ssh und meiner Website unter Apache keine anderen Dienste von außen zugreifbar haben. Wie sicher ist das denn, den VimbAdmin und Roundcube zusätzlich laufen zu haben? Und was muss ich alles anpassen, um von nginx auf apache zu wechseln?
Sorry für die teilweise vielleicht etwas „einfachen“ Fragen. Aber ich kenne Vimbadmin, nginx und roundcube noch nicht so gut und will mir keine großen Risiken einfangen. Normalerweise beschränke ich die offenen Ports und laufenden Dienste eines Servers auf das absolut notwendige.
Vielen Dank nochmal für Deine Mühe.
Grüße,
Armin
Hi,
solange du die Dienste und Webanwendungen aktuell hälst, sehe ich kein Problem. ViMbAdmin und Roundcube sollten vor Robots geschützt werden, damit – falls es mal Lücken gibt – keiner so schnell auf die Idee kommt…
Ansonsten könntest du bestimmte Verzeichnisse auch nur von bestimmten IPs zugreifbar machen (http://httpd.apache.org/docs/2.4/howto/access.html). :-)
Zu Apache gibt es hier bereits Kommentare, bislang habe ich den Artikel nicht erweitern können, aber das folgt.
Beste Grüße
André
Wow!
Dieses Tutorial ist der Hammer.
Es hat alles super geklappt.
Vielen Dank!
Da will ich spontan Kaffee oder Bier ausgeben.
Spende ist unterwegs ;-)
Hi André,
ich habe ein Deb 8er-System. Auf dem habe ich bisher immer mit deiner alten Anleitung gearbeitet.
Ich habe nun alles auf diese neue Technik umgestellt, ist das denn besser?
Bzw. würdest du mir eher zu dieser Technik raten (vimbadmin + nginx und Co.) als zu deiner damaligen welche eine Realisierung über postfixadmin versprach?
Viele Grüße,
Markus Abheiden
Hallo André,
vielen Dank für das tolle tutorial.
Was ist das apache2 equivalent zu try_files $uri $uri/ /admin/index.php?$args;
?
Habe es in den kommentaren gefunden. Aber ich bekomme dann, wenn ich https://mail.domain.tdl/admin gehe
The requested URL /vimbadmin/index.php was not found on this server.
Hi,
habe eine Installation nach Ihrer Anleitung gemacht und bekomme beim Versenden einer e-Mail folgenden Fehler:
….. dsn=4.4.1, status=deferred (delivery temporarily suspended: connect to ………….[privat/dovecot-lmtp]: No such file or directory).
Können Sie mir sagen was ev. die Ursache dafür ist? (Habe schon einiges im WEB gefunden, nichts hat gezogen!).
Vielen Dank
Stuck
Hi,
ich sehe ein „privat“ anstatt „private“. :-)
Hallo André,
vielen Dank für die schnelle Hilfe, war mein Fehler hab ich nicht gesehen!
Irgendwie bekomme ich aber trotzdem noch keine Verbindung zur Datenbank beim Aufruf von WEBMAIL:
https://192.168.32.104/webmail
DATABASE ERROR: CONNECTION FAILED!
Unable to connect to the database!
Auch kann ich mir selbst von dem System keine Mail zustellen lassen (echo test | mailx -s test xxxxx), in die „freie Welt“ kann ich mailen und bekomme auch die Begrüßungsmail von Vimbadmin.
dovecot: lmtp(19494, xxxx@xxxxx): Fatal: setgid(2000 from userdb lookup) failed with euid=5000(vmail), gid=5000(vmail), egid=5000(vmail): Operation not permitted (This binary should probably be called with process group set to 2000 instead of 5000(vmail))
Jul 31 10:48:54 xxxxxx postfix/lmtp[19491]: 18FC481A0A: to=, relay=xxxxxx[private/dovecot-lmtp], delay=87739, delays=87739/0.06/0.1/0.05, dsn=4.4.2, status=deferred (lost connection with xxxxxx[private/dovecot-lmtp] while sending end of data — message may be sent more than once)
Hast Du ev. eine Idee was ich hier falsch gemacht haben könnte?
Gruß
Stuck
Guten Abend André,
ich habe ein weiteres Problem. Login per roundcube ist nicht möglich, folgende Fehlermeldung wird zurückgegeben:
Connection to storage server failed.
Im roundcube error log steht folgendes
[29-Jul-2015 00:40:59 Europe/Berlin] PHP Warning: stream_socket_client(): unable to connect to mail.meinedomain.de:143 (Connection refused) in /var/www/html/webmail/program/lib/Roundcube/rcube_imap_generic.php on line 858
[29-Jul-2015 00:33:18 +0200]: IMAP Error: Login failed for test@meinedomain.de from 123.45.678.90. Could not connect to mail.meinedomain.de:143: Connection refused in /var/www/html/webmail/program/lib/Roundcube/rcube_imap.php on line 198 (POST /webmail/?_task=login?_task=login&_action=login)
Am firewall scheint es nicht zu liegen (nutze csf), den habe ich nämlich testweise ausgeschaltet, bekomme aber weiterhin die Meldung \“Connection to storage server failed.\“
Vielleicht weisst du ja, woran es noch liegen könnte? Viele Grüße
Hi Dennis,
ehrlich gesagt habe ich dennoch die FW im Verdacht. :-)
Versuchst du es mal über localhost?
Dort:
Hast du Verbindungen von „lo“ freigegeben?
Viele Grüße
André
Danke! Deine Vermutung war richtig. Ich habe mit
nc -z 127.0.0.1 143; echo $?
geprüft ob der port offen ist und trotz deaktivierung von csf war er zu.
Aus irgendeinem Grund haben die Einstellung in csf.conf nicht gegriffen, scheinbar waren andere firewall einstellungen aktiv auf die ich keinen Einfluss nehmen konnte.
Die Lösung war simpel. Neustart des Servers und jetzt klappt alles wunderbar. Die erste email wurde erfolgreich verschickt und die Antwort problemlos empfangen!
Vielen Dank und beste Grüße,
Dennis
Hallo André
ich habe vor einigen Monaten dein voriges Mailserver tutorial unter wheezy angewendet und alles hat wunderbar geklappt. Vielen Dank dafür. Heute musste ich den Server mit Jessie neu aufsetzen und habe mich gefreut, eine Neuauflage des Artikels auf deinem Blog zu finden.
Leider funktioniert es bei mir aber nicht. Ich kann zwar bei ViMbAdmin eine neue domain anlegen, aber sobald ich für diese domain eine Mailbox anlegen möchte, bekomme ich folgende Fehlermeldung:
ViMbAdmin_Exception
File
/srv/vimbadmin/library/ViMbAdmin/Dovecot.php
Line
57
Message
Error executing Dovecot password command: /usr/bin/doveadm pw -s ‚SHA512-CRYPT‘ -u ‚admin@domain.de‘ -p ‚OdKH5EQXVJgD‘
Code
0
Trace
#0 /srv/vimbadmin/vendor/opensolutions/oss-framework/src/OSS/Auth/Password.php(90): ViMbAdmin_Dovecot::password('SHA512-CRYPT', 'OdKH5EQXVJgD', 'admin@domain...')
#1 /srv/vimbadmin/application/controllers/MailboxController.php(317): OSS_Auth_Password::hash('OdKH5EQXVJgD', Array)
#2 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Action.php(516): MailboxController->addAction()
#3 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Dispatcher/Standard.php(308): Zend_Controller_Action->dispatch('addAction')
#4 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#5 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Application/Bootstrap/Bootstrap.php(105): Zend_Controller_Front->dispatch()
#6 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Application.php(384): Zend_Application_Bootstrap_Bootstrap->run()
#7 /srv/vimbadmin/public/index.php(34): Zend_Application->run()
#8 {main}
Weisst du zufällig, woran das liegen könnte?
Hi,
führst du einmal diesen Befehl im Terminal aus?
Zudem einmal die Rechte der Datei /etc/dovecot/dovecot.conf checken/anpassen, evtl. ist diese Datei für www-data nicht lesbar:
Danke für deinen netten Kommentar! :-)
Hi,
der Befehl spuckt folgende Fehlermeldung aus:
doveconf: Fatal: Error in configuration file /etc/dovecot/dovecot.conf: mailbox Gelöschte Objekte: name isn't valid UTF-8
Habe mal nachgeschaut und gesehen, dass dort statt ‚ö‘ die Zeichenfolge ‚^ ‚ zu sehen ist. Nachdem ich das ‚ö‘ von ‚gelöschte‘ und das ‚ü‘ von ‚Entwürfe‘ in ‚oe‘ und ‚ue‘ geändert habe, gibt mir dein Befehl folgendes aus:
{CRAM-MD5}8f48a311793d494b53ad488bb603f93a0457e40fe45cbacb082c0720ceeb1e37
edit:
Klasse und jetzt kann ich auch Mailboxen erstellen, ohne dass eine Fehlermeldung kommt! Tausend Dank für Deine schnelle Hilfe:)
Eine Anmerkung zu DKIM: DKIM ist ja heutzutage Teil des Zoos DKIM, SPF und OpenDMARC. Diese Dienste bauen aufeinander auf.
DKIM sorgt für eine Signatur jeder ausgehenden Email und kann die Signatur eingehender Emails überprüfen, SPF legt fest, über welche Mailexchanges eine Domain ihre Mails verschickt und OpenDMARC legt dann für externe Hosts eine Richtlinie fest, wie sie mit Mails verfahren sollen, bei denen entweder der Key nicht stimmt oder aber der MX oder beides.
Die ganze Übung dient genau einer Sache, nämlich, die eigene Domäne für Mailspammer uninteressant zu machen und vor Spammißbrauch durch Dritte zu schützen. Sollte man also blafasel.de haben und ein Spammer verschickt damit Emails, dann kann man damit dafür sorgen, dass ihm das Absetzen seiner Emails deutlich schwerer wird. Das ist dann aber auch schon alles, damit der Schutz der eigenen Domäne vor solchem Mißbrauch wirklich gut greift, müsste es deutlich mehr verbreitet sein, als es eigentlich ist. Wenn man für seine Domäne das implementiert, dann kann man beispielsweise wenn jemand Road Warrior spielt oder einige andere Fälle nutzt, auch mit SPF viel falsch machen – und nein, SRS ist dazu keine Lösung.
Umgekehrt aber ist der ganze Zoo aber meist denkbar ungeeignet, um Spams sorgfältig zu filtern. Denn die Spammer benutzen entweder Domänen ohne solchen Schutz oder gleich eigene Domänen – und jetzt kommt es – diese Mülldomänen sind oft vorbildlich mit DKIM signiert! DKIM sagt eben nur aus, dass die Email auch wirklich aus dieser Domäne stammt, sagt aber absolut nichts darüber aus, ob diese Email nun Spam oder Ham ist.
Wer übrigens gerne Firewallregeln schreibt, für den ist Postfwd (http://postfwd.org/) als Policy Manager zum Spamschutz sicherlich auch nicht ganz uninteressant.
Danke für die sehr gute Anmerkung! :-)
Trifft meine Ansicht ziemlich genau.
Mail ist heute kein einfaches Thema.
Postfwd schaue ich mir nachher mal genauer an, danke!
Ich nochmal. Soweit läuft jetzt alles und Senden und Empfangen von E-Mails ist auch möglich. Allerdings nur über Roundcube. Wenn ich mich per Thunderbird verbinden will, bekomme ich folgende Meldung im mail.log:
Jul 17 22:10:04 mail dovecot: imap-login: Disconnected (no auth attempts in 0 secs): user=, rip=IP, lip=IP, TLS: SSL_read() failed: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca: SSL alert number 48, TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Thunderbird gibt die Meldung aus, dass die Authentifizierungsmethode nicht unterstützt wird. Eingestellt ist „Passwort, normal“. Was muss da im Thunderbird eingestellt werden oder muss ich am dovecot noch was ändern? Einstellungen sind wie im Beitrag beschrieben.
Hi,
den Zertifikatsfehler (selbst-signiert) hast du „akzeptiert“? Der versteckt sich nämlich gerne mal im Hintergrund.
Eingestellt werden muss/sollte STARTTLS auf Port 587 und IMAP ebenso via STARTTLS auf Port 143.
Am besten noch einmal das TB Profil komplett löschen (aus Appdata oder /home/$user/.mozilla etc.) und noch einmal neu einrichten. Kannst du mir den Servernamen einmal per Mail senden?
Hallo,
irgend wie bekomme ich es nicht zum laufen…
Wenn ich aus dem Webmail eine Mail versenden möchte, erhalte ich diese Fehlermeldung:
SMTP Fehler (451): Der Empfänger "xxx@xxx.de" konnte nicht gesetzt werden (4.3.0 : Temporary lookup failure).
Und ein tail -f /var/log/mail.log zeigt dieses
Jul 17 15:21:35 thor postfix/trivial-rewrite[2403]: warning: mysql:/etc/postfix/mysql/postfix-mysql-virtual_transport_maps.cf lookup error for "*"
Hi Holger,
hast du in den *maps.cf für Postfix einen Tippfehler oder etwas falsch kopiert?
Hallo André,
kleiner Fehler, große Wirkung. Ich hab in der postfix-mysql-virtual_domains_maps.cf ein „‚“vergessen und damit hat es nicht funktioniert. Bei der Suche nach dem Fehler hab ich in den Dateien unter postfix/mysql aus 127.0.0.1 localhost gemacht. Und damit hatte mein Postfix offenbar ein Problem. Ich habe es nun wieder auf 127.0.0.1 (ohne Leerzeichen nach der 1) geändert, die Dienste alle neu gestartet und es funktioniert.
DANKE
Hallo,
ich habe beim Setup von vimbadmin alles laut Anleitung konfiguriert. Allerdings kommt beim Aufruf im Browser dann nur „bootstrap() ->run();“, anstatt die Oberfläche von vimbadmin. Das Verzeichnis /srv/vimbadmin/public und var, gehören dem richtigen Benutzer und haben die Rechte 750.
Wenn ich vimbadmin direkt im Verzeichnis des entsprechenden Benutzers (z. B. /var/www/user/http/vimbadmin) installiere, läufts (mit komplett den gleichen Einstellungen). Muss beim Apache noch was beachtet werden? Habe in der vhost folgendes noch eingetragen:
Alias /vimbadmin /srv/vimbadmin/public
Options FollowSymLinks
AllowOverride FileInfo
all granted
Hi,
was sagt denn die Apache error_log? Darf ich mir das mal per SSH anschauen? Webkonfigurationen sind immer tricky ohne Zugang.
Viele Grüße :-)
Das ist es ja, das error_log sagt nichts dazu. Zugangsdaten folgen per Mail.
Irgendwie will bei mir Dovecot nicht. Anmelden über Roundcube läuft leider nicht. Errorlog von Roundcube sagt nur folgendes aus:
IMAP Error in /var/mailstuffs/webmail/program/lib/Roundcube/rcube_imap.php (198): Login failed for me@mail.domain.tld from AUTHENTICATE PLAIN: Authentication failed.
In Mail.log findet sich auch nur, das Dovecot selber ablehnt. Wenn man dann IMAP Debug hinzufügt, dann kommt folgendes aus dem IMAP Errorlog raus:
[00DB] S: * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
[00DB] C: A0001 STARTTLS
[00DB] S: A0001 OK Begin TLS negotiation now.
[00DB] C: A0002 CAPABILITY
[00DB] S: * CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN
[00DB] S: A0002 OK Pre-login capabilities listed, post-login capabilities have more.
[00DB] C: A0003 ID (\“name\“ \“Roundcube\“ \“version\“ \“1.1.2\“ \“php\“ \“5.6.9-0+deb8u1\“ \“os\“ \“Linux\“ \“command\“ \“/webmail/installer/index.php?_step=3\“)
[00DB] S: * ID (\“name\“ \“Dovecot\“)
[00DB] S: A0003 OK ID completed.
[00DB] C: A0004 AUTHENTICATE PLAIN ****** [41]
[00DB] S: A0004 NO [AUTHENTICATIONFAILED] Authentication failed.
Empfangen & senden von Lokal aus geht aber ohne Probleme. Passwort ist das, welches auch über vimbadmin gesetzt wurde. Hast du vielleicht ne Idee, woran es liegen könnte?
(Mail.domain.tld ist natürlich meine, also nicht wirklich mail.domain.tld)
Dennoch danke für den Artikel!
Gruß,
Paul
Hi,
kannst du die letzten Zeilen der
/var/log/mail.log
auf pastebin etc. hochladen?Alternativ gerne auch einen SSH-Zugang via Mail. :-) Habe gerade etwas Zeit, wenn du magst.
Viele Grüße
André
Hi – ich wollte nur fragen wieso du den PHP-Composer verwendest?
Nur weils in der Vorlage auch so ist?
Roundcube ladest auch als Paket runter – das gibts von ViMbAdmin auch!
Und curl ist schon installiert……
Hi,
es macht das Updaten leichter. Aber du kannst es natürlich machen, wie du lustig bist. :-)
Postfix ist sicherlich ganz gut, aber in Punkto Sicherheit und Stabilität ist QMail sicherlich das Maß aller Dinge.
Hallo André,
Dein HowTo finde ich super!
Ich habe da aber noch ne Frage, ist es möglich in der Config policys zu verwenden?
Ich habe einen lokalen Mailserver, der den Postfixserver als Smarthost nutzt, nun verbietet „reject_authenticated_sender_login_mismatch“ ja das verweden eines Accounts für beliebige Absender das würde ich auch für alle normalen User gerne weiterhin verwenden jedoch nicht für den User des Smarthostes.
LG,
Sayael
Hi Sayael,
endlich habe ich wieder mehr Zeit für die Antworten. :-)
Danke erst einmal!
Probier mal Folgendes:
/etc/postfix/main.cf:
/etc/postfix/check_sasl_access:
Anschließend:
Ich kann es dir leider nicht garantieren, es sollte aber funktionieren. :-)
Viele Grüße
André
Hallo André,
Danke für die schnelle Antwort :-)
Ich habe es jetzt mit folgenden Einstellungen ans laufen bekommen:
/etc/postfix/main.cf
smtpd_sender_restrictions = check_sasl_access hash:/etc/postfix/check_sasl_access, reject_authenticated_sender_login_mismatch,
/etc/postfix/check_sasl_acces
smarthost@domain.tld ok
Danke für das Update! :-)
Mir ist aufgefallen, dass diese VimbAdmin Installation Memcached nicht mit einbezieht. Jedoch empfiehlt OpenSolutions Memcached wärmstens für VimbAdmin und auch ich kann von meiner Installation sagen, dass VimbAdmin so deutlich schneller funktioniert.
Folgende Pakete installieren:
apt-get install php5-memcache memcached
Dann in der application.ini folgendes ändern:
;resources.doctrine2cache.type = ‚ArrayCache‘
resources.doctrine2cache.type = ‚MemcacheCache‘
resources.doctrine2cache.memcache.servers.0.host = ‚127.0.0.1‘
resources.doctrine2cache.namespace = ‚ViMbAdmin3
Auch wird über einen Memcache-Glitch in VimbAdmin berichtet, den man folgend beheben kann (Quelle: RtCamp). Ich weiss allerdings nicht, ob er schon behoben wurde, ich muss mir noch die Changelogs anschauen:
;resources.session.save_path = APPLICATION_PATH „/../var/session“
Hoffe ich konnte helfen ^^
Danke für deinen Hinweis! :-)
Ich wollte erst einmal die Erfahrung abwarten, bin aber – ehrlich gesagt – noch kein Stück weiter gekommen. Läuft es bei dir bislang stabil?
Viele Grüße
Ja, absolut ^^
So läuft VimbAdmin deutlich schneller, besonders, wenn man Änderungen an den Configs vornimmt, wie z.B. :
./srv/vimbadmin/bin/vimbtool.php -a mailbox.cli-get-sizes
zum Anzeigen des aktuellen Speicherplatzverbrauchs der jeweiligen Mailboxen. Passend dazu noch ein Cronjob mit dem selben Befehl eintragen.
Hier hat die „normale“ Cache sich nach der Änderung fast 1 Minute Zeit gelassen (Chromium), danach nicht mehr.
Mit memcache lief alles „instant“.
Vielleicht kann ich dir ja ein Testacc zur Verfügung stellen, wenn du willst ^^
Ansonsten wie gehabt. Server läuft auf einem PHP-Friends VSERVERS mit 1GB RAM. Muss irgendwann mal upgraden, denn es legt mit dem Debian8-Standardkernel ordentlich SWAP an, mit dem aktuellen 4.1 hat sich das zumindest verringert. An der Geschwindigkeit an sich stellt sich aber kein Problem heraus.
Viele Grüsse
Kleiner Edit:
Damit das mit den Anzeigen der Mailbox-Grössen funtkoniert: noch folgendes in der application.ini eintragen (Quelle: VimbAdmin-Wiki)
defaults.list_size.disabled = false
defaults.list_size.multiplier = ‚GB‘
Viele Grüsse
Hallo André,
vielen Dank für dieses großartige HowTo!
Eine kleine Anmerkung hätte ich noch:
In Deinem ngingx-Tutorial schreibst Du
Für alle Sockets sollten zudem kritische Funktionen zum Ausführen von Anwendungen deaktiviert werden. Diese können für einzelne Sockets bei Bedarf freigegeben werden:
/etc/php5/fpm/php.ini:
disable_functions=phpinfo,exec,shell_exec,system,passthru>
Das deaktivieren von exec sollte bei diesem Setup hier vermieden werden. Es führt dazu, daß ViMbAdmin die User-Passwörter in der MySQL-Datenbank nicht mehr setzen/aktualisieren kann.
Viele Grüße,
Joe
Danke! Super Hinweis. :-)
Moin
Ich habe leider Probleme beim Einrichten von vimbadmin.
Mein Mailserver heißt mailserver.hwarndt.int (Testumgebung). DNS-technisch wird er auch aufgelöst.
Beim Aufruf von https://mailserver.hwarndt.int/ erscheint die Startseite von Roundcube.
Beim Aufruf von https://https://mailserver.hwarndt.int/admin bekomme ich folgenden Fehler
„The requested URL /admin/auth/login was not found on this server“
das public-verzeichniss von Vimbadmin ist in mein mailserververzeichniss verlinkt; die rechte hat www-data.
In der application.ini in der sektion server.webmail.host ist der Name von meinem mailserver eingetragen.
Hast du eine Idee wo der Fehler liegen könnte?
Viele Grüße
Hallo,
da sendmail den 25er Port blockiert, kann ich es bedenkenlos stoppen bzw. den Port von sendmail selbst ändern? Denn Postfix möchte nicht starten, wenn der Port 25 geblockt wird.
MfG,
Patrick
Ich sitze hier schon seit über 8 Stunden, und habe den Server mehrmals schon aufgesetzt und komme jedes mal nicht weiter… immer ist ein anderes Problem, jetzt kotzt es mich schon an … Wieso löscht sich sendmail nicht?
Hallo,
ich scheiter bereits am ViMbAdmin.
Bei der Einrichtung der Datenbank bekomme ich diese Fehlermeldung…
./bin/doctrine2-cli.php orm:schema-tool:create
PHP Fatal error: Uncaught exception ‚Zend_Config_Exception‘ with message ’syntax error, unexpected BOOL_FALSE in /srv/vimbadmin/application/configs/application.ini on line 459
‚ in /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Config/Ini.php:182
Stack trace:
#0 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Config/Ini.php(202): Zend_Config_Ini->_parseIniFile(‚/srv/vimbadmin/…‘)
#1 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Config/Ini.php(126): Zend_Config_Ini->_loadIniFile(‚/srv/vimbadmin/…‘)
#2 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Application.php(404): Zend_Config_Ini->__construct(‚/srv/vimbadmin/…‘, ‚production‘)
#3 /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Application.php(87): Zend_Application->_loadConfig(‚/srv/vimbadmin/…‘)
#4 /srv/vimbadmin/bin/utils.inc(106): Zend_Application->__construct(‚production‘, ‚/srv/vimbadmin/…‘)
#5 /srv/vimbadmin/bin/doctrine2-cli.php(53): get_zend_application()
#6 {main}
throw in /srv/vimbadmin/vendor/zendframework/zendframework1/library/Zend/Config/Ini.php on line 182
Hat jemand eine Idee?
Danke
Holger
Hi,
schau mal in deine Datei
/srv/vimbadmin/application/configs/application.ini
, Zeile 459. Was steht dort?Hallo,
hier ist die Zeile 459.
AdditionalInfo.mailbox.formPreBlurb = „NB: Do not edit the following. It is sync’d on a nightly basis …“
Hast du die Datei vielleicht mit falschem Zeilenendeformat gespeichert? Welchen Editor benutzt du?
Hallo,
ich benutze noch immer vi
Holger
Hallo,
ich habe die application.ini gelöscht und neu gebaut, war sicher ein Fehler drin nur leider mit Sicherheit nicht in der Nähe von Zeile 459.
Jetzt funktioniert es ;-)
Holger
Um auch andere Domains DKIM zu signieren muss man in der /etc/amavis/conf.d/50-user
die Zeile
dkim_key('domain.tld', 'default', '/var/lib/amavis/db/dkim_domain.tld.key');
kopieren und beide domain.tld entsprechend anpassen.Danach noch den Schlüssel wie in der Anleitung beschrieben erstellen:
amavisd-new genrsa /var/lib/amavis/db/dkim_domain.tld.key 2048
Jetzt noch Amavis mit
service amavis restart
neustarten und mitamavisd-new showkey domain.tld
den public key auslesen, bzw mit folgendem Quickie in ein Copy&Paste Format bringen:amavisd-new showkey domain.tld | grep \" | sed 's/[ ")]//g' | tr -d "\n" && echo
Vielen Dank für das tolle Tutorial, noch zwei Anmerkungen:
Das erste wurde bereits mal erwähnt:
chown root:vmail /etc/dovecot/dovecot-mysql.conf
Schlägt fehlt weil die Gruppe „vmail“ erst ein paar Zeilen später angelegt wird.
nano /etc/postfix/master.cf
Hier ist es nicht ganz klar ob der gesamte Inhalt der Datei ersetzt werden soll oder nur die aufgeführten Settings, da an den anderen Stellen immer vorher ein
rm DATEI
gemacht wird.Hi Stefan, danke für deine Hinweise, ich habe es korrigiert. :-)
Absolutely create article! Thanks a lot for that. Could you please add some info about how to add a catchall address?
I think I found the answer, but I have just started to play around with my own mail server and would be very happy if you could explain it in the same detailed way you have done it in that article.
This is what I found (the comment of Joshua Gleitze)
https://thomas-leister.de/internet/postfix-catch-fuer-nicht-existierende-postfaecher/
Thanks a lot again!
Andy
Wieso schreib ich eigentlich auf Englisch?
Falls noch wer eine Catchall einrichten möchte: es ist eh ganz einfach im vimbAdmin, heißt nur nicht so. Einfach unter Aliases @domain.tld -> postfach@domain.tld und schon gehts.
Vielen Dank und weiter so!! :)
Hi Andy,
vielen Dank für die Information aus der Nachtschicht. :-)
Viele Grüße
André
Hi André,
vielen Dank für diese tolle Anleitung.
ist es möglich mit dieses konstrukt auch ein Multi Domain system zu betreiben ?
Muss in dieser Hinsicht was beachtet werden ?
Mit freundlichen Grüßen
Andreas
Hi Andreas,
das klappt problemlos. Du trägst für alle Domänen im Anschluß den selben MX Record ein. :-)
Viele Grüße
André
Weißt du ob es möglich ist die Sieve Filter im Thunderbird durch das Sieve Addon zu bearbeiten?
Ich habe deine Anleitung befolgt, aber konnte bisher keine Verbindung zu Sieve herstellen. Über Roundcube funtkioniert es.
Hi,
es ist möglich. :-) Hast du im Thunderbird Port 4190 angegeben?
Hast du mit diesem Befehl eine Ausgabe?
netstat -tulpen | grep 4190
Steht dort 0.0.0.0? Ist die Firewall offen? Kannst du zum Beispiel von einem fremden System mit „telnet ip.mail.ser.ver 4190“ testen. :-)
Viele Grüße
Danke für deine schnelle Hilfe.
netstat -tulpen | grep 4190 liefert:
tcp 0 0 0.0.0.0:4190 0.0.0.0:* LISTEN 0 64228 4265/dovecot
Per telnet bekomme ich folgende Ausgabe:
"IMPLEMENTATION" "Dovecot Pigeonhole"
"SIEVE" "fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate"
"NOTIFY" "mailto"
"SASL" ""
"STARTTLS"
"VERSION" "1.0"
OK "Dovecot ready."
Ich denke es liegt an der Konfiguration des Sieve Addons im TB. Wobei ich inzwischen auch schon alle Varianten durch probiert habe.
IMAP Server: mail.xxxxxx.tld
Port 4190
Kein TLS, TLS wenn verfügbar, TLS erzwingen habe ich alles ausprobiert, TLS erzwingen ist Standard
Authentifizierung über IMAP Benutzername und Passwort. Proxy Auto.
Ich bin ratlos.
Hi,
argh, tut mir leid, ich habe ganz vergessen, dass das Plugin aus dem Mozilla „Store“ nicht mit den ganze neuen Dovecot-Versionen klar kommt. Aber kein Problem, dafür hat der Entwickler nämlich hier (https://github.com/thsmi/sieve/blob/master/nightly/README.md) die aktuellen Nightlys liegen. Einfach die XPI-Datei in das Addon-Fenster im Thunderbird ziehen. Dann funktioniert es. :-)
Viele Grüße
André
Hi André,
das wars! Mit der letzten nightly funktioniert es!
https://github.com/thsmi/sieve/blob/master/nightly/0.2.3/sieve-0.2.3g.xpi?raw=true
Wäre schön wenn du solche Feinheiten bei einer Revision deines Artikels mit einbaust.
Das was ich hier in den Kommentaren von Sogo gelesen habe würde mich auch interessieren ;)
Herzlichen Dank für deine Mühe!
Hallo André,
ich habe dein Tutorial befolgt, leider klappt es mit dem Empfangen der Mails noch nicht. Im Syslog wird mir folgender Fehler angezeigt:
postfix/lmtp[30816]: 386861751: to=, relay=mail.xxxxxx[private/dovecot-lmtp], delay=2158, delays=2158/0.04/0/0, dsn=4.7.4, status=deferred (TLS is required, but was not offered by host mail.xxxxxxxx[private/dovecot-lmtp])
postqueue -p zeigt die wartenden Mails mit dem Status:
(TLS is required, but was not offered by host mail.xxxxxxxx[private/dovecot-lmtp])
Sowohl in vimbadmin als auch in main.cf habe ich
lmtps:unix:private/dovecot-lmtp
korrekt gesetzt.
Noch Ideen?
Gruß Walter
Hi,
Dovecot kennt erst ab neuen Versionen LMTPS (mit „S“). Daher muss das Repo vorher eingebunden- und aktualisiert werden mit „apt-get update“. Wahrscheinlich fehlt dir dieser Schritt. :-)
Viele Grüße
André
Genau das wars! Jetzt läuft alles.
Gruß Walter
Hi André,
habe ein „apt-get update“ und „apt-get upgrade“ durchgeführt. jetzt bringt er leider schon da Fehler:
E: Sub-process /usr/bin/dpkg returned an error code (1)
Failed to perform requested operation on package. Trying to recover:
dovecot-core (2:2.2.18-1~auto+77) wird eingerichtet ...
Job for dovecot.service failed. See 'systemctl status dovecot.service' and 'journalctl -xn' for details.
invoke-rc.d: initscript dovecot, action "start" failed.
dpkg: Fehler beim Bearbeiten des Paketes dovecot-core (--configure):
Unterprozess installiertes post-installation-Skript gab den Fehlerwert 1 zurück
dpkg: Abhängigkeitsprobleme verhindern Konfiguration von dovecot-managesieved:
dovecot-managesieved hängt ab von dovecot-core (= 2:2.2.18-1~auto+77); aber:
Paket dovecot-core ist noch nicht konfiguriert.
Konfiguriert sollte er ja sein
Mit freundlichen Grüßen
Chris
Nach dem Tutorial hab ich leider den Dovecot nicht starten können. An was kann das liegen?
service dovecot status
● dovecot.service - LSB: Dovecot init script
Loaded: loaded (/etc/init.d/dovecot)
Active: failed (Result: exit-code) since So 2015-06-14 19:51:21 CEST; 1h 2min ago
Process: 9920 ExecStop=/etc/init.d/dovecot stop (code=exited, status=0/SUCCESS)
Process: 10684 ExecStart=/etc/init.d/dovecot start (code=exited, status=1/FAILURE)
Jun 14 19:51:21 astra2385 dovecot[10684]: [121B blob data]
Jun 14 19:51:21 astra2385 dovecot[10684]: doveconf: Error: managesieve-login: dump-capability process returned 89
Jun 14 19:51:21 astra2385 dovecot[10684]: [160B blob data]
Jun 14 19:51:21 astra2385 dovecot[10684]: doveconf: Error: managesieve-login: dump-capability process returned 89
Jun 14 19:51:21 astra2385 dovecot[10684]: [121B blob data]
Jun 14 19:51:21 astra2385 dovecot[10684]: failed!
Jun 14 19:51:21 astra2385 systemd[1]: dovecot.service: control process exited, code=exited status=1
Jun 14 19:51:21 astra2385 systemd[1]: Failed to start LSB: Dovecot init script.
Jun 14 19:51:21 astra2385 systemd[1]: Unit dovecot.service entered failed state.
Und trotzdem vielen Dank für diese Tutorial
Gruß
Christoph
@Christoph Ziegler : schau mal in dein syslog. wahrscheinlich findest du diese zeile:
Starting IMAP/POP3 mail server: dovecotdoveconf: Fatal: Error in configuration file /etc/dovecot/dovecot.conf: mailbox Gelöschte Objekte: name isn’t valid UTF-8
Wenn ja: Entferne die Umlaute aus /etc/dovecot/dovecot.conf
Gruß Martin
Hi,
dein Tutorial für Wheezy hat mir enorm gut gefallen und ich habe es gleich mal getestet. Funktioniert wirlich wunderbar.
Gerade bin ich dabei einen neuen Server unter Jessie aufzusetzen, da ist mir aufgefallen, dass du die Schritte für den Viren- und Spamfilter nicht mehr optional gemacht hast. Das hat mir bei der letzten Version sehr gut gefallen, da ich diese Funktionen ausgelagert habe und nicht doppelt brauche. Daher jetzt meine Frage: Was muss ich anpassen, damit ich diese beiden Sachen ausbauen kann?
Leider bin ich was die postfix master.cf angeht wirklich kein Profi :( Hoffe, du kannst mir helfen.
Gruß
Andreas
Hallo André,
vielen Dank für deinen tollen Artikel!
Zur Form: Schön wäre es wenn du einen Changelog führen würdest, wie beim letzten Artikel. Zum Inhalt: Ich würde mir wünsche das du auf Apache als Alternative eingehst und SoGO wäre natürlich ein Kracher.
Danke für deine Arbeit.
Hallo Andre,
vielen Dank für den Tipp. Das hatte ich tatsächlich beim Erstellen der application.ini überlesen. Hab ich jetzt nachgetragen.
Leider klappts immer noch nicht, mit dem Verzeichnisse erstellen.
Im postqueue -p steht die Mail mit folgendem Fehler drin:
(delivery failed to mailbox //maildir:/var/vmail/domain.de/achim/Maildir:LAYOUT=fs: unable to create lock file //maildir:/var/vmail/domain.de/achim/Maildir:LAYOUT=fs.lock: No such file or directory)
Wo kommen denn die // vor dem maildir: her? Ich finde keine Einstellung, die diese erzeugt und ich denke, die gehören da nicht hin.
Vielen Dank für Deine Hilfe
Achim
Hi,
öffne bitte im ViMbAdmin Panel deinen Benutzer, irgendwo solltest du den Transport definieren können. Dort steht „virtual“ per Standard, glaube ich. Da trägst du einfach „lmtps:unix:private/dovecot-lmtp“ ein, ohne die Anführungszeichen.
Ich glaube, die mailq müsstest du auch einmal bereinigen, da die Änderung darauf nicht mehr wirkt.
Die „//“ stellt er vor, da es das „virtual_mail_base“ ist (erstes „/“) und er den Maildirpfad als Pfad im Dateissystem erkennt (zweites „/“).
Viele Grüße
André
Hallo Andre,
vielen Dank für die schnelle Hilfe. Das wars. Der Transport-Eintrag hat in der Datenbank noch gefehlt. Danach hat postfix die mails aus der Queue an dovecot weitergegeben und dovecot brav das Mailverzeichnis erstellt.
Super! Nun läuft der Mailserver endlich rund. Danke nochmals dafür.
Grüße
Achim
Guten Abend ;),
mir ist heute beim update von ViMbAdmin aufgefallen, dass du php-apc benutzt obwohl folgendes angegeben ist:
Spielt das eine Rolle?
Hallo André,
vielen herzlichen Dank für dieses geniale Howto! Bitte halte das aktuell, eine tolle Referenz!
LG Mario
Hi Mario,
vielen Dank für die netten Worte!
André
PS: Ich setze für Kalender/Kontakte/ActiveSync Horde anstatt roundcube ein. Das funktioniert perfekt.
PPS: Macht es Sinn hier SpamAssassin noch weiter zu konfigurieren oder reichen die out-of-the-box Einstellungen?
Es kann sinnvoll sein, einen cron job für die Automatisierung der Updates zu konfigurieren (Debian / Ubuntu).
sa-update <= ist ein Tool von SpamAssassin zum aktualisieren der Regeldateien
Bei Anderen Distros kann es sein, dass sa-update per default einmal täglich mit cron angestoßen wird.
/etc/default/spamassassin <= in dieser Datei am ende z.B. per Editor CRON=1 ergänzen!
Grüße
Hallo Andre,
vielen herzlichen Dank für diese tolle Anleitung.
Ich hänge jedoch noch mit einer Kleinigkeit fest, da mir dovecot die Mail noch nicht ausliefert.
Im Log-File des postfix finde ich folgenden Eintrag und komme nicht auf die Lösung:
postfix/virtual[12607]: BC4551A006B: to=, relay=virtual, delay=0.01, delays=0/0/0/0, dsn=4.2.0, status=deferred (delivery failed to mailbox //maildir:/var/vmail/example.de/user/Maildir:LAYOUT=fs: unable to create lock file //maildir:/var/vmail/example.de/user/Maildir:LAYOUT=fs.lock: No such file or directory)
Aus irgendeinem Grund legt dovecot das Maildir-Verzeichnis für den user nicht an. Der User ist in der Datenbank und existiert.
Viele Grüße und schon mal vielen Dank für mögliche Tipps
Achim
Hi Achim,
sorry für die relativ späte Antwort.
Ich könnte mir vorstellen, dass du den default transport in der application.ini von ViMbAdmin nicht gesetzt hast, kannst du mal nachschauen? :-)
Viele Grüße
Hallo.
Ich weiß das du bei deinem Tutorial Nginx verwendest kann man denn auch Apache2 verwenden? Außerdem wüsste ich gerne ob du auch PhpMyAdmin in das Tutorial einbinden könntest?
MfG
Kilian
Ja, das Tutorial funktioniert auch mit Apache. Habe das Tutorial mit Apache und ohne Roundcubemail gemacht und es läuft hier. Installiere einfach Apache und das Modul für PHP (oder halt per CGI was dir lieber ist). Anschließend mod_rewrite, php und mod_ssl aktivieren, einen vhost anlegen und fertig. :)
Debian 8:
Apache und PHP installieren:
apt-get install apache2 apache2-mpm-prefork libapache2-mod-php5
Danach aktiviere TLS und mod_rewrite und mod_php5:
a2enmod ssl
a2enmod rewrite
a2enmod php5
Ändere die php.ini wie oben im Tutorial beschrieben (Jedoch in der /etc/php5/apache2/php.ini)
Erstelle einen vhost in /etc/apache2/sites-available/mail.domain.tld:
<VirtualHost *:80>
ServerName mail.domain.tld
Redirect permanent / https://mail.domain.tld/
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/ssl/mail.domain.tld.crt
SSLCertificateKeyFile /etc/ssl/mail.domain.tld.key
# Intermediate Zertifikat
# SSLCertificateChainFile /etc/ssl/sub.class1.server.sha2.ca.pem
# Root Zertifikat
# SSLCACertificateFile /etc/ssl/ca.pem
ServerName mail.domain.tld
CustomLog ${APACHE_LOG_DIR}/mail.domain.tld_access.log combined
ErrorLog ${APACHE_LOG_DIR}/mail.domain.tld_error.log
DocumentRoot /var/www/html
HostnameLookups Off
UseCanonicalName Off
ServerSignature Off
Header always set Strict-Transport-Security "max-age=10886400"
<Directory "/var/www/html">
SSLRequireSSL
Options FollowSymLinks
AllowOverride FileInfo Indexes Limit
Require all granted
DirectoryIndex index.php index.html index.htm
</Directory>
</VirtualHost>
Und aktiviere diesen vhost:
ln -s /etc/apache2/sites-available/mail.domain.tld /etc/apache2/sites-enabled/mail.domain.tld
Anschließend deaktiviere noch unsichere Verschlüsselungsmethoden in /etc/apache2/mods-enabled/ssl.conf indem du folgendes am Ende und vor </IfModule> hinzufügst:
SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:DES-CBC3-SHA:!ECDHE-RSA-DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!LOW:!MD5:!EXP:!PSK:!SRP:!DSS
SSLHonorCipherOrder on
SSLProtocol ALL -SSLv2 -SSLv3
Apache starten (systemctl start apache2) und das sollte es hoffentlich gewesen sein, falls ich mich noch richtig daran erinnere.
Hi,
ich habe mich an die Anleitung gehalten und einen eigenen Mailserver aufgesetzt, der auch soweit funktioniert. Jetzt habe ich noch einen alten Mailserver mit Plesk 11/courier (Maildir?) Mailkonten. Ich habe schon versucht einfach die Mailkonten mit courier-dovecot-migrate.pl zu migrieren und nach /var/vmail zu kopieren. Leider geht bei meinen bisherigen versuchen immer die Verzeichnisstruktur verloren (Alle Verzeichnisse auf einer Ebene und werden im Mailclient mit einem „.“ beginnend angezeigt). Habe ich bei mir was falsch konfiguriert oder weiß jemand was man da noch machen kann?
Was ich eigenartig finde ist, dass ich wie im Tutorial „mail_location = maildir:~/Maildir:LAYOUT=fs“ in der dovecot.conf habe. Wenn ich aber mit dem Mail-Client auf ein Konto zugreife wird beispielsweise /var/vmail/domain.tld/test/mail anstelle von „Maildir“ angelegt?!
Hi,
argh…
Dort:
Ich musste eine alte Revision wiederherstellen, dabei ist das wohl durcheinander gekommen. Nicht gut. :-)
Allerdings ist es nicht schlimm. Dovecots
mail_location
wird durch den Wert aus der Datenbank einfach überschrieben.Schlecht ist es allerdings für den „shared“-Namespace, der muss korrekt sein.
Also entweder würdest du nun die „application.ini“ wie oben beschrieben korrigieren, oder du änderst den Namespace in der „dovecot.conf“:
Falls du sowieso noch keine Mails empfangen hast und die Mailbox neu anlegen kannst, empfehle ich eher die „application.ini“ abzuändern.
Anschließend wird das Maildir korrekt gesetzt, wenn in ViMbAdmin die Mailbox neu angelegt wird.
Danke für den (unfreiwilligen) Hinweis. :-)
Eine Frage hätte ich doch noch, auch wenn es sich nicht direkt auf den Artikel bezieht.
Ich habe die Aufgabe ebenfalls einen Backup MX anzulegen.
Ich habe jetzt im groben und ganzen die Config des Postfix genommen, damit ich die Prüfungen und Validierungen auch im Backup MX habe und keinen Backscatter erzeuge.
Das Ganze funktioniert auch eigentlich recht gut.
Allerdings erhalte ich die Mails 3fach…
Gibt es hier vielleicht einen Tipp woher das stammen könnte?
Bisher konnte ich es noch nicht nachvollziehen so richtig..
Wäre super wenn du einen Tipp hättest.. Google hilft mir leider nicht weiter..
Viele Grüße
Sven
Hallo,
Erstmal einen riesen Dank für Fufix, die Seafile-Hilfe und diesem Tut hier ^^ Ich kann dir gar nicht sagen, wie viel Zeit es mir erspart hat, beim Einrichten eines Mailservers und vielen weiteren Sachen :D
Ein paar Fragen hätte ich aber noch:
– Wo ist fail2ban? Eine DoS Protection ist sicherlich sinnvoll ^^
– Warum nicht auf MariaDB setzen? Die Jessie-Mainrepos kommen standardmässig mit MariaDB. Wäre eine Überlegung wert…
– Für eine SOGo-Integration in diese Anleitung wäre ich unendlich dankbar :D
LG,
Dennis
Och, fail2ban könnte ich gerne in einem seperatem Thema beschreiben. Ich weiß, ich habe es im „alten“ Artikel drin. Das neueste Release aus dem Git ist aber nochmal schöner, finde ich. Kommt vor allem mit einigen vordefinierten Filtern. :-)
Und danke auch an dich!
SOGo kommt bestimmt irgendwann. Ist ja erstaunlich, dass das so gefragt ist. :-)
Mit MariaDB hatte ich hin und wieder kleine Probleme. Zwar nichts wildes, aber es könnte vielleicht stören. Auf Dauer sollte aber der Wechsel drin sein.
Einen kleinen Fehler hätte ich da noch gefunden:
Nachdem anlegen der Datei für die MySQL Verbindung für Dovecot soll man die Rechte anpassen
chown root:vmail /etc/dovecot/dovecot-mysql.conf
Allerdings wird erst im Step danach der User „vmail“ angelegt.
Viele Grüße
Sven
Danke auch an dich, ist ja peinlich, was mir da passiert ist. :-)
könnte schon glatt als Spam durchgehen ;)…
Ich habe folgendes Problem in den Logs gefunden:
Bin deiner Anleitung exakt gefolgt und habe auf einem sauberen System gestartet. Fehlt evtl. noch
apt-get install clamav
?
Gruß Pascal
Och nö, habe was wichtiges im Artikel vergessen…
Danach sollte das Problem behoben sein. Keine Ahnung, wieso ich das vergessen habe, sorry! Aber danke für den Hinweis!
Danke! Scheint zu funktionieren.
Bin mehr als Dankbar, dass du überhaupt so gut kommentierte Tutorials schreibst, also alles super! :)
Ansonsten gibt es noch nen kleinen Fehler bei
dort fehlt das .key
Oder halt hier entfernen:
Viele Grüße und DANKE!
Ups, danke! Ich weiß nicht, warum mir sowas entgeht… :-) Habe es korrigiert!
Viele Grüße!
Kleiner Tipp für Probleme im ersten Schritt:
Falls bei euch nach der Eingabe von
folgende Fehlermeldung erscheint:
"Failed to create bus connection: No such file or directory"
fehlt bei euch dbus.
Einfach nachinstallieren:
apt-get update && apt-get install -y dbus
Danke für den Hinweis! :-) Musste es auch schon in fufix einbauen, hier leider vergessen. Muss mir mal anschauen, wieso bei „minimal“-Systemen auf dbus verzichtet wird. Sollte meiner Meinung nach dazugehören.
André… ich könnte dich knutschen ;)….
Erst einmal Entschuldigung für die geplatzte Kommunikation via Email. Mein Kleopatra ist immer wieder abgekackt und das hat mir zu viele Nerven geraubt. Inzwischen hab ich mich dazu entschlossen ein eigenes Cluster aufzubauen mit ISPconfig (Meinung dazu?) und eben einem separaten Mailserver. Dabei wird mir deine Anleitung eine großartige Hilfe sein!
Vor kurzem habe ich das erste Mal nginx verwendet und bin auf Probleme mit PHPMyAdmin gestoßen. Jedoch war nginx nicht so ein Ressourcenfresser als der Apache. Geht deine Empfehlung hier klar in Richtung nginx?
Viele Grüße,
Pascal
Ich empfinde Nginx als viel übersichtlicher und strukturierter als Apache2. In den meisten Situationen zudem einfach schneller. Gut, die ganzen Rewrites, die je nach Webanwendung umzuschreiben sind, können schon nerven. Es wird sich ja oft auf funktionierende htaccess-Datein verlassen (seitens Entwickler). Ich kann mir vorstellen, dass dort auch das Problem mit PMA bestand.
Hin und wieder, wenn ich ganz faul bin und schnell eine mir fremde Webanwendung hosten möchte, setze ich Apache2 mit libapache2-mod-php5 auf. Das erspart mir dann 5 Minuten der Umkonfiguration. :-)
Hallo André,
kann mich dem oben genannt Lob nur anschließen.
Um auf die aktuelle Logjam-Thematik einzugehen, wäre bzgl. der Ciphers noch folgende Seite zu erwähnen:
Dort wird folgender Parameter bei Postfix empfohlen:
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA
Es gibt dort auch Vorschläge für Dovecot.
Weiterhin wird eine eigene DH Gruppe vorgeschlagen.
Gruß
Tobias
Hallo André,
wirst du ViMbAdmin 3 auch in Fufix integrieren? Bzw. ließe sich dort ViMbAdmin 3 ohne große Probleme auch nachträglich hinzufügen, ggf. im Austausch für postfixadmin?
Ansonsten schließe ich mich wynni an, das wäre wirklich das Nonplusultra :)
Danke für deine tollen Tutorials!
Ich habe darüber nachgedacht. Allerdings unterscheiden die Datenbanken sich schon deutlich. Muss erst einen vernünftigen Upgrade-Prozess basteln. :-) Aber danach steht dem eigentlich nicht mehr viel im Wege.
Kalender und Kontakte sollten wohl der nächste Schritt sein. Habe schon viele Ansätze gehabt, die ich aber noch nicht einbauen wollte, da irgendetwas klemmte oder nicht „ganz so gut“ funktionierte. Baikal mit IMAP-Login wäre wohl eine Überlegung.
Danke für deinen Kommentar! :-)
Hallo André,
zuerst ein großes Lob, mir gefällt dein Blog und deine Arbeit an fufix. Ich muß zugeben, bis noch habe ich fufix nicht getestet. Was ich aber hier vermisse ist eine Kalender und Kontakte Synchronisation. Ich selbst möchte nicht mehr darauf verzichten.
Vielleicht stolperst du ja mal zufällig über SOGo oder ähnliches und kannst das geschickt mit einbauen :)
Lg
wynni
Hi,
danke! Kalender und Kontakte werden noch kommen, siehe Kommentar an spm. Mir fehlt leider noch der endgültige Ansatz dafür. :-) Persönlich verwende ich WebMail Pro von Afterlogic für 50€. Spricht zwar gegen das Prinzip der kostenlosen Software. Aber es funktioniert einfach zu gut, hehe…
SOGo habe ich schon einige male gebastelt, allerdings müsste dann das Passwort-Hashing wieder auf MD5 (crypted?) runtergeschraubt werden, damit die Synchronisation funktioniert.
Mal sehen, es findet sich schon noch das richtige Stück Software!
Viele Grüße und danke für deinen Kommentar!
Hi André,
Ich habe SOGo bei mir mit Fufix am laufen und musste das Passwort-Hashing nicht runtersetzen, habe ganz einfach SOGo installiert, dann die Authentifizierung auf Mysql umgestellt und greife per View auf die Datenbank von Postfixadmin zu.
Mein userPasswordAlgorithm von SOGo steht einfach auf crypt. DAV Server funktioniert einwandfrei, Wenn ich User lösche kann dieser sich auch nicht mehr bei SOGo anmelden, Sieve Regeln funktionieren sogar besser als bei Roundcube, Ich würde ebenfalls Vorschlagen das du SOGo einbinden würdest, Theoretisch könntest du aber auch noch gerne auf LDAP umsteigen, dann könntest du auch noch Openchange darauf installieren, was dann sogar ActiveSync unterstützen würde.
Was hälst du davon?
Hi Samurait,
und du hat kein Problem mit SHA512-Crypt? Ich habe in Erinnerung, dass SOGo damit nicht umgehen kann.
:-) OpenChange wäre bestimmt nicht schlecht. Aber das wären dann wirklich zu viele Änderungen und eher was für einen eigenen Artikel, glaube ich.
Ich bin immer wieder überrascht, wieviele Menschen sich volle Exchange-Funktionalität wünschen. :-)
Danke für die Info!
Konstruktiver Vorschlag: Dieses unfassbar schlecht zu konfigurierende, aufgeblähte Postfix durch ein flinkes OpenSMTPd ersetzen. Hab‘ ich so gemacht. Wirkt Wunder.
Postfix ist unfassbar gut dokumentiert, seit Jahren (eher Jahrzehnten) bewährt und bis ins letzte Detail durchdacht. Ich glaube, wenn man eine Software nicht schlechtreden kann, dann ist es Postfix.
Den ganzen Umfang wird dir kein anderer MTA in der Stabilität bieten können.
Ja, bis man durchblickt, vergeht einige Zeit. Aber wenn man einmal die Möglichkeiten hatte, kann Postfix kaum noch etwas das Wasser reichen.
Aber wer bin ich, dass ich nicht offen für Alternativen bin. Gab ja leider schon eine Weile keine Neuigkeiten am MTA Himmel. Mit Dovecot sieht das ganze ja schon anders aus. Schlecht mailen tun wir mit unseren freien Systemen jedenfalls nicht. :-)
Viele Grüße
Braucht denn wer „den ganzen Umfang“ wirklich? Ist „kann das meiste“ wirklich immer das Topargument?
Fehlende Stabilität kann man OpenBSD-Software sicherlich nicht vorwerfen. ;)
Wenn dir Postfix nicht gefällt, dann nimm eben was anderes – wie Sendmail, Exim, Qmail, Zmailer oder Courier. Es ist ja nicht so, als dass es nur den einen gäbe.
Postfix hat den Vorteil, dass es gut dokumentiert ist, sehr performant ist (> 100000 ausgehende Mails pro Stunde ist kein Problem), eine sehr große Community hat und damit es sehr viel Dokumentation hat, dass es Milter eingebaut hat so wie von Grund auf als sicherer MTA als Designziel programmiert wurde (Exim beispielsweise ist ein monolithisches Binary SUID root, Postfix dagegen besteht aus einer Vielzahl an Programmen, jedes genau für einen Zweck und die remote root exploits bei Sendmail früher waren Legion), weiterhin kommt dazu die nach wie vor aktive Entwicklung durch den Autor hinzu. Der andere MTA dieser Art, Qmail, ist zum Konfigurieren eine Qual.
Eine einfache Installation mit Postfix ist schnell gemacht, aber es skaliert eben auch sehr gut.
Pingback: Mailserver: Postfix, Dovecot (SSL und Sieve), MySQL, Spam/Virenfilter auf Debian Wheezy