Inhaltsverzeichnis

Mailserver

Für Tips siehe auch: https://www.debinux.de/2015/05/mailserver-from-scratch-debian-8/, zum Testen eignet sich auch das Programm swaks sehr gut.

Mailkonfiguration auf den Gateways

/etc/mailname
<gate>.ffpi
/etc/aliases
# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: hostmaster@pinneberg.freifunk.net

Die folgende Konfiguration gilt nicht für gate04, da dieser der Haupt-Mailserver ist und natürlich eine erheblich komplexere Konfiguration erfordert.

Im folgenden sind nur die anzupassenden Zeilen der Konfiguation aufgeführt:

/etc/postfix/main.cf
myhostname = <gate>.ffpi
mydestination = <gate>.pinneberg.freifunk.net, <gate>.ffpi, localhost.ffpi, localhost
relayhost = gate04.ffpi

Installation des Hauptservers

Um eine leichte Benutzerkonfiguration über ein Web-Frontend zu ermöglichen wird das Paket postfixadmin verwendet. Dieses speichert die notwendigen Datein in einer MySQL-Datenbank.

Die Datenbank bekommt später noch Zusatzfunktionen, sie wird auch von Dovecot verwendet.

TODO

Postfix

Wir verwenden eine Konfiguration mit virtuellen Benutzern.

groupadd -g 5000 vmail 
useradd -m -d /var/vmail -s /bin/false -u 5000 -g vmail vmail
chmod 2770 /var/vmail/
/etc/postfix/main.cf
# Link the mailbox uid and gid to postfix.
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
 
# Set the base address for all virtual mailboxes
virtual_mailbox_base = /var/vmail
 
# Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
transport_maps = hash:/etc/postfix/transport
 
# Virtual domains, users, and aliases
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual-alias-maps.cf,
        hash:/var/lib/mailman/data/virtual-mailman
 
# Handle SMTP authentication using Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes  
 
smtpd_recipient_restrictions =
        [...]
        permit_sasl_authenticated,
        [...]

Die Zustellung wird in einer eigenen Datei konfiguriert:

/etc/postfix/transport
# Teil 1: Domains
pinneberg.freifunk.net lmtp:unix:private/dovecot-lmtp
freifunk-pinneberg.de lmtp:unix:private/dovecot-lmtp
ffpi lmtp:unix:private/dovecot-lmtp
 
# Teil 2: Einzelne Benutzer
service@pinneberg.freifunk.net osticket:osTicket Support
helpdesk@pinneberg.freifunk.net osticket:osTicket Helpdesk
noc@pinneberg.freifunk.net osticket:osTicket NOC
info@pinneberg.freifunk.net osticket:osticket
 
keys@freifunk-pinneberg.de osticket:osticket

Zum eleganten Verwalten der Queue wird pfqueue verwendet. Folgende Konfigurationsdatei ist manuell anzulegen:

/etc/pfqueue.conf
# /etc/pfqueue.conf
#
backend_name=postfix2

Postfixadmin

Postfixadmin ist ein Web-Frontend für die Benutzer- bzw. die Adreßverwaltung: https://mail.pinneberg.freifunk.net/postfixadmin/

Es wird das gleichnamige Debian-Paket installiert. Als Benutzer wird postfix gewählt, die Datenbank nennen wir postfixadmin.

Konfiguration über

Prüfe Datenbankeinträge:

postalias -q mustermann@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Wenn die Adresse gefunden wurde, wird 1 zurückgeliefert, ansonsten nichts.

Anpassungen / Customizing

Änderungen können ab Version 3 vorgenommen werden, dabei sind einige Regeln zu beachten:

SPAM-Abwehr

 aptitude install spamassassin spamc postgrey policyd-weight

TODO

Trainieren einer Mail als SPAM:

su -c "sa-learn --spam /tmp/spammail.eml" debian-spamd

Dovecot

aptitude install dovecot-imapd dovecot-lmtp dovecot-mysql dovecot-pop3d \
    dovecot-sieve dovecot-managesieved
CREATE USER 'dovecot'@'localhost' IDENTIFIED BY 'DOVECOTPASS';
GRANT SELECT ON postfixadmin.mailbox TO 'dovecot'@'localhost';
GRANT SELECT,INSERT,UPDATE,DELETE ON postfixadmin.quota2 TO 'dovecot'@'localhost';

Im folgenden sind nur die Änderungen an den Dateien dokumentiert. Die Aufstellung ist momentan nicht endgültig überprüft und vermutlich auch noch unvollständig.

Mit dem Plugin last_login kann der letzte Anmeldezeitpunkt gespeichert werden. Zu beachten, daß der Zugriff über das Dict-Modul läuft, welches auf Datenbanktabellen INSERT- und UPDATE-berechtigungen benötigt

alter table mailbox add column x_last_login int(11) default NULL;
grant insert (username, x_last_login), update (username, x_last_login) on postfixadmin.mailbox to 'dovecot'@'localhost';

Dovecot Konfigurationdsdateien

Protokollierung

Über local5 in das syslog:

10-logging.conf
log_path = syslog
syslog_facility = local5
auth_verbose = yes
auth_verbose_passwords = no

Local5 facility in spezielle Dateien umleiten

/etc/rsyslog.conf
*.*;auth,authpriv,local5.none              -/var/log/syslog
 
# Dovecot
local5.*                                        -/var/log/dovecot.log
local5.warning;local5.error;local5.crit         -/var/log/dovecot-errors.log

Logfile rotieren (vermutlich noch optimierungsfähig

/etc/logrotate.d/dovecot
/var/log/dovecot*.log {
  missingok
  notifempty
  compress
  delaycompress
  sharedscripts
  postrotate
    doveadm log reopen
  endscript
}

Tests

Prüfe, ob ein Benutzer existiert

doveadm auth lookup mustermann@example.com
doveadm auth lookup -x service=imap mustermann@example.com

Prüfe, ob die Kennwortabfrage mit der MySQL-Datenbank funktioniert:

doveadm auth test mustermann@example.com

Einen Passwort-Hash kann man erzeugen mit

dovecot pw -s MD5-CRYPT

Informationen aus der Benutzerdatenbank abfragen

doveadm user mustermann@example.com

Roundcube

Plugin:password

Der Roundcube-Benutzer benötigt die Berechtigung die Mailboxtabelle zu lesen und das Password-Feld zu schreiben:

GRANT SELECT, UPDATE (password) ON `postfixadmin`.`mailbox` TO 'roundcube'@'localhost'

Das Plugin wird aktiviert in der zentralen Konfigurationsdatei config.inc.php. in das Array $config['plugins'] wird das Plugin mit seinem Namen eingetragen.

Im Plugin-Verzeichnis wird ebenfalls eine config.inc.php angelegt. Dazu wird die .dist-Datei kopiert.

Plugin:managesieve

Kopieren die Vorlage der Konfigurationsdatei config.inc.php.dist nach config.inc.php.

config.inc.php
$config['managesieve_port'] = 4109;
$config['managesieve_host'] = 'localhost';

TODO Quotas, auch ein Dovecot-Thema

Upgrade

Backup des Programmverzeichnisses

tar cjf /var/backups/roundcube_2016-12-09.tar.bz2 -C /var/www/vhosts mail.pinneberg.freifunk.net

Herunterladen der neuen Version

cd /tmp
wget https://github.com/roundcube/roundcubemail/releases/download/1.2.3/roundcubemail-1.2.3-complete.tar.gz
tar xzf roundcubemail-1.2.3-complete.tar.gz
cd roundcubemail-1.2.3
bin/installto.sh /var/www/vhosts/mail.pinneberg.freifunk.net

Nach der dem Update sind Aufräumarbeiten notwending

Baikal

TODO