Wiki - Freifunk Pinneberg

Freies WLAN im Kreis Pinneberg

Benutzer-Werkzeuge

Webseiten-Werkzeuge


mail

Mailserver

  • postfix
  • dovecot - IMAP
  • baikal - CalDAV, CardDAV
  • sieve - Filter
  • spamassassin - SPAM Abweht
  • postgrey - Greylisting
  • policyd-weight - Gewichtete Regeln, z.B. für Blacklists

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

  • Datenbankkonfiguration in der Datei dbconfig.inc.php
  • Programmkonfiguration: /etc/postfixadmin/config.inc.php ist die Vorlage, geänderte Optionen werden in die neu zu erstellende Daten config.local.php eingetragen:
    • $CONF['encrypt'] muß korrekt eingestellt werden. Im Zusammenspiel mit Dovecot sollte md5crypt funktionieren, als modernere Variante mit Dovecot-INtegration bietet sich dovecot:SHA256-CRYPT an.
    • $CONF['welcome_text'] sollte auf eine freundliche Willkommensmeldung geändert werden

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:

  • Alle zusätzlichen Objekte mit dem Prefix x_ kennzeichnen
  • In Zusatztabellen bitte die Felder created, modified und active verwenden
  • Integration über *_struct_hook(), in config.inc.php ist ein Beispiel dazu, Aktivierung dann mit $CONF[*_struct_hook]

SPAM-Abwehr

 aptitude install spamassassin spamc postgrey policyd-weight

TODO

  • spamassassin
    • Einbau als Content-Filter, Spamassassin läuft als Daemon im Hintergrund und wird bei Bedarf von spamc angesprochen. In dieser Konfiguration wird kein Amavis benötigt.
      /etc/postfix/master.cf
      smtp      inet  n       -       -       -       -       smtpd
        -o content_filter=spamassassin
      [...]
      spamassassin unix -     n       n       -       -       pipe
        user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
    • aktivieren über /etc/default/spamassassin
  • postgrey
    • /etc/default/postgrey
      • mit Socket: POSTGREY_OPTS="--unix=/var/spool/postfix/postgrey/socket"
      • mit TCP: POSTGREY_OPTS="--inet=10023"
    • Frage: ist ein Socket besser, oder eine IP-Adresse?
      • Antwort: Der Socket hat viel weniger Overhead. Aber Zugriffsrechte beachten.
    • Falls mit Socket, Verzeichnis anlegen, falls noch nicht existent. TODO Klären, welche Berechtigungen für das Verzeichnis und den Socket notwendig sind. Im Standard sind die Einstellungen des Sockets srw-rw-rw-
      mkdir /var/spool/postfix/postgrey
      chown postfix.postgrey /var/spool/postfix/postgrey
      chmod 770 /var/spool/postfix/postgrey
      • postgrey neu starten, damit der Socket aktiviert wird
    • Zeile in /etc/postfix/main.cf unter smtpd_recipient_restrictions einfügen
      • mit Socket: check_policy_service unix:postgrey/socket
      • mit TCP: check_policy_service inet:127.0.0.1:10023
  • policyd-weight

Trainieren einer Mail als SPAM:

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

Dovecot

  • IMAP-Server
  • Benutzerverwaltung auch für Postfix
  • Filterregeln mit Sieve
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

  • Web-Frontend
  • Nützliche Pakete
    apt-get install php5-sqlite php5-ldap 
  • Paket herunterladen
    wget https://github.com/roundcube/roundcubemail/releases/download/1.2.3/roundcubemail-1.2.3-complete.tar.gz
  • Datenbank einrichten
    CREATE DATABASE roundcubemail;
    GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY '********';
  • Installer-Verzeichnis aufrufen
  • Berechtigungen des Gesantsystems einstellen
    • Konfigurationsdateien im config-Verzeichnis nicht für alle lesbar. Da stehen Zugangsdaten für die Datenbank drin!
  • Plugins aktivieren: Password, Managesieve
  • Optional Kalender
  • Konfiguration des virtuellen Servers anpassen
    <Directory .../roundcube/>
      AllowOverride All
    </Directory>
  • Einstellungen in der Konfigurationsdatei config.inc.php vornehmen
    • $config['smtp_log'] = false;, Datensparsamkeit, logs/sendmail soll nicht geschrieben werden

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

  • Berechtigungen korrigieren
    • Benutzer einstellen: root.www-data, www-data hat auch nur Leserechte, bis auf die Verzeichnisse temp und log
      chown -R root.www-data /var/www/vhosts/mail.pinneberg.freifunk.net
    • Dateien im config-Verzeichnis

Baikal

TODO

  • Zentraler Speicher für Adressen und Kalender
  • soll unter baikal.pinneberg.freifunk.net laufen
  • php-dom (php7.0-xml) benötigt
mail.txt · Zuletzt geändert: 04.01.2021 19:24 von havelock