Unterschiede zwischen den Revisionen 15 und 16
Revision 15 vom 2018-01-12 12:51:05
Größe: 11314
Autor: anonym
Kommentar: Postfixeinrichtung
Revision 16 vom 2018-01-12 13:11:18
Größe: 11216
Autor: anonym
Kommentar: Einleitung
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 1: Zeile 1:
Diese Seite beschreibt die Installation und Einrichtung von Sympa unter Debian Stretch. Als MTA kommt Postfix zum Einsatz. Statt über alias_maps wird Sympa wird über {{{virtual_transport}}} eingebunden. Diese Seite beschreibt die Installation und Einrichtung von Sympa, Postfix und Nginx unter Debian Stretch.

Diese Seite beschreibt die Installation und Einrichtung von Sympa, Postfix und Nginx unter Debian Stretch.

Installation von Sympa

  • Dies ist recht schnell gemacht:

    apt install sympa
  • Bei der Installation wird gleich die Datenbank mit eingerichtet. Dies kann auch manuell durchgeführt werden.

Postfix einrichten

Im Internet gibt es verschiedene Seiten, die die Postfix-Einrichtung beschreiben. Leider sind diese teilweise unübersichtlich, veraltet oder unvollständig.

Prinzipiell gibt es zwei Möglichkeiten, wie Sympa mit Postfix zusammen arbeiten kann:

  • Alias maps: für jede Liste werden eigene Alias-Einträge konfiguiert
  • Transport maps: lediglich allgemeine Konfiguration der Listendomain

Allgemeine Einrichtung

  • Unabhängig von der oben skizzierten Art der Einbindung muss die master.cf angepasst werden:

    sympa      unix  -       n       n       -       -       pipe
      flags=R user=sympa argv=/usr/lib/sympa/lib/sympa/queue ${recipient}
    sympabounce unix -       n       n       -       -       pipe
      flags=R user=sympa argv=/usr/lib/sympa/lib/sympa/bouncequeue ${recipient}
  • In der sympa.conf wird der Pfad zum MTA festgelegt - wichtig ist hier, das "Postfix to Sendmail compatibility interface" zu nutzen und nicht /usr/sbin/postfix:

    sendmail        /usr/sbin/sendmail

Alias maps

  • Folgende Einstellungen gehören nun in die main.cf:

    alias_maps = hash:/ect/postfix/sympa_aliases
    sympa_destination_recipient_limit = 1
    sympabounce_destination_recipient_limit = 1
    recipient_delimiter = +
    transport_maps = regexp:/ect/postfix/sympa_transport
  • Sympa enthält ein Modul, dass die Aliase für jede Liste erzeugt. Diese werden standardmäßig nach /etc/mail/sympa/aliases geschrieben.

  • Um Alias maps einheitlich im Postfix-Verzeichnis zu speichern, muss der Pfad definiert werden -symba.conf:

    sendemail_aliases  /etc/postfix/sympa_aliases
  • Alias-Datei /etc/postfix/sympa_aliases anlegen:

    sympa: "| /usr/lib/sympa/lib/sympa/queue sympa@listen.example.org"
    listmaster: "| /usr/lib/sympa/lib/sympa/queue sympa@listen.example.org"
    bounce+*: "| /usr/lib/sympa/lib/sympa/bouncequeue sympa@listen.example.org"
    abuse-feedback-report: "| /usr/lib/sympa/lib/sympa/bouncequeue sympa@listen.example.org"
    sympa-request: postmaster@sympa@listen.example.org
    sympa-owner: postmaster@sympa@listen.example.org
  • Den Besitzer der Datei ändern, damit Sympa sie beschreiben kann:

    chown sympa:sympa /etc/postfix/sympa_aliases
  • Festlegen, dass nachdem die Datei von Sympa beim Anlegen von neuen Listen geändert wurde, postalias ausgeführt wird - symba.conf:

    aliases_program postalias
  • Noch die transport maps erstellen - /etc/postfix/sympa_transport:

    /^.*-owner\@listen\.example\.org$/ sympabounce:
    /^.*\@listen\.example\.org$/       sympa:
  • Anschließend:

    postmap /etc/postfix/sympa_transport
    service postfix reload

Transport maps

  • Zur Nutzung der Transport maps wird die alias-Funktionalität von Sympa deaktiviert - sympa.conf:

    sendmail_aliases  none
  • Folgende Einstellungen gehören nun in die main.cf:

    sympa_destination_recipient_limit = 1
    sympabounce_destination_recipient_limit = 1
    recipient_delimiter = +
    
    virtual_mailbox_domains = listen.example.org
    transport_maps = regexp:/etc/postfix/sympa_transport
  • Die definierten transport maps werden nun gefüllt - /etc/postfix/sympa_transport:

    /^.*-owner\@listen\.example\.org$/ sympabounce:
    /^.*\@listen\.example\.org$/       sympa:
  • Anschließend:

    postmap /etc/postfix/sympa_transport
    service postfix reload

Nginx als Webserver einrichten

WWSympa, die Weboberfläche für Sympa, ist ein Perl-CGI-Skript. Zur Beschleunigung kann Fastcgi genutzt werden. Da Nginx lediglich Fastcgi unterstützt, wird zusätzlich Fcgiwrap benötigt.

  • Installation der Pakete:

    apt install nginx-light fcgiwrap
  • Fastcgi in /etc/sympa/sympa/sympa.conf aktivieren:

    use_fast_cgi 1
  • Allgemeine Fastcgi-Konfiguration unter /etc/nginx/snippets/sympa_fcgi.conf anlegen:

    gzip off;
            fastcgi_pass   unix:/run/fcgiwrap.socket;
            fastcgi_split_path_info ^(/)(.+)$;
            fastcgi_param  QUERY_STRING       $query_string;
            fastcgi_param  REQUEST_METHOD     $request_method;
            fastcgi_param  CONTENT_TYPE       $content_type;
            fastcgi_param  CONTENT_LENGTH     $content_length;
            fastcgi_param  PATH_INFO          $fastcgi_path_info;
            fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
            fastcgi_param  REQUEST_URI        $request_uri;
            fastcgi_param  DOCUMENT_URI       $document_uri;
            fastcgi_param  DOCUMENT_ROOT      $document_root;
            fastcgi_param  SERVER_PROTOCOL    $server_protocol;
            fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
            fastcgi_param  SERVER_SOFTWARE    nginx;
            fastcgi_param  REMOTE_ADDR        $remote_addr;
            fastcgi_param  REMOTE_PORT        $remote_port;
            fastcgi_param  SERVER_ADDR        $server_addr;
            fastcgi_param  SERVER_PORT        $server_port;
    
            # According to RFC3875 (https://tools.ietf.org/html/rfc3875#section-4.1.14) in SERVER_NAME
            # we should put an actual hostname user came to. For nginx it is in $host
            # This will allow to run sympa multihost instances
            fastcgi_param  SERVER_NAME        $host;
            fastcgi_param  REMOTE_USER        $remote_user;
            fastcgi_param  SCRIPT_FILENAME    $document_root/wwsympa-wrapper.fcgi;
            fastcgi_param  HTTP_HOST           $http_host;
            fastcgi_intercept_errors on;
  • Seiten-Konfiguration unter /etc/nginx/sites-available/sympa anlegen:

    server {
        server_name  listen.example.org;
        root         /usr/lib/cgi-bin/sympa;
        access_log   /var/log/nginx/sympa.access.log;
        error_log    /var/log/nginx/sympa.error.log;
        error_page   403 500 502 503 504 /50x.html;
    
        # While configuring sympa, you should specify wwsympa_url for each robot.
        # if you do not do so, sympa will generate wwsympa_url as ${robot_name}/sympa.
        # So to prevent non-active urls for robots without wwsympa_url, we do this redirect:
    
        rewrite ^/sympa/(.*)$ /$1 permanent;
        
        location ^~ /static-sympa/ {
            alias /var/lib/sympa/static_content/;
            access_log off;
        }
        location /50x.html {
            root /usr/share/nginx/html;
        }
        location ~* \.(php|pl|py|jsp|asp|sh|cgi|bin|csh|ksh|out|run|o)$ {
            deny all;
        }
        location ~ /\.ht {
            deny all;
        }
        location / {
        include /etc/nginx/snippets/sympa_fcgi.conf;
        }
    }
  • Anschließend Seitenkonfiguration aktivieren und Nginx neu laden.

Authentifizierung in der Weboberfläche

Sympa kann mehrere Quellen zur Authentifizierung nutzen. Diese werden in /etc/sympa/auth.conf definiert.

  • Im folgenden Beispiel erfolgt die Authentifizierung bei Nutzer mit einer example.org-Mailadresse per LDAP, alle anderen Nutzer werden über die interne Datenbank authentifiziert:

    # LDAP authentication
    ldap
            regexp  example\.org
            host    ldap.example.org
            timeout 20      
            suffix  sc=mailAccount,ou=People,o=ldap,dc=example,dc=org
            get_dn_by_uid_filter    (cn=[sender])
            get_dn_by_email_filter  (mail=[sender])
            email_attribute         mail
    
    # Internal authentication by email and password
    user_table
            negative_regexp example\.org
            regexp .*
  • Anmeldungen mit einem LDAP-Account sind sowohl nur mit Nutzername (get_dn_by_uid_filter), als auch mit der vollständigen Mailadresse (get_dn_by_email_filter) möglich.

  • Volle Administrationsrechte für die Weboberfläche erhalten alle Accounts, die unter listmasters in /etc/sympa/sympa/sympa.conf geführt werden. Listmaster haben auf alle Robots volle Rechte.

Multidomain-Unterstützung

Eine Sympa-Instanz kann beliebig viele Listen-Domains bedienen. Für die Weboberfläche werden dann, ähnlich zu Apache, virtuelle Host, Robots genannt, eingerichtet. Mit einer Sympa-Instanz lassen sich beliebig viele

Nutzern die Listenerstellung erlauben

Ziel ist es, dass nicht nur Admins Listen erstellen können, sondern auch ausgewählte reguläre Nutzer*innen. Dazu werden alle berechtigten Nutzer*innen in einem Scenario aufgelistet.

  • Zuerst wird in der sympa.conf festgelegt, welches Scenario die Rechte für die Listenerstellung definiert:

    create_list     list_creators
  • Nun wird ein entsprechendes Scenario angelegt. Bei nur einem Robot liegt sie unter /etc/sympa/scenari. Bei verschiedenen Robots unter /ect/sympa/$ROBOT/scenari. Der Dateiname muss eine Kombination aus value.wert entsprechend der sympa.conf sein - in diesem Fall also create_list.list_creators:

    title Users that can create lists
    equal([sender], 'foo@example.org') md5 -> listmaster
  • Das Scenario definiert also, dass eine bestimmte Nutzerin (equal([sender], 'foo@example.org') nach der Anmeldung im Webinterface (md5) entsprechende Rechte (--> listmaster) erhält.

  • Nach dem selben Schema können nun weitere Nutzer*innen definiert werden
  • Mit der Definition von create_list verlieren die listmaster die Möglichkeit, Listen anzulegen - deshalb kann das ursprüngliche Scenario am Ende des neuen Scenarios eingebunden werden1:

    title Users that can create lists
    equal([sender], 'foo@example.org') md5 -> listmaster
    include  create_list.listmaster
  • Da der erwartete Dateiname nun include.create_list.listmaster ist, muss noch ein Symlink erstellt werden:

    ln -s /usr/share/sympa/default/scenari/create_list.listmaster /etc/sympa/scenari/include.create_list.listmaster
  • Abschließend muss Sympa neu gestartet werden

Fussnoten und Hinweise

  1. Für das Scenario gilt: First match wins (1)


Creative Commons Lizenzvertrag
This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.