MediaWiki-API-Ergebnis

This is the HTML representation of the JSON format. HTML is good for debugging, but is unsuitable for application use.

Specify the format parameter to change the output format. To see the non-HTML representation of the JSON format, set format=json.

See the complete documentation, or the API help for more information.

{
    "batchcomplete": "",
    "continue": {
        "gapcontinue": "Root-Server_mit_Ubuntu_16.04-Hetzner",
        "continue": "gapcontinue||"
    },
    "warnings": {
        "main": {
            "*": "Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/postorius/lists/mediawiki-api-announce.lists.wikimedia.org/> for notice of API deprecations and breaking changes."
        },
        "revisions": {
            "*": "Because \"rvslots\" was not specified, a legacy format has been used for the output. This format is deprecated, and in the future the new format will always be used."
        }
    },
    "query": {
        "pages": {
            "12": {
                "pageid": 12,
                "ns": 0,
                "title": "Root-Server mit Ubuntu 14.04",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "Strato bietet im Moment ein interessantes Angebot f\u00fcr Bestandskunden an. Server, die nun einige Jahre im Einsatz waren, werden f\u00fcr annehmbare Preise eingerichtet und als Server zur Verf\u00fcgung gestellt. F\u00fcr 19\u20ac bekommt man einen Server mit\n* Opteron 1214 HE mit 2 x 2,2 GHz (2x 2000 Bogomips)\n* 4 GB Arbeitsspeicher\n* 2 x 500 GB im RAID1-Verbund Festplattenspeicher\nDazu bietet Strato 500 GB FTP-Backupspeicher und die RemoteConsole, falls der Server-Zugang \u00fcber SSH mal ausfallen sollte.\n\n== Smartmontools ==\nZu erst ist bei solchen Modellen nat\u00fcrlich interessant, wie lange der Server vorher schon benutzt wurde. Zumindest die Laufzeit der Festplatte ist leicht herauszufinden. Zu erst installieren wir die Smartmontools per APT\n sudo apt-get update\n sudo apt-get install smartmontools\n\nDann k\u00f6nnen wir per\n sudo smartctl -a /dev/sda\nund\n sudo smartctl -a /dev/sdb\ndie Laufzeiten der beiden Festplatten herausfinden. Bei mir waren das 49377 und 49461 Stunden, also gut 5 1/2 Jahre.\n\n== Webserver ==\nZur Bereitstellung von Webseiten benutzen wir den Apache-Webserver. Da der Server unter mehreren Adressen erreichbar sein wird, richten wir VirtualHosts ein.\n\nDie Installation l\u00e4uft denkbar einfach \u00fcber \n sudo apt-get update\n sudo apt-get install apache2 apache2-utils apache2-doc php5 php5-mysql php-pear\n\nWir installieren also auch gleich PHP und PHP-PEAR mit.\n\nNach der Installation geht es an die eigentliche Konfiguration des Webservers. Ziel ist es, das eine Reihe von Anwendungen (Roundcube, PHPMyAdmin, etc.) nur einmal installiert werden m\u00fcssen und dann allen eingerichteten Domains zur Verf\u00fcgung stehen. Gleichzeitig sollen Dummies, die den Server \u00fcber seine IP oder einen nicht vorhandenen Namen ansprechen, keine Dienste nutzen k\u00f6nnen, sondern lediglich eine Fehler-Seite sehen. Die folgende Konfiguration habe ich in Teilen in ihrer Version vom 12. November 2014 aus dem [[d:Root-Server_mit_OpenSuSE_13.1|Debacher-Wiki]] entnommen (CC-BY-SA). Wir legen also eine Grundkonfiguration f\u00fcr jeden \"dummen\" Aufruf an.\n\nDie VHosts werden sp\u00e4ter unter /var/www/vhosts/ angelegt. Unter /var/www/vhosts/default/htdocs/ findet sich dann die Fehlerseite und unter /var/www/htdocs/ die entsprechenden Anwendungen.\n\nWichtig ist, dass wir die Datei vorher einmal sichern:\n\n cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.org\n\n=== /etc/apache2/sites-available/000-default.conf ===\n\n ServerName default\n ServerAdmin webmaster@lukasthiel.de\n \n ServerTokens Major\n \n DocumentRoot /var/www/htdocs/\n \n # Aliase werden einmal zentral gesetzt. Diese Aliase sind von allen Domains aus erreichbar.\n Alias /webmail   /var/www/htdocs/roundcube\n Alias /ftp       /var/www/htdocs/webftp\n \n <Directory \"/var/www/vhosts\">\n        AllowOverride All\n        Options +FollowSymLinks\n        Order allow,deny\n        Allow from all\n        <IfModule mod_php5.c>\n        </IfModule>\n </Directory>\n \n <IfModule mod_userdir.c>\n        UserDir disabled\n </IfModule>\n \n <VirtualHost *:80>\n        ServerName default\n        UseCanonicalName Off\n        DocumentRoot /var/www/vhosts/default/htdocs/\n        ScriptAlias /cgi-bin/ \"/var/www/cgi-bin/\"\n \n        # Blocken der Anfragen an eingerichtete Dienste\n        Alias /webmail      /var/www/htdocs/dummy\n        Alias /pma          /var/www/htdocs/dummy\n        Alias /webftp       /var/www/htdocs/dummy\n        Alias /roundcube    /var/www/htdocs/dummy\n \n        <IfDefine MAILMAN>\n           ScriptAlias     /mailman/       /var/www/htdocs/dummy\n           Alias           /mailmanicons/  /var/www/htdocs/dummy\n           Alias           /pipermail/     /var/www/htdocs/dummy\n        </IfDefine>\n \n        <IfModule mod_ssl.c>\n                SSLEngine off\n        </IfModule>\n        # Deaktivieren des Zugriffs auf die CGI-Skripte von irgendwo\n        <Directory \"/var/www/cgi-bin/\">\n                AllowOverride None\n                Options None\n                Order allow,deny\n                Deny from all   \n        </Directory>\n        <Directory /var/www/vhosts/default/htdocs>\n                AllowOverride All\n                Options None\n                Order allow,deny\n                Allow from all  \n \n                <IfModule mod_php5.c>\n                  php_admin_flag engine on\n                  php_admin_flag safe_mode off\n                </IfModule>\n        </Directory>\n \n </VirtualHost>\n\nDie SSL-Konfiguration von Ubuntu ist soweit erst einmal ausreichend. Es muss lediglich der Block zum Ausblenden der Standard-Aliase \u00fcbernommen werden.\n\nEntscheidend ist, dass die angegebenen Pfade tats\u00e4chlich existieren, sonst gibt Apache beim n\u00e4chsten Start eine Fehlermeldung aus. Sollten die Verzeichnisrechte nicht richtig gesetzt sein, kann das mittels\n sudo chown -R www-data.www-data /var/www/\n sudo chmod -R 0770 /var/www/\nnachgeholt werden.\n\nNun geht es an die Konfiguration der Strato-Adresse. Ruft man den Server \u00fcber seinen hXXXXXXX.stratoserver.net auf, kann man so beeinflussen, was angezeigt wird.\n\n=== /etc/apache2/sites-available/stratoserver.net.conf ===\n <VirtualHost *:80>\n    ServerName h1234xyz.stratoserver.net\n    UseCanonicalName Off\n    DocumentRoot /var/www/vhosts/default/htdocs\n \n    CustomLog  /var/log/apache2/access.log combined\n    ErrorLog   /var/log/apache2/error.log\n \n    ScriptAlias /cgi-bin/ \"/var/www/cgi-bin/\"\n    # Soll PHPMyAdmin verf\u00fcgbar sein, kann der Pfad hier aktiviert werden. \n #   Alias /pma /var/www/htdocs/phpMyAdmin\n    Alias  /webstat /var/www/vhosts/default/webstat\n    <IfModule mod_ssl.c>\n        SSLEngine off\n    </IfModule>\n \n    <Directory \"/var/www/cgi-bin/\">\n        AllowOverride None\n        Options None\n        Order allow,deny\n        Allow from all\n    </Directory>\n \n    <Directory /var/www/vhosts/default/htdocs>\n        AllowOverride All\n        Options None\n        Order allow,deny\n        Allow from all \n \n        <IfModule mod_php5.c>\n          php_admin_flag engine on\n          php_admin_flag safe_mode off\n #           php_admin_value include_path \"/var/www/htdocs/horde/pear:/var/www/htdocs:./\"\n #           php_admin_value open_basedir \"/var/www/htdocs:/tmp\"\n        </IfModule>\n    </Directory>\n \n </VirtualHost>\n \n <IfModule mod_ssl.c>\n \n <VirtualHost *:443 >\n        ServerName h1234xyz.stratoserver.net\n        UseCanonicalName Off  \n        DocumentRoot /var/www/vhosts/default/httpsdocs \n \n        CustomLog  /var/log/apache2/access.log combined\n        ErrorLog   /var/log/apache2/error.log \n \n        ScriptAlias /cgi-bin/ \"/var/www/cgi-bin/\"\n #       Alias /pma /var/www/htdocs/phpMyAdmin\n #       Alias /webftp /var/www/htdocs/webftp   \n \n        SSLEngine on\n \n        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNUL\n        SSLCertificateFile /var/www/vhosts/default/ssl/server.crt\n        SSLCertificateKeyFile /var/www/vhosts/default/ssl/server.key\n        SSLProtocol All -SSLv2 -SSLv3\n        SSLHonorCipherOrder On\n        SSLCompression off\n        # Add six earth month HSTS header for all users...\n        Header add Strict-Transport-Security \"max-age=15768000\"\n        SSLCipherSuite 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\n \n        <Directory \"/var/www/cgi-bin/\">\n                AllowOverride None\n                Options None\n                Order allow,deny\n                Allow from all  \n        </Directory>\n \n        <Directory /var/www/vhosts/default/httpsdocs>\n                SSLRequireSSL\n                AllowOverride None\n                Options None\n                Order allow,deny\n                Allow from all  \n       </Directory>\n  </VirtualHost>\n\n </IfModule>\n\nDamit ist die Grundkonfiguration von Apache abgeschlossen. F\u00fcr jeden neuen VirtualHost legen wir ab dann eine Datei als /etc/apache2/sites-avaiable/<domain>.conf an.\n\nWichtig ist: Der Ubuntu-Apache unterscheidet zwischen aktivierten und verf\u00fcgbaren Konfigurationen. Wir m\u00fcssen also jede Datei noch einmal extra unter /etc/apache2/sites-enabled/ einbinden. Dazu einfach einen symbolischen Link erstellen:\n sudo ln -s /etc/apache2/sites-available/<domain>.conf /etc/apache2/sites-enabled/<domain>.conf\nDas muss selbstverst\u00e4ndlich auch mit der Standardkonfiguration gemacht werden, sofern das nicht schon standardm\u00e4\u00dfig passiert ist.\n\nEine Beispiel-Konfiguration f\u00fcr VirtualHosts findet sich ebenfalls im [[d:Einzelheiten_zur_Apache-Konfiguration|Debacher-Wiki]] (CC-by-sa). Dabei muss <dummy> mit der Domain ersetzt werden. Die Verzeichnisse werden dann unterhalb von /var/www/vhosts/<dummy> angelegt.\n\n=== /etc/apache/sites-avaiable/dummy.conf ===\n\n <VirtualHost *:80>\n  ServerName   www.<dummy>:80\n  ServerAlias <dummy>\n  UseCanonicalName Off\n  DocumentRoot /srv/www/vhosts/<dummy>/htdocs\n \n  CustomLog  /var/log/apache2-vhosts.d/<dummy>_access_log combined\n  ErrorLog   /var/log/apache2-vhosts.d/<dummy>_error_log\n \n  CustomLog /var/log/apache2/vhosts_access_log vhost_combined\n \n  ScriptAlias  /cgi-bin/ /var/www/vhosts/<dummy>/cgi-bin/\n  Alias  /webstat /var/www/vhosts/<dummy>/webstat\n \n  <IfModule mod_ssl.c>\n        SSLEngine off\n  </IfModule>\n \n  <Directory /var/www/vhosts/<dummy>/htdocs>\n \n    <IfModule mod_php5.c>\n        php_admin_flag engine on\n        php_admin_flag safe_mode off\n        php_admin_value include_path \"/var/www/vhosts/<dummy>/httpdocs:.:/tmp:./:/usr/share/php5/PEAR/:/var/www/typo3src\"\n        php_admin_value open_basedir \"/var/www/vhosts/<dummy>/httpdocs:/tmp:.:/usr/share/php5/PEAR/:/var/www/typo3src\"\n \n    </IfModule>\n \n    <IfModule mod_python.c>\n        <Files ~ (\\.py$)>\n                SetHandler python-program\n                PythonHandler   mod_python.cgihandler\n        </Files>\n    </IfModule>\n \n    Options -Includes +ExecCGI\n  </Directory>\n  <Directory \"/var/www/vhosts/<dummy>/cgi-bin\">\n       AllowOverride None\n       Options +ExecCGI -Includes\n       Order allow,deny\n       Allow from all  \n  </Directory>\n \n </VirtualHost>\n \n <IfModule mod_ssl.c>\n \n <VirtualHost *:443>\n  ServerName   www.<dummy>:443\n  ServerAlias <dummy>\n  UseCanonicalName Off\n  DocumentRoot /var/www/vhosts/<dummy>/htdocs\n \n  CustomLog  /var/log/apache2-vhosts.d/<dummy>_access_log combined\n  ErrorLog   /var/log/apache2-vhosts.d/<dummy>_error_log\n  \n  ScriptAlias  /cgi-bin/ /var/www/vhosts/<dummy>/cgi-bin/\n  Alias  /webstat /var/www/vhosts/<dummy>/webstat\n \n  SSLEngine on\n \n  <Directory /var/www/vhosts/<dummy>/htdocs>\n \n    <IfModule mod_php5.c>\n        php_admin_flag engine on\n        php_admin_flag safe_mode off\n        php_admin_value include_path \"/var/www/vhosts/<dummy>/htdocs:.:/tmp:./:/usr/share/php5/PEAR/:/var/www/typo3src\"\n        php_admin_value open_basedir \"/var/www/vhosts/<dummy>/htdocs:/tmp:.:/usr/share/php5/PEAR/:/var/www/typo3src\"\n    </IfModule>\n \n    <IfModule mod_python.c>\n        <Files ~ (\\.py$)>\n                SetHandler python-program\n                PythonHandler   mod_python.cgihandler\n        </Files>\n    </IfModule>\n \n    Options -Includes +ExecCGI\n  </Directory>\n \n  <Directory \"/var/www/vhosts/<dummy>/cgi-bin\">\n       AllowOverride None\n       Options +ExecCGI -Includes\n       Order allow,deny\n       Allow from all\n  </Directory>\n   SSLProtocol all -SSLv2\n   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM\n   SSLHonorCipherOrder On\n   SSLCompression off\n \n   # Add six earth month HSTS header for all users...\n   Header add Strict-Transport-Security \"max-age=15768000\"\n   SSLCipherSuite 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\n   SSLCertificateFile /var/www/vhosts/<dummy>/ssl/ssl.crt\n   SSLCertificateKeyFile /var/www/vhosts/<dummy>/ssl/ssl.key\n   SSLCertificateChainFile /var/www/vhosts/<dummy>/ssl/sub.class1.server.ca.pem\n   SSLCACertificateFile /var/www/vhosts/<dummy>/ssl/ca.pem\n   SetEnvIf User-Agent \".*MSIE.*\" nokeepalive ssl-unclean-shutdown\n   CustomLog /var/log/apache2-vhosts.d/<dummy>_ssl_log  \"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \\\"%r\\\" %b\"\n \n </VirtualHost>\n \n </IfModule>\n\nDamit ist die Einrichtung des Webservers abgeschlossen.\n\n=== Bugzilla ===\nF\u00fcr eine bereits vorhandene Bugzilla-Version musste nach dem Umzug eine neue Perl-Grundinstallation vorgenommen werden. Die Installation von Zusatzpaketen erfolgt hier \u00fcber die benutzerfreundliche Oberfl\u00e4che cpan, die einfach im Terminal mit Befehlen versorgt wird. Vor der Installation via CPAN k\u00f6nnen aber auch folgende Schritte versucht werden, um die Bugzilla-Installation zu \u00fcberpr\u00fcfen:\n\nPr\u00fcfen auf fehlende Perl-Module (Ordner der Bugzilla-Dateien):\n ./checksetup.pl --check-modules\n\nVor dem Installieren der Pakete sollte das Paket make installiert werden:\n sudo apt-get install make\n\nIm Bedarfsfall dann via\n /usr/bin/perl install-module.pl --all\nnachinstallieren.\n\nAnsonsten via CPAN:\n\n cpan\n\nMit dem Befehl install k\u00f6nnen Pakete installiert werden. F\u00fcr Bugzilla 4.0 m\u00fcssen folgende Pakete installiert werden:\n CGI (3.51)\n Date::Format (2.21)\n DateTime (0.28)\n DateTime::TimeZone (0.71)\n DBI (1.41)\n DBD::mysql (4.00) (f\u00fcr MySQL-Datenbanken)\n DBD::Pg (1.45) (f\u00fcr PostgreSQL-Datenbanken)\n DBD::Oracle (1.19) (F\u00fcr Oracle-Datenbanken)\n Digest::SHA (any)\n Email::Send (2.00)\n Email::MIME (1.904)\n Template (2.22)\n URI (any)\n\nF\u00fcr das Paket Template wird zus\u00e4tzlich das Paket YAML ben\u00f6tigt.\nTemplate kann auch direkt \u00fcber die Debian-Quellen installiert werden:\n apt-get install libtemplate-perl\n\nMit den neueren Versionen von Perl sind einige Abh\u00e4ngigkeiten der \u00e4lteren Bugzilla-Versionen aktualisiert worden, womit Bugzilla selbst aber nicht mehr umgehen kann. Es empfiehlt sich also, die Version vor dem Update auf einen neuen Server zu aktualisieren und, wenn von n\u00f6ten, auch ein Perl- und die CPAN-Updates laufen zu lassen.\n\n== Datenbank-Server ==\nAls Datenbank-Server benutzen wir MySQL. Diesen Server installieren wir ganz einfach per apt:\n sudo apt-get install mysql-server mysql-client\n\nFalls die Abfrage w\u00e4hrend der Installation nicht schon kommt, setzen wir dem root-Benutzer in MySQL ein neues Passwort:\n sudo mysqladmin -u root password \"newpwd\"\n\n== Mail-Server ==\nDer Mailserver macht mir immer wieder Sorgen. Beim Update von Dovecot 1 auf Dovecot 2 gab es massive Ver\u00e4nderungen am Konfigurations-Aufbau. Mal sehen, wie es jetzt ist.\nZu erst installieren wir entsprechende Pakete via APT. Wir benutzen Postfix als MTA und Dovecot als IMAP-(u. POP3-)Server. Um mehreren Benutzern verschiedener Domains die M\u00f6glichkeit zu geben, ihre Mail abzurufen und zu empfangen bedienen wir uns virtuellen Domains, die bequem \u00fcbers Web mit dem Postfixadmin verwaltet werden k\u00f6nnen.\n\n sudo apt-get install postfix postfix-mysql\n\nFalls bei der Installation ein Konfigurations-Dialog auftritt, w\u00e4hlen wir hier einfach erstmal \"Keine Konfiguration\" aus.\n\nDann erstellen wir im MySQL-Server eine neue Datenbank \"mail\" und einen neuen Benutzer \"mail\" mit allen Rechten: \n\n root@server:/# mysql -u root -p\n mysql> CREATE DATABASE mail;\n mysql> GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';\n mysql> quit\n\n=== Postfix Admin ===\n\nDann laden wir den [http://sourceforge.net/projects/postfixadmin/ Postfix Admin] von der Webseite herunter und entpacken ihn in ein eingerichtetes Verzeichnis z.B. einer Subdomain (z.B. mail.<domain>)\n\n sudo mkdir /var/www/vhosts/mail.<domain>/htdocs\n cd /var/www/vhosts/mail.<domain>/htdocs\n tar xvfz postfixadmin-X.X.X.tgz\n\nNun passen wir noch den Postfix Admin an unsere Zwecke an. Dazu wechseln wir in das vorhin angelegte Verzeichnis postfixadmin-X.X.X/ und editieren die Standardkonfiguration:\n\n cd ./postfixadmin-X.X.X/\n vi config.inc.php\n\nHier passen wir folgende Parameter an:\n $CONF['postfix_admin_url'] = \u2018'var/www/vhosts/mail.<domain>/postfixadmin/';\n $CONF['database_type'] = 'mysqli';\n $CONF['database_user'] = 'mail';\n $CONF['database_password'] = 'mail';\n $CONF['database_name'] = 'mail';\n(Nat\u00fcrlich an die eigenen Zwecke angepasst)\n\nSind wir mit der Konfiguration fertig, setzen wir den Parameter\n $CONF['configured'] = false;\nauf true und k\u00f6nnen unter der angelegten Domain den Installer starten. (postfixadmin/setup.php)\n\n=== Postfix ===\nDie Konfiguration liegt in /etc/postfix wir wechseln also in das Verzeichnis und bearbeiten die (vielleicht neue) Datei main.cf\n\n root@server:/# cd /etc/postfix\n root@server:/# vi main.cf\n\nDann richten wir die Datei wie folgt ein (denken Sie dran myhostname und myorigin an Ihre eigenen Bed\u00fcrfnisse anzupassen).\nMit Dovecot 2.0 hat sich einiges an der SASL-Authentifizierung ge\u00e4ndert... das ist hier schon eingearbeitet:\n\n smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)\n biff = no\n append_dot_mydomain = no\n #delay_warning_time = 4h\n myhostname = mail.mycompany.com\n myorigin = mycompany.com\n mydestination = localhost\n relayhost =\n mynetworks = 127.0.0.0/8 [::1]/128\n mailbox_size_limit = 0\n recipient_delimiter = +\n inet_interfaces = all\n virtual_mailbox_domains = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf\n virtual_mailbox_base = /var/vmail\n virtual_mailbox_maps = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf\n virtual_alias_maps = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf\n virtual_minimum_uid = 150\n virtual_uid_maps = static:150\n virtual_gid_maps = static:8\n virtual_transport = dovecot\n # SASL Authentication\n smtpd_sasl_type = dovecot\n smtpd_sasl_path = private/auth\n smtpd_sasl_auth_enable = yes\n smtpd_delay_reject = yes\n smtpd_helo_required = yes\n \n smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_rbl_client cbl.abuseat.org, reject_rbl_client ix.dnsbl.manitu.net, reject_rbl_client bl.spamcop.net, reject_rbl_client dul.dnsbl.sorbs.net, reject_rbl_client dnsbl.lern-server.de, reject_unknown_client\n \n smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname\n \n smtpd_sender_restrictions = reject_unknown_sender_domain\n \n smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination\n \n # Zum Aktivieren von SSL die Rauten entfernen\n # smtpd_use_tls = yes\n # smtp_tls_note_starttls_offer = yes\n # smtpd_tls_key_file = /etc/postfix/sslcerts/default/server.key\n # smtpd_tls_cert_file = /etc/postfix/sslcerts/default/server.pem\n # smtpd_tls_loglevel = 1\n # smtpd_tls_received_header = yes\n # smtpd_tls_session_cache_timeout = 3600s\n # # Poodlebleed-Abwehr\n # smtpd_tls_mandatory_protocols=!SSLv2, !SSLv3\n # tls_random_source = dev:/dev/urandom\n # tls_random_prng_update_period = 3600s\n\nDiese Konfiguration legt die Mails in /var/vmail ab und benutzt den Benutzer vmail mit der UID 150 (legen wir gleich an):\n\n sudo useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c \u201cVirtual mailbox\u201d vmail\n sudo mkdir /var/vmail\n sudo chmod 770 /var/vmail/\n sudo chown vmail:mail /var/vmail/\n\nJetzt fangen wir an, die Maps zu konfigurieren. Hiermit bringen wir Postfix bei, wir er die Datenbank nach Mail-Adressen abfragen muss. Daf\u00fcr m\u00fcssen wir einige Dateien anlegen:\n\n sudo touch /etc/postfix/mysql_virtual_alias_maps.cf\n sudo touch /etc/postfix/mysql_virtual_domains_maps.cf\n sudo touch /etc/postfix/mysql_virtual_mailbox_limit_maps.cf\n sudo touch /etc/postfix/mysql_virtual_mailbox_maps.cf\n\n/etc/postfix/mysql_virtual_alias_maps.cf\n user = mail\n password = mail\n hosts = localhost\n dbname = mail\n table = alias\n select_field = goto\n where_field = address\n additional_conditions = and active = '1'\n #query = SELECT goto FROM alias WHERE address='%s' AND active = '1'\n\n/etc/postfix/mysql_virtual_domains_maps.cf\n user = mail\n password = mail\n hosts = localhost\n dbname = mail\n table = domain\n select_field = domain\n where_field = domain\n additional_conditions = and backupmx = '0' and active = '1'\n #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'\n\n/etc/postfix/mysql_virtual_mailbox_limit_maps.cf\n user = mail\n password = mail\n hosts = localhost\n dbname = mail\n table = mailbox\n select_field = quota\n where_field = username\n additional_conditions = and active = '1'\n #query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'\n\n/etc/postfix/mysql_virtual_mailbox_maps.cf\n user = mail\n password = mail\n hosts = localhost\n dbname = mail\n table = mailbox\n select_field = CONCAT(domain,'/',maildir)\n where_field = username\n additional_conditions = and active = '1'\n #query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'\n\nWichtig ist es, hier den Benutzernamen und das Passwort an die MySQL-Einstellungen anzupassen.\n\nAls letzte Postfix-Konfiguration m\u00fcssen wir in der master.cf ganz unten die Pipe f\u00fcr Dovecot einrichten:\n dovecot unix \u2013 n n \u2013 \u2013 pipe flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -d $(recipient)\n submission inet n - - - - smtpd\n  -o smtpd_tls_security_level=encrypt\n  -o smtpd_sasl_auth_enable=yes\n  -o smtpd_sasl_type=dovecot\n  -o smtpd_sasl_path=private/auth\n  -o smtpd_sasl_security_options=noanonymous\n  -o smtpd_sasl_local_domain=$myhostname\n  -o smtpd_client_restrictions=permit_sasl_authenticated,reject\n  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual\n  -o smtpd_sender_restrictions=reject_sender_login_mismatch\n  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject\n\n==== Nachtrag vom 01. Dezember 2014 ====\nNachdem ich Probleme hatte, Mails mit Thunderbird ordentlich abzuliefern und immer wieder auf den Fehler:\n 5.7.1 <mail@domain.tld>: Sender address rejected: not owned by user mail@domain.tld\ngesto\u00dfen bin, ist mir aufgefallen, dass folgende Zeile in der master.cf den Fehler zu verursachen scheint:\n -o smtpd_sender_restrictions=reject_sender_login_mismatch\nSollte der Fehler also auftreten, kommentieren wir diese Zeile einfach aus.\n\n=== Dovecot ===\nNun beginnen wir, den zweiten Teil des Mailservers anzupassen. Hierf\u00fcr installieren wir Dovecot \u00fcber apt:\n sudo apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql\n\nWir k\u00f6nnen hier auch das Paket \"dovecot-pop3d\" weglassen, wenn wir keine POP3-Anmeldung am Server brauchen.\n\nDie Abfrage nach einem SSL-Zertifikat k\u00f6nnen wir entweder mit Ja beantworten. Dann richtet Dovecot ein selbstsigniertes SSL-Zertifikat ein. Falls wir eines haben, sagen wir Nein.\n\nZur Sicherheit sichern wir die originale Konfigurationsdatei via\n sudo mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.org\n\nAnschlie\u00dfend k\u00f6nnen wir mit der Konfiguration von Dovecot unter /etc/dovecot/dovecot.conf beginnen. Diese Konfiguration kann einfach so kopiert werden. Es bringt auch eine SSL-Unterst\u00fctzung mit, die aber von Haus aus deaktiviert ist. Nat\u00fcrlich m\u00fcssen der Hostname und der Postmaster angepasst werden.\n\n auth_mechanisms = plain login\n disable_plaintext_auth = no\n first_valid_uid = 150\n hostname = mail.example.org\n last_valid_uid = 150\n log_timestamp = \"%Y-%m-%d %H:%M:%S \"\n mail_location = maildir:/var/vmail/%d/%u\n passdb {\n   args = /etc/dovecot/dovecot-sql.conf\n   driver = sql\n }\n postmaster_address = xxx@example.com\n service auth {\n   unix_listener /var/spool/postfix/private/auth {\n     group = postfix\n     mode = 0660\n     user = postfix\n   }\n   unix_listener auth-userdb {\n     group = mail\n     mode = 0600\n     user = vmail\n   }\n }\n service imap-login {\n   executable = imap-login\n   inet_listener imap {\n     port = 143\n   }\n }\n service pop3-login {\n   executable = pop3-login\n   inet_listener pop3 {\n     port = 110\n   }\n }\n # Hier kann bei Bedarf die SSL-Verschl\u00fcsselung eingeschaltet werden.\n ssl = no\n #ssl_cert = </etc/ssl/certs/dovecot.pem\n #ssl_key = </etc/ssl/private/dovecot.pem\n userdb {\n   args = /etc/dovecot/dovecot-sql.conf\n   driver = sql\n }\n protocol imap {\n   mail_max_userip_connections = 10\n }\n\nNun m\u00fcssen wir Dovecot nur noch sagen, wie sich Dovecot die Anmelde-Daten beschaffen kann. Daf\u00fcr bearbeiten wir die Datei /etc/dovecot/dovecot-sql.conf:\n\n driver = mysql\n connect = host=localhost dbname=mail user=mail password=mail\n # The new name for MD5 is MD5-CRYPT so you might need to change this depending on version\n default_pass_scheme = MD5\n # Get the mailbox\n user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'\n # Get the password\n password_query  = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'\n # If using client certificates for authentication, comment the above and uncomment the following\n #password_query = SELECT null AS password, '%u' AS user\n\nHier m\u00fcssen wir m\u00f6glicherweise die Felder user= und password= an unsere Zwecke anpassen.\n\nDann setzen wir noch die Rechte f\u00fcr Dovecot:\n sudo chmod 600 /etc/dovecot/*.conf\n sudo chown vmail /etc/dovecot/*.conf\n\nDovecot ist jetzt konfiguriert. Momentan noch ohne SSL, aber das kommt sp\u00e4ter.\n\nNun ist der Mailserver eingerichtet. Wir starten nun die Services neu:\n service postfix restart\n service dovecot restart\n service apache2 restart\n service mysql-server restart\n\nNun k\u00f6nnen wir unter http://mail.example.org/postfixadmin/ einen neuen Benutzer und eine neue Domain anlegen und einige Tests durchf\u00fchren. Damit ist der Mailserver eingerichtet.\n==== Sieve ====\nIch wollte meine Mails gerne mit Hilfe von Sieve filtern. Bisher habe ich die Abwesenheitsbenachrichtigungen immer mit dem Postfixadmin-Virtual-Vacation realisiert, das ist aber unsch\u00f6n. Sieve klingt da sch\u00f6ner und kann auch mehr.\n\nZuerst installieren wir das Paket mit APT:\n apt-get update\n apt-get install dovecot-managesieved\n\nDann geht es an die Einrichtung von Dovecot. Daf\u00fcr bearbeiten wir die Datei /etc/dovecot/dovecot.conf und f\u00fcgen folgende Zeilen an:\n managesieve_notify_capability = mailto\n managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date\n\n # Mail-Filterung mit Sieve\n service managesieve-login { \n  inet_listener sieve {\n   port = 4190\n  }\n }\n \n protocol lda {\n  mail_plugins = $mail_plugins sieve\n }\n \n plugin {\n  sieve = /var/vmail/%d/%n/.dovecot.sieve\n  sieve_dir = /var/vmail/%d/%n/sieve\n }\n\nFalls Sie Ihre Mails mit LMTP zustellen, muss in der Zeile \"protocol lda\" nat\u00fcrlich \"protocol lmtp\" stehen.\n\nNun f\u00fcgen wir sieve noch als Protokoll f\u00fcr Dovecot hinzu. Dazu f\u00fcgen wir an die Zeile\n protocols = imap pop3\nnoch sieve an, also\n protocols = imap pop3 sieve\n\nNach einem Neustart von Dovecot, sollte alles funktionieren. Nun geht es an die Erstellung der Filter. Dazu bringt beispielweise Thunderbird ein Tool mit, allerdings finde ich die L\u00f6sung per Webmailer wesentlich sch\u00f6ner. Passenderweise bringt auch Roundcube von Haus aus eine M\u00f6glichkeit zur Bearbeitung von Sieve-Scripten mit.\n\nZum Aktivieren wechseln wir in das Roundcube-Installationsverzeichnis und bearbeiten die config/config.inc.php. Dort muss lediglich folgendes Array erweitert werden:\n $config['plugins'] = array('');\nwird zu\n $config['plugins'] = array('managesieve');\n\nWichtig ist, dass der Name mit dem Namen des Ordners in plugins/ \u00fcbereinstimmt.\nNach der Installation k\u00f6nnen wir im Roundcube unter Einstellungen/Filter die Filter bearbeiten.\n\n==== Passwort \u00e4ndern mit Roundcube ====\nIch wollte schon lange alle m\u00f6glichen Einstellungen f\u00fcr Benutzer unter ein Dach bringen. Bisher habe ich Benutzern immer einen Link zum Webmailer und einen f\u00fcr den Postfixadmin gegeben, damit sie ihr Passwort \u00e4ndern k\u00f6nnen. Doch Roundcube bringt einige spannende Plugins (s.o. Sieve) mit, die diese Arbeit ebenso \u00fcbernehmen k\u00f6nnen.\n\nF\u00fcr das \u00c4ndern des Passwort bedienen wir uns dem mitgelieferten Plugin password. Zuerst kopieren wir uns die Datei plugins/password/config.inc.php.dist (von der Roundcube-Wurzel aus) in plugins/password/config.inc.php und bearbeiten die folgenden zwei Zeilen:\n $config['password_db_dsn'] = 'mysql://benutzer:passwort@localhost/db';\n $config['password_query'] = 'UPDATE mailbox SET password=%c WHERE username=%u';\n\nDie Zugangsdaten sind in diesem Fall die gleichen, wie bei Postfix und Dovecot, was naheliegt, da wir ja an die Mail-Datenbank heran wollen. In unserem Fall waren das mail, mail und mail. Im password_query tragen wir dann den SQL-Befehl zum Update des Passwortes ein. Dieses l\u00e4sst sich aus dem Datenbank-Aufbau erahnen.\n\nZum Abschluss speichern wir die Datei und binden das Plugin wie oben auch in der config/config.inc.php in dem Array $config['plugins'] ein. Dann k\u00f6nnen wir unser Passwort im Roundcube \u00e4ndern.\n\n=== Mailman ===\nDie Dokumentation der MailMan-Einrichtung folgt sp\u00e4ter.\n==== Nachtrag 01.05.2015 ====\nBeim Erstellen einer neuen Mailingliste \u00fcber die Weboberfl\u00e4che ist immer wieder folgender Fehler in /var/log/mailman/error aufgetreten:\n RuntimeError: command failed: /usr/sbin/postalias /var/lib/mailman/data/aliases (status: 1, Operation not permitted)\nIm Netz ergab sich folgende L\u00f6sung: Die .db-Dateien unter /var/lib/mailman/data m\u00fcssen Gruppen-Schreibrechte besitzen. Damit l\u00e4sst sich auch der folgende Fehler von postmap ausschlie\u00dfen:\n RuntimeError: command failed: /usr/sbin/postmap /var/lib/mailman/data/virtual-mailman (status: 1, Operation not permitted)\n\nDie Gruppen-Rechte werden via\n chmod 0660 /var/lib/mailman/data/*.db\nangepasst."
                    }
                ]
            },
            "29": {
                "pageid": 29,
                "ns": 0,
                "title": "Root-Server mit Ubuntu 16.04",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "Eine neuere Version dieses Artikels steht [[Root-Server_mit_Ubuntu_16.04-Hetzner|hier]] zur Verf\u00fcgung.\n \nDas aktuelle Angebot an Strato-Servern hat sich kaum ge\u00e4ndert. Allerdings bietet Strato nun auch Ubuntu 16.04 als Betriebssystem an. Mal sehen, was sich bei der Installation so alles ge\u00e4ndert hat.\n\nOffensichtlich bietet Strato standardm\u00e4\u00dfig nun keinen Backup-Platz mehr an. Das ist schade, da das \"Managed Backup\" extra kostet. Fr\u00fcher konnte man einfach ein Skript laufen lassen, dass die Platten regelm\u00e4\u00dfig auf einen FTP-Server sichert.\nDer Rechner hat folgende Eckdaten:\n* AMD Opteron 1385 mit 4 x 2,7 GHz (4x 5400.16 Bogomips)\n* 4 GB Arbeitsspeicher\n* 2 x 500 GB im RAID1-Verbund Festplattenspeicher\n\nDen Rechner gibt es drei Monate f\u00fcr 11\u20ac, dann f\u00fcr 22\u20ac im Monat. Einrichtungspreis ist 29\u20ac.\n\n== Smartmontools ==\nF\u00fcr Informationen \u00fcber die Festplatte bieten sich die Smartmontools an:\n sudo apt-get update\n sudo apt-get install smartmontools\n\nMit den Befehl folgenden Befehlen bekommen wir Informationen \u00fcber die Fetplatten sda und sdb:\n sudo smartctl -a /dev/sda\n sudo smartctl -a /dev/sdb\n\nDie Platten sind mit 35705 und 35774 Stunden (~4 Jahre) definitiv nicht neu, weisen aber auch keine fatalen Fehler auf. Mein gebrauchter Root-Server als Serversondermodell lief schon 5 1/2 Jahre.\n\n== Webserver Apache2 ==\nZur Bereitstellung von Webseiten benutzen wir den Apache-Webserver. Da der Server unter mehreren Namen erreichbar sein wird, richten wir VirtualHosts ein.\n\nDie Installation l\u00e4uft denkbar einfach \u00fcber\n\n sudo apt-get update\n sudo apt-get install apache2 apache2-utils apache2-doc php php-mysql php-pear libapache2-mod-php7.0\n\nWir installieren also auch gleich PHP und PHP-PEAR mit. Apache kommt in der Version 2.4.18, bei PHP wird schon die neue Version 7 installiert.\nAn den Konfigurationsdateien hat sich augenscheinlich nicht ver\u00e4ndert. Die Standard-Seite ist aber ganz h\u00fcbsch.\n\nNach der Installation geht es an die eigentliche Konfiguration des Webservers. Ziel ist es, das eine Reihe von Anwendungen (Roundcube, PHPMyAdmin, etc.) nur einmal installiert werden m\u00fcssen und dann allen eingerichteten Domains zur Verf\u00fcgung stehen. Gleichzeitig sollen Dummies, die den Server \u00fcber seine IP oder einen nicht vorhandenen Namen ansprechen, keine Dienste nutzen k\u00f6nnen, sondern lediglich eine Fehler-Seite sehen. Die folgende Konfiguration habe ich in Teilen in ihrer Version vom 12. November 2014 aus dem [[d:Root-Server_mit_OpenSuSE_13.1|Debacher-Wiki]] entnommen (CC-BY-SA). Wir legen also eine Grundkonfiguration f\u00fcr jeden \"dummen\" Aufruf an.\n\nDie VHosts werden sp\u00e4ter unter /var/www/vhosts/ angelegt. Unter /var/www/vhosts/default/htdocs/ findet sich dann die Fehlerseite und unter /var/www/htdocs/ die entsprechenden Anwendungen.\nDie Ordner erstellen wir nun einmal. Dazu kopieren wir auch die Standard-Seite in das entsprechende Verzeichnis:\n mkdir /var/www/htdocs\n mkdir /var/www/vhosts\n mkdir /var/www/vhosts/default\n mv /var/www/html /var/www/vhosts/default/htdocs\n\nWichtig ist, dass wir die Datei vorher einmal sichern:\n\n cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.org\n cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.org\n\n=== /etc/apache2/sites-available/000-default.conf ===\n\n ServerName default\n ServerAdmin webmaster@lukasthiel.de\n \n ServerTokens Major\n \n DocumentRoot /var/www/htdocs/\n \n # Aliase werden einmal zentral gesetzt. Diese Aliase sind von allen Domains aus erreichbar.\n Alias /webmail   /var/www/htdocs/roundcube\n Alias /ftp       /var/www/htdocs/webftp\n \n <Directory \"/var/www/vhosts\">\n        AllowOverride All\n        Options +FollowSymLinks\n        Order allow,deny\n        Allow from all\n        <IfModule mod_php5.c>\n        </IfModule>\n </Directory>\n \n <IfModule mod_userdir.c>\n        UserDir disabled\n </IfModule>\n \n <VirtualHost *:80>\n        ServerName default\n        UseCanonicalName Off\n        DocumentRoot /var/www/vhosts/default/htdocs/\n        ScriptAlias /cgi-bin/ \"/var/www/cgi-bin/\"\n \n        # Blocken der Anfragen an eingerichtete Dienste\n        Alias /webmail      /var/www/htdocs/dummy\n        Alias /pma          /var/www/htdocs/dummy\n        Alias /webftp       /var/www/htdocs/dummy\n        Alias /roundcube    /var/www/htdocs/dummy\n \n        <IfDefine MAILMAN>\n           ScriptAlias     /mailman/       /var/www/htdocs/dummy\n           Alias           /mailmanicons/  /var/www/htdocs/dummy\n           Alias           /pipermail/     /var/www/htdocs/dummy\n        </IfDefine>\n \n        <IfModule mod_ssl.c>\n                SSLEngine off\n        </IfModule>\n        # Deaktivieren des Zugriffs auf die CGI-Skripte von irgendwo\n        <Directory \"/var/www/cgi-bin/\">\n                AllowOverride None\n                Options None\n                Order allow,deny\n                Deny from all   \n        </Directory>\n        <Directory /var/www/vhosts/default/htdocs>\n                AllowOverride All\n                Options None\n                Order allow,deny\n                Allow from all  \n \n                <IfModule mod_php5.c>\n                  php_admin_flag engine on\n                  php_admin_flag safe_mode off\n                </IfModule>\n        </Directory>\n \n </VirtualHost>\n\n=== /etc/apache2/sites-available/default-ssl.conf ===\n <IfModule mod_ssl.c>\n <VirtualHost _default_:443>\n \tServerAdmin webmaster@localhost\n  \n \tDocumentRoot /var/www/htdocs\n \t<Directory /var/www/>\n \t\tOptions -Indexes +FollowSymLinks +MultiViews\n \t\tAllowOverride None\n \t\tOrder allow,deny\n \t\tallow from all\n \t</Directory>\n  \n \tScriptAlias /cgi-bin/ /usr/lib/cgi-bin/\n \t<Directory \"/usr/lib/cgi-bin\">\n \t\tAllowOverride None\n \t\tOptions +ExecCGI -MultiViews +SymLinksIfOwnerMatch\n \t\tOrder allow,deny\n \t\tAllow from all\n \t</Directory>\n  \n \tErrorLog ${APACHE_LOG_DIR}/error.log\n  \n \t# Possible values include: debug, info, notice, warn, error, crit,\n \t# alert, emerg.\n \tLogLevel warn\n  \n \tCustomLog ${APACHE_LOG_DIR}/ssl_access.log combined  \n \n        # Blocken der Anfragen an eingerichtete Dienste\n        Alias /webmail      /var/www/htdocs/dummy\n        Alias /pma          /var/www/htdocs/dummy\n        Alias /webftp       /var/www/htdocs/dummy\n        Alias /roundcube    /var/www/htdocs/dummy\n \n        <IfDefine MAILMAN>\n           ScriptAlias     /mailman/       /var/www/htdocs/dummy\n           Alias           /mailmanicons/  /var/www/htdocs/dummy\n           Alias           /pipermail/     /var/www/htdocs/dummy\n        </IfDefine>\n \n \tAlias /doc/ \"/usr/share/doc/\"\n \t<Directory \"/usr/share/doc/\">\n \t\tOptions Indexes MultiViews FollowSymLinks\n \t\tAllowOverride None\n \t\tOrder deny,allow\n \t\tDeny from all\n \t\tAllow from 127.0.0.0/255.0.0.0 ::1/128\n \t</Directory>\n  \tSSLEngine on\n  \tSSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem\n  \tSSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key  \n \tSSLProtocol All -SSLv2 -SSLv3\n \tSSLHonorCipherOrder On\n \tSSLCompression off\n        # Add six earth month HSTS header for all users...\n        Header add Strict-Transport-Security \"max-age=15768000\"\n        SSLCipherSuite 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\n \t<FilesMatch \"\\.(cgi|shtml|phtml|php)$\">\n \t\tSSLOptions +StdEnvVars\n \t</FilesMatch>\n \t<Directory /usr/lib/cgi-bin>\n \t\tSSLOptions +StdEnvVars\n \t</Directory>\n  \n \tBrowserMatch \"MSIE [2-6]\" \\\n \t\tnokeepalive ssl-unclean-shutdown \\\n \t\tdowngrade-1.0 force-response-1.0\n \t# MSIE 7 and newer should be able to use keepalive\n \t BrowserMatch \"MSIE [17-9]\" ssl-unclean-shutdown\n \n </VirtualHost>\n </IfModule>\n\nEntscheidend ist, dass die angegebenen Pfade tats\u00e4chlich existieren, sonst gibt Apache beim n\u00e4chsten Start eine Fehlermeldung aus. Sollten die Verzeichnisrechte nicht richtig gesetzt sein, kann das mittels\n sudo chown -R www-data.www-data /var/www/\n sudo chmod -R 0770 /var/www/\nnachgeholt werden.\n\nNun geht es an die Konfiguration der Strato-Adresse. Ruft man den Server \u00fcber seinen hXXXXXXX.stratoserver.net auf, kann man so beeinflussen, was angezeigt wird.\n\n=== /etc/apache2/sites-available/stratoserver.net.conf ===\n <VirtualHost *:80>\n    ServerName h1234xyz.stratoserver.net\n    UseCanonicalName Off\n    DocumentRoot /var/www/vhosts/default/htdocs\n \n    CustomLog  /var/log/apache2/access.log combined\n    ErrorLog   /var/log/apache2/error.log\n \n    ScriptAlias /cgi-bin/ \"/var/www/cgi-bin/\"\n    # Soll PHPMyAdmin verf\u00fcgbar sein, kann der Pfad hier aktiviert werden. \n #   Alias /pma /var/www/htdocs/phpMyAdmin\n    Alias  /webstat /var/www/vhosts/default/webstat\n    <IfModule mod_ssl.c>\n        SSLEngine off\n    </IfModule>\n \n    <Directory \"/var/www/cgi-bin/\">\n        AllowOverride None\n        Options None\n        Order allow,deny\n        Allow from all\n    </Directory>\n \n    <Directory /var/www/vhosts/default/htdocs>\n        AllowOverride All\n        Options None\n        Order allow,deny\n        Allow from all \n \n        <IfModule mod_php5.c>\n          php_admin_flag engine on\n          php_admin_flag safe_mode off\n #           php_admin_value include_path \"/var/www/htdocs/horde/pear:/var/www/htdocs:./\"\n #           php_admin_value open_basedir \"/var/www/htdocs:/tmp\"\n        </IfModule>\n    </Directory>\n \n </VirtualHost>\n \n <IfModule mod_ssl.c>\n \n <VirtualHost *:443 >\n        ServerName h1234xyz.stratoserver.net\n        UseCanonicalName Off  \n        DocumentRoot /var/www/vhosts/default/httpsdocs \n \n        CustomLog  /var/log/apache2/access.log combined\n        ErrorLog   /var/log/apache2/error.log \n \n        ScriptAlias /cgi-bin/ \"/var/www/cgi-bin/\"\n #       Alias /pma /var/www/htdocs/phpMyAdmin\n #       Alias /webftp /var/www/htdocs/webftp   \n \n        SSLEngine on\n \n        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNUL\n        SSLCertificateFile /var/www/vhosts/default/ssl/server.crt\n        SSLCertificateKeyFile /var/www/vhosts/default/ssl/server.key\n        SSLProtocol All -SSLv2 -SSLv3\n        SSLHonorCipherOrder On\n        SSLCompression off\n        # Add six earth month HSTS header for all users...\n        Header add Strict-Transport-Security \"max-age=15768000\"\n        SSLCipherSuite 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\n \n        <Directory \"/var/www/cgi-bin/\">\n                AllowOverride None\n                Options None\n                Order allow,deny\n                Allow from all  \n        </Directory>\n \n        <Directory /var/www/vhosts/default/httpsdocs>\n                SSLRequireSSL\n                AllowOverride None\n                Options None\n                Order allow,deny\n                Allow from all  \n       </Directory>\n  </VirtualHost>\n \n </IfModule>\n\nDamit ist die Grundkonfiguration von Apache abgeschlossen. F\u00fcr jeden neuen VirtualHost legen wir ab dann eine Datei als /etc/apache2/sites-avaiable/<domain>.conf an.\n\nWichtig ist: Der Ubuntu-Apache unterscheidet zwischen aktivierten und verf\u00fcgbaren Konfigurationen. Wir m\u00fcssen also jede Datei noch einmal extra unter /etc/apache2/sites-enabled/ einbinden. Dazu einfach einen symbolischen Link erstellen:\n sudo ln -s /etc/apache2/sites-available/<domain>.conf /etc/apache2/sites-enabled/<domain>.conf\nDas muss selbstverst\u00e4ndlich auch mit der Standardkonfiguration gemacht werden, sofern das nicht schon standardm\u00e4\u00dfig passiert ist.\n\nEine Beispiel-Konfiguration f\u00fcr VirtualHosts findet sich ebenfalls im [[d:Einzelheiten_zur_Apache-Konfiguration|Debacher-Wiki]] (CC-by-sa). Dabei muss <dummy> mit der Domain ersetzt werden (in VI durch :%s/<dummy>/example.org. Die Verzeichnisse werden dann unterhalb von /var/www/vhosts/<dummy> angelegt. Hier ist es sinnig, nach Seiten mit aktiviertem SSL und Seiten ohne SSL zu unterscheiden. Wichtig ist, dass alle Konfigurationsdateien mit .conf enden, da sie sonst von Apache ignoriert werden.\n\n=== /etc/apache/sites-available/dummy.conf ===\n\n <VirtualHost *:80>\n  ServerName   www.<dummy>:80\n  ServerAlias <dummy>\n  UseCanonicalName Off\n  DocumentRoot /var/www/vhosts/<dummy>/htdocs\n \n  CustomLog  /var/log/apache2/<dummy>.access.log combined\n  ErrorLog   /var/log/apache2/<dummy>.error.log\n \n  CustomLog /var/log/apache2/vhosts.access.log vhost_combined\n \n  ScriptAlias  /cgi-bin/ /var/www/vhosts/<dummy>/cgi-bin/\n  Alias  /webstat /var/www/vhosts/<dummy>/webstat\n \n  <IfModule mod_ssl.c>\n        SSLEngine off\n  </IfModule>\n \n  <Directory /var/www/vhosts/<dummy>/htdocs>\n \n    <IfModule mod_php5.c>\n        php_admin_flag engine on\n        php_admin_flag safe_mode off\n        php_admin_value include_path \"/var/www/vhosts/<dummy>/htdocs:.:/tmp:./:/usr/share/php5/PEAR/\"\n        php_admin_value open_basedir \"/var/www/vhosts/<dummy>/htdocs:/tmp:.:/usr/share/php5/PEAR/\"\n \n    </IfModule>\n \n    <IfModule mod_python.c>\n        <Files ~ (\\.py$)>\n                SetHandler python-program\n                PythonHandler   mod_python.cgihandler\n        </Files>\n    </IfModule>\n \n    Options -Includes +ExecCGI\n  </Directory>\n  <Directory \"/var/www/vhosts/<dummy>/cgi-bin\">\n       AllowOverride None\n       Options +ExecCGI -Includes\n       Order allow,deny\n       Allow from all  \n  </Directory>\n \n </VirtualHost>\n\n=== /etc/apache/sites-available/dummy-ssl.conf ===\n <IfModule mod_ssl.c>\n \n <VirtualHost *:443>\n  ServerName   www.<dummy>:443\n  ServerAlias <dummy>\n  UseCanonicalName Off\n  DocumentRoot /var/www/vhosts/<dummy>/htdocs\n \n  CustomLog  /var/log/apache2/<dummy>.access.log combined\n  ErrorLog   /var/log/apache2/<dummy>.error.log\n  \n  ScriptAlias  /cgi-bin/ /var/www/vhosts/<dummy>/cgi-bin/\n  Alias  /webstat /var/www/vhosts/<dummy>/webstat\n \n  SSLEngine on\n \n  <Directory /var/www/vhosts/<dummy>/htdocs>\n \n    <IfModule mod_php5.c>\n        php_admin_flag engine on\n        php_admin_flag safe_mode off\n        php_admin_value include_path \"/var/www/vhosts/<dummy>/htdocs:.:/tmp:./:/usr/share/php5/PEAR/\"\n        php_admin_value open_basedir \"/var/www/vhosts/<dummy>/htdocs:/tmp:.:/usr/share/php5/PEAR/\"\n    </IfModule>\n \n    <IfModule mod_python.c>\n        <Files ~ (\\.py$)>\n                SetHandler python-program\n                PythonHandler   mod_python.cgihandler\n        </Files>\n    </IfModule>\n \n    Options -Includes +ExecCGI\n  </Directory>\n \n  <Directory \"/var/www/vhosts/<dummy>/cgi-bin\">\n       AllowOverride None\n       Options +ExecCGI -Includes\n       Order allow,deny\n       Allow from all\n  </Directory>\n   SSLProtocol all -SSLv2\n   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM\n   SSLHonorCipherOrder On\n   SSLCompression off\n \n   # Add six earth month HSTS header for all users...\n   Header add Strict-Transport-Security \"max-age=15768000\"\n   SSLCipherSuite 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\n   SSLCertificateFile /etc/letsencrypt/live/<dummy>/cert.pem\n   SSLCertificateKeyFile /etc/letsencrypt/live/<dummy>/privkey.pem\n   SSLCertificateChainFile /etc/letsencrypt/live/<dummy>/chain.pem\n   SetEnvIf User-Agent \".*MSIE.*\" nokeepalive ssl-unclean-shutdown\n   CustomLog /var/log/apache2/<dummy>.ssl.log  \"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \\\"%r\\\" %b\"\n \n </VirtualHost>\n \n </IfModule>\n\nDamit ist die Einrichtung des Webservers abgeschlossen.\n\n== Datenbank-Server ==\nAls Datenbank-Server benutzen wir MySQL. Diesen Server installieren wir ganz einfach per apt:\n sudo apt-get install mysql-server mysql-client\n\nFalls die Abfrage w\u00e4hrend der Installation nicht schon kommt, setzen wir dem root-Benutzer in MySQL ein neues Passwort:\n sudo mysqladmin -u root password \"newpwd\"\n\n== Mailserver ==\nDie Einrichtung des Mailservers ist immer wieder spannend, da bei Updates immer wieder kleine \u00c4nderungen durchgef\u00fchrt werden. Wir verwenden Postfix als MTA und Dovecot als IMAP-Server.\nZus\u00e4tzlich arbeiten wir mit Virtuellen Hosts, damit ein Mailserver f\u00fcr mehrere Domains verantwortlich sein kann. Die Domains und ihre Mail-Accounts k\u00f6nnen dann \u00fcber den Postfixadmin bequem im Netz verwaltet werden.\n\nZun\u00e4chst installieren wir Postfix und dessen Anbindung an MySQL:\n sudo apt-get install postfix postfix-mysql\n\nFalls bei der Installation ein Konfigurations-Dialog auftritt, w\u00e4hlen wir hier einfach erstmal \"Keine Konfiguration\" aus.\n\nDann erstellen wir im MySQL-Server eine neue Datenbank \"mail\" und einen neuen Benutzer \"mail\" mit allen Rechten:\n root@server:/# mysql -u root -p\n mysql> CREATE DATABASE mail;\n mysql> GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';\n mysql> quit\n\nDie Konfiguration liegt in /etc/postfix wir wechseln also in das Verzeichnis und bearbeiten die (vielleicht neue) Datei main.cf\n\n root@server:/# cd /etc/postfix\n root@server:/# vi main.cf\n\nDann richten wir die Datei wie folgt ein (denken Sie dran myhostname und myorigin an Ihre eigenen Bed\u00fcrfnisse anzupassen).\nMit Dovecot 2.0 hat sich einiges an der SASL-Authentifizierung ge\u00e4ndert; das ist hier schon eingearbeitet:\n\n smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)\n biff = no\n append_dot_mydomain = no\n #delay_warning_time = 4h\n myhostname = mail.example.com\n myorigin = /etc/mailname\n mydestination = mydestination = $myhostname, mail.example.com, h23XXXXX.stratoserver.net, localhost.stratoserver.net, localhost\n relayhost =\n mynetworks = 127.0.0.0/8 [::1]/128\n mailbox_size_limit = 0\n recipient_delimiter = +\n inet_interfaces = all\n inet_protocols = ipv4\n alias_maps = hash:/etc/aliases\n virtual_mailbox_domains = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf\n virtual_mailbox_base = /var/vmail\n virtual_mailbox_maps = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf\n virtual_alias_maps = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf\n virtual_minimum_uid = 150\n virtual_uid_maps = static:150\n virtual_gid_maps = static:8\n virtual_transport = dovecot\n smtpd_sasl_type = dovecot\n smtpd_sasl_path = private/auth\n smtpd_sasl_auth_enable = yes\n smtpd_delay_reject = yes\n smtpd_helo_required = yes\n \n smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_rbl_client cbl.abuseat.org, reject_rbl_client ix.dnsbl.manitu.net, reject_rbl_client bl.spamcop.net, reject_rbl_client dul.dnsbl.sorbs.net, reject_unknown_client\n \n smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname\n \n smtpd_sender_restrictions = reject_unknown_sender_domain\n \n smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination \n \n \n # tls config\n #smtpd_use_tls = yes\n #smtp_tls_note_starttls_offer = yes\n #smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem\n #smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem\n #smtpd_tls_loglevel = 1\n #smtpd_tls_received_header = yes\n #smtpd_tls_session_cache_timeout = 3600s\n #smtpd_tls_mandatory_protocols=!SSLv2, !SSLv3\n #tls_random_source = dev:/dev/urandom\n #tls_random_prng_update_period = 3600s\n # used for virtual vacation\n # transport_maps = hash:/etc/postfix/transport\n #dovecot_destination_recipient_limit = 1\n\nDiese Konfiguration legt die Mails in /var/vmail ab und benutzt den Benutzer vmail mit der UID 150 (legen wir gleich an):\n\n sudo useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c 'Virtual mailbox' vmail\n sudo mkdir /var/vmail\n sudo chmod 770 /var/vmail/\n sudo chown vmail:mail /var/vmail/\n\nJetzt fangen wir an, die Maps zu konfigurieren. Hiermit bringen wir Postfix bei, wir er die Datenbank nach Mail-Adressen abfragen muss. Daf\u00fcr m\u00fcssen wir einige Dateien anlegen:\n\n sudo touch /etc/postfix/mysql_virtual_alias_maps.cf\n sudo touch /etc/postfix/mysql_virtual_domains_maps.cf\n sudo touch /etc/postfix/mysql_virtual_mailbox_limit_maps.cf\n sudo touch /etc/postfix/mysql_virtual_mailbox_maps.cf\n\n/etc/postfix/mysql_virtual_alias_maps.cf\n user = mail\n password = mail\n hosts = localhost\n dbname = mail\n table = alias\n select_field = goto\n where_field = address\n additional_conditions = and active = '1'\n #query = SELECT goto FROM alias WHERE address='%s' AND active = '1'\n\n/etc/postfix/mysql_virtual_domains_maps.cf\n user = mail\n password = mail\n hosts = localhost\n dbname = mail\n table = domain\n select_field = domain\n where_field = domain\n additional_conditions = and backupmx = '0' and active = '1'\n #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'\n\n/etc/postfix/mysql_virtual_mailbox_limit_maps.cf\n user = mail\n password = mail\n hosts = localhost\n dbname = mail\n table = mailbox\n select_field = quota\n where_field = username\n additional_conditions = and active = '1'\n #query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'\n\n/etc/postfix/mysql_virtual_mailbox_maps.cf\n user = mail\n password = mail\n hosts = localhost\n dbname = mail\n table = mailbox\n select_field = CONCAT(domain,'/',maildir)\n where_field = username\n additional_conditions = and active = '1'\n #query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'\n\nWichtig ist es, hier den Benutzernamen und das Passwort an die MySQL-Einstellungen anzupassen.\n\nAls letzte Postfix-Konfiguration m\u00fcssen wir in der master.cf ganz unten die Pipe f\u00fcr Dovecot einrichten:\n dovecot unix - n n - - pipe flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -d $(recipient)\n submission inet n - - - - smtpd\n  -o smtpd_tls_security_level=encrypt\n  -o smtpd_sasl_auth_enable=yes\n  -o smtpd_sasl_type=dovecot\n  -o smtpd_sasl_path=private/auth\n  -o smtpd_sasl_security_options=noanonymous\n  -o smtpd_sasl_local_domain=$myhostname\n  -o smtpd_client_restrictions=permit_sasl_authenticated,reject\n  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual\n  -o smtpd_sender_restrictions=reject_sender_login_mismatch\n  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject\n\nNachdem ich Probleme hatte, Mails mit Thunderbird ordentlich abzuliefern und immer wieder auf den Fehler:\n 5.7.1 <mail@domain.tld>: Sender address rejected: not owned by user mail@domain.tld\ngesto\u00dfen bin, ist mir aufgefallen, dass folgende Zeile in der master.cf den Fehler zu verursachen scheint:\n -o smtpd_sender_restrictions=reject_sender_login_mismatch\nSollte der Fehler also auftreten, kommentieren wir diese Zeile einfach aus.\n\nGegen die Fehlermeldung, dass die /etc/aliases nicht gefunden wurde, f\u00fchren wir einmal\n sudo newaliases\naus.\n\n=== Dovecot ===\nNun beginnen wir, den zweiten Teil des Mailservers anzupassen. Hierf\u00fcr installieren wir Dovecot \u00fcber apt:\n sudo apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql\n\nWir k\u00f6nnen hier auch das Paket \"dovecot-pop3d\" weglassen, wenn wir keine POP3-Anmeldung am Server brauchen.\n\nDie Abfrage nach einem SSL-Zertifikat k\u00f6nnen wir entweder mit Ja beantworten. Dann richtet Dovecot ein selbstsigniertes SSL-Zertifikat ein. Falls wir eines haben, sagen wir Nein.\n\nZur Sicherheit sichern wir die originale Konfigurationsdatei via\n sudo mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.org\n\nAnschlie\u00dfend k\u00f6nnen wir mit der Konfiguration von Dovecot unter /etc/dovecot/dovecot.conf beginnen. Diese Konfiguration kann einfach so kopiert werden. Es bringt auch eine SSL-Unterst\u00fctzung mit, die aber von Haus aus deaktiviert ist. Nat\u00fcrlich m\u00fcssen der Hostname und der Postmaster angepasst werden.\n\n auth_mechanisms = plain login\n disable_plaintext_auth = no\n first_valid_uid = 150\n hostname = mail.example.org\n last_valid_uid = 150\n log_timestamp = \"%Y-%m-%d %H:%M:%S \"\n mail_location = maildir:/var/vmail/%d/%u\n passdb {\n   args = /etc/dovecot/dovecot-sql.conf\n   driver = sql\n }\n postmaster_address = xxx@example.com\n service auth {\n   unix_listener /var/spool/postfix/private/auth {\n     group = postfix\n     mode = 0660\n     user = postfix\n   }\n   unix_listener auth-userdb {\n     group = mail\n     mode = 0600\n     user = vmail\n   }\n }\n service imap-login {\n   executable = imap-login\n   inet_listener imap {\n     port = 143\n   }\n }\n service pop3-login {\n   executable = pop3-login\n   inet_listener pop3 {\n     port = 110\n   }\n }\n # Hier kann bei Bedarf die SSL-Verschl\u00fcsselung eingeschaltet werden.\n ssl = no\n #ssl_cert = </etc/letsencrypt/live/example.org/fullchain.pem\n #ssl_key = </etc/letsencrypt/live/example.org/privkey.pem\n userdb {\n   args = /etc/dovecot/dovecot-sql.conf\n   driver = sql\n }\n protocol imap {\n   mail_max_userip_connections = 10\n }\n protocols = imap pop3\n\nNun m\u00fcssen wir Dovecot nur noch sagen, wie sich Dovecot die Anmelde-Daten beschaffen kann. Daf\u00fcr bearbeiten wir die Datei /etc/dovecot/dovecot-sql.conf:\n\n driver = mysql\n connect = host=localhost dbname=mail user=mail password=mail\n # The new name for MD5 is MD5-CRYPT so you might need to change this depending on version\n default_pass_scheme = MD5\n # Get the mailbox\n user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'\n # Get the password\n password_query  = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'\n # If using client certificates for authentication, comment the above and uncomment the following\n #password_query = SELECT null AS password, '%u' AS user\n\nHier m\u00fcssen wir m\u00f6glicherweise die Felder user= und password= an unsere Zwecke anpassen.\n\nDann setzen wir noch die Rechte f\u00fcr Dovecot:\n sudo chmod 600 /etc/dovecot/*.conf\n sudo chown vmail /etc/dovecot/*.conf\n\nDovecot ist jetzt konfiguriert. Momentan noch ohne SSL, aber das kommt sp\u00e4ter.\n\n=== Postfix Admin ===\nZum Anlegen der Domains und Postf\u00e4cher nutzen wir dden Postfixadmin, der passenderweise auch gleich das Datenbank-Schema f\u00fcr die gerade erstellte Konfiguration mitbringt.\n\nWir laden den [http://sourceforge.net/projects/postfixadmin/ PostfixAdmin] von der Webseite herunter und entpacken ihn in ein eingerichtetes Verzeichnis z.B. einer Subdomain (z.B. mail.<domain>)\n\n sudo mkdir /var/www/vhosts/mail.<domain>/htdocs\n cd /var/www/vhosts/mail.<domain>/htdocs\n wget -O pfa.tgz https://sourceforge.net/projects/postfixadmin/files/latest/download\n tar xfz pfa.tgz\n\nNun passen wir noch den Postfix Admin an unsere Zwecke an. Dazu wechseln wir in das vorhin angelegte Verzeichnis postfixadmin-X.X.X/ und editieren die Standardkonfiguration:\n\n cd ./postfixadmin-X.X.X/\n vi config.inc.php\n\nHier passen wir folgende Parameter an:\n $CONF['postfix_admin_url'] = \u2018'var/www/vhosts/mail.<domain>/postfixadmin/';\n $CONF['database_type'] = 'mysqli';\n $CONF['database_user'] = 'mail';\n $CONF['database_password'] = 'mail';\n $CONF['database_name'] = 'mail';\n(Nat\u00fcrlich an die eigenen Zwecke angepasst)\n\nSind wir mit der Konfiguration fertig, setzen wir den Parameter\n $CONF['configured'] = false;\nauf true und k\u00f6nnen unter der angelegten Domain den Installer starten. (postfixadmin/setup.php)\n\nHier m\u00fcssen zwei PHP-Pakete nachinstalliert werden:\n sudo apt-get install php-mbstring php-imap\nDanach einmal Apache neu laden:\n sudo service apache2 reload\n\nIst alles installiert, k\u00f6nnen wir einen Super-Admin einrichten, der alle Domains, Accounts und Administrator-Account im Postfixadmin konfigurieren kann.\n\nNun ist der Mailserver eingerichtet. Wir starten nun die Services neu:\n\n service postfix restart\n service dovecot restart\n service apache2 restart\n service mysql restart\n\nNun k\u00f6nnen wir unter http://mail.example.org/postfixadmin/ einen neuen Benutzer und eine neue Domain anlegen und einige Tests durchf\u00fchren. Damit ist der Mailserver eingerichtet. \n\n== DNS Reverse ==\nEs empfiehlt sich, bei Strato einen Reverse DNS-Eintrag zu hinterlegen. Die DNS-Abfrage der IP-Adresse l\u00e4uft dann nicht mehr auf den hXXXXXXX.stratoserver.net, sondern \u00fcber einen eigenen DNS-Namen. Wichtig ist, dass der Name nat\u00fcrlich auch wieder in die IP-Adresse aufl\u00f6st.\n\nIm Postfix und im Dovecot stellen wir dann den Hostnamen um. Vorteil ist, dass der Server dann eine h\u00f6here Reputation bekommt, als unter der stratoserver.net-Domain. Zus\u00e4tzlich klingt das nat\u00fcrlich auch professioneller.\n\n\n== Nachtrag vom 19.10.2017 ==\nUnsere Uni-Server erfordern eine verschl\u00fcsselte Verbindung zwischen Mailservern. Die o.g. Konfiguration nutzt zwar TLS f\u00fcr die Verbindung zwischen Client und Server, aber nicht f\u00fcr den Transport der Mails \u00fcber den eigenen Server hinaus. Hierf\u00fcr sind folgende Erg\u00e4nzungen in der main.cf n\u00f6tig\n smtpd_tls_security_level = may\n smtp_tls_security_level = may\nDer Modus \"may\" bedeutet hier \"Opportunistic TLS\", d.h., dass eine TLS-Verbindung genutzt wird, sofern beide Server sich damit verstehen. Bietet der gegen\u00fcbersprechende Server kein TLS an, wird auch keins genutzt. [http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps Postfix-Doku]"
                    }
                ]
            }
        }
    }
}