Apache

Ansprechpartner

k3t
Mathias

1. TODO

2. Installation

Installiert wird das Paket apache2.

3. Firewall

Die Details der Firewall-Konfiguration sind auf einer separaten Seite beschrieben.

4. Module

Modul

Zweck

Dokumentation

expires (optional)

Wiki: Ablaufdatum für statische Inhalte setzen (Performance)

https://httpd.apache.org/docs/2.4/mod/mod_expires.html

headers

HTTP-Header für Serverantwort setzen (Sicherheit)

https://httpd.apache.org/docs/2.4/mod/mod_headers.html

macro

Makro-Unterstützung in den Konfigurationsdateien

https://httpd.apache.org/docs/2.4/mod/mod_macro.html

ssl

HTTPS-Verbindungen aktivieren

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html

wsgi (optional)

Wiki: WSGI-Schnittstelle einsetzen; ersetzt CGI

http://code.google.com/p/modwsgi

Bitte beachten:

Bei aktiviertem wsgi Modul reicht ein Reload von Apache nicht aus. Wegen der zusätzliche Daemon-Prozesse muss es ein Restart sein!

5. X.509-Zertifikat und TLS-Konfiguration

Für TLS wird das Modul mod_ssl eingesetzt. Alle VirtualHosts verwenden dieselbe Konfiguration von mod_ssl. Details siehe unten bei den Sites-Konfigurationen. Die Auswahl und Reihenfolge der cipher suites wird auf einer separaten Seite erläutert.

Das Zertifikat für

wurde von Let's Encrypt beglaubigt.

Das Wurzelzertifikat ist in den einschlägigen CA Certificate Stores integriert, z. B. bei Mozilla CA Certificate Store, und das Zwischenzertifikat liefern wir mit Apache selbst aus.

Das Server-Zertifikat und der dazugehörige Schlüssel liegen unter /etc/ssl.

Die Alternative CAcert setzen wir nicht mehr ein.

6. /etc/apache2/apache2.conf

Die Hauptkonfigurationsdatei /etc/apache2/apache2.conf bleibt beinahe unverändert. Durch den mit der Apache-Version 2.4 neu eingeführten Mechanismus mit Konfigurationsdateien in /etc/apache2/conf-{available,enabled} können wir die für die LUG IN spezifischen Änderung und Anpassungen teilweise in die Datei lug-in.conf auslagern.

Konfigurationsabschnitte, bei denen es auf die Reihenfolge der Verarbeitung durch Apache ankommt, müssen trotzdem in apache2.conf bleiben:

Zum Aktivieren macht man Folgendes:

7. /etc/apache2/conf-available/lug-in.conf

Folgende Anpassungen sollen dazu führen das der Apache weniger geschwätzig ist:

ServerSignature off
ServerTokens Prod

Quellen bzw. Dokumentation:

Diese Einstellungen haben zur Folge, dass die security.conf deaktiviert werden muss, da es sonst Probleme mit der Reihenfolge der Variablendefinitionen geben könnte.

$ a2dismod security.conf

Damit wir dadurch nicht zuviel "verlieren" passen wir die lug-in.conf weiter an.

<Macro TLSConfigurationBlock>
    SSLEngine On

    SSLCertificateFile /etc/ssl/le_lug-in.de.crt
    SSLCertificateKeyFile /etc/ssl/le_lug-in.de_key.pem

    SSLCompression off
    SSLHonorCipherOrder on
    SSLProtocol All -SSLv2 -SSLv3

    SSLCipherSuite EDH+AESGCM:EDH+AES256+SHA256:EDH+AES128+SHA256:EDH+AES256:EDH+AES128:EDH+CAMELLIA256:EDH+CAMELLIA:EECDH+AESGCM:EECDH+AES256+SHA384:EECDH+AES128+SHA256:EECDH+AES256+SHA:EECDH+AES128+SHA:!ECDSA:!aNULL:!aDSS:!eNULL:!3DES:!DES:!MD5:!PSK:!RC4:!SEED:!SRP

    # HSTS (31536000 seconds = 365 days)
    <IfModule headers_module>
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    </IfModule>
</Macro>

Die Konfigurationsdatei wird aktiviert.

$ a2enmod lug-in.conf

8. /etc/apache2/envvars

Die Datei enthält einige Umgebungsvariablen für Apache. Für das MoinMoin-Wiki, genauer, für dessen CGI-/WSGI-Prozesse, wird die Variable MOINLOGGINGCONF benötigt. Die Variable kann nicht per SetEnv-Anweisung gesetzt werden, da sie dann nicht an die Python-Kind-Prozesse durchgereicht wird!

Die bestehenden Umgebungsvariablen werden nicht verändert. Wir ergänzen nur:

# Moinmoin wiki logging configuration; for details see
# /usr/share/pyshared/MoinMoin/log.py
export MOINLOGGINGCONF=/etc/moin/logging.conf

9. Sites

Die Konfiguration für Sites befinden sich in /etc/apache2/sites-available. Hier sollten die einzelnen Konfigurationsdateien dokumentiert werden.

Auch hier gilt, dass nach jeder Änderung mit service apache2 reload die Konfiguration neu geladen bzw. mit service apache2 restart der Webserver neu gestartet werden muss.

9.1. default.conf

Die Apache Standardseite ist deaktiviert.

$ a2dissite default

9.2. lug-in-wiki.conf (MoinMoin)

Ansprechpartner

k3t
Mathias

Diese Site stellt das MoinMoin Wiki bereit.

Das Wiki wird im Normalfall über ein Python-Skript /usr/share/moin/server/moin.cgi per CGI angesprochen. Dies ist nicht besonders schnell, weil bei jedem Zugriff auf das Wiki erst die Python-Instanz geladen und initialisiert werden muss. Deswegen ersetzen wir den CGI-Anschluss durch einen WSGI-Anschluss, so dass immer eine gewisse Anzahl von Python-Instanzen im Speicher bereit stehen, um Anfragen sofort bearbeiten zu können.

Dies erledigt das Apache-Modul wsgi, das über das Paket libapache2-mod-wsgi installiert wird. Das alternative Paket python-flup wird nicht benötigt.

Wir erstellen die Konfiguration so, dass immer ein Fallback auf CGI möglich ist, falls wider Erwarten irgendwelche Probleme mit WSGI auftreten sollten. Das ist dann zwar langsam, funktioniert aber. In diesem Fall muss lediglich mit

$ a2dismod wsgi

das Modul wsgi deaktiviert und Apache neu gestartet werden.

Die Konfiguration in /etc/apache2/sites-available/lug-in-wiki.conf sieht folgendermaßen aus:

<Directory "/usr/share/fckeditor">
    Options None
    AllowOverride None

    <IfModule expires_module>
        ExpiresActive On
        ExpiresDefault "access plus 4 weeks"
    </IfModule>
</Directory>

<Directory "/usr/share/moin/htdocs">
    Options -Indexes -FollowSymlinks
    AllowOverride None

    <IfModule expires_module>
        ExpiresActive On
        ExpiresDefault "access plus 4 weeks"
    </IfModule>
</Directory>

<Directory "/var/www/lug-in-wiki">
    Options -Indexes -FollowSymlinks
    AllowOverride None

    <IfModule expires_module>
        ExpiresActive On
        ExpiresDefault "access plus 4 weeks"
    </IfModule>
</Directory>

<IfModule wsgi_module>
    WSGIRestrictEmbedded On
</IfModule>

<VirtualHost *:80>
    ServerName wiki.lug-in.de
    ServerAdmin admin@lug-in.de

    Use AccessErrorLogging lug-in-wiki
    Use AliasForAcmeWellKnownAddress

    DocumentRoot /var/www/lug-in-wiki

    <If "%{REQUEST_URI} !~ m#^/\.well-known(/|$)#">
        RedirectMatch permanent "(.*)$" "https://wiki.lug-in.de$1"
    </If>
</VirtualHost>

<VirtualHost *:443>
    ServerName wiki.lug-in.de
    ServerAdmin admin@lug-in.de

    Use AccessErrorLogging lug-in-wiki_ssl
    Use TLSConfigurationBlock

    DocumentRoot /var/www/lug-in-wiki

    #Alias /moin_static198/applets/FCKeditor/ "/usr/share/fckeditor/"
    #Alias /moin_static198/ "/usr/share/moin/htdocs/"
    AliasMatch "^/moin_static[0-9]*/applets/FCKeditor/(.*)" "/usr/share/fckeditor/$1"
    AliasMatch "^/moin_static[0-9]*/(.*)" "/usr/share/moin/htdocs/$1"

    Alias /static/ "/var/www/lug-in-wiki/static/"

    Alias /favicon.ico "/var/www/lug-in-wiki/static/favicon.ico"
    Alias /robots.txt  "/usr/share/moin/htdocs/robots.txt"

    <IfModule wsgi_module>
        WSGIScriptAlias / "/usr/share/moin/server/moin.wsgi/"
        WSGIDaemonProcess moin-ssl user=www-data group=www-data home=/tmp processes=2 threads=2 maximum-requests=100 inactivity-timeout=1000 umask=0007 display-name=wsgi-moin-ssl lang='en_US.UTF-8' locale='en_US.UTF-8'
        WSGIProcessGroup moin-ssl
        WSGIPassAuthorization On
    </IfModule>
    <IfModule !wsgi_module>
        ScriptAlias / "/usr/share/moin/server/moin.cgi/"
    </IfModule>
</VirtualHost>

Bemerkungen zur Konfiguration:

Aktivieren der Site:

$ a2ensite lug-in-wiki

Bitte beachten:

Bei Änderungen an der WSGI-Konfiguration reicht ein Reload von Apache nicht aus. Wegen der zusätzliche Daemon-Prozesse muss es ein Restart sein!

Weitere Informationen:

9.3. lug-in-www.conf (Drupal)

Ansprechpartner

jackhammer

Diese Seite stellt die Startseite der LUG-IN bereit. Diese Seite läuft unter Drupal.

Die Konfiguration enthält VirtualHost-Einträge für HTTP sowie HTTPS.

Die Konfiguration in /etc/apache2/sites-available/lug-in-www.conf sieht folgendermaßen aus:

<VirtualHost *:80>
    ServerName www.lug-in.de
    ServerAlias lug-in.de
    ServerAdmin admin@lug-in.de

    Use AccessErrorLogging lug-in-www
    Use AliasForAcmeWellKnownAddress

    DocumentRoot /var/www/drupal/

#    <If "%{REQUEST_URI} !~ m#^/\.well-known(/|$)#">
#       RedirectMatch permanent "(.*)$" "https://www.lug-in.de$1"
#    </If>
    <If "%{REQUEST_URI} =~ m#^/\.well-known(/|$)#">
        # Do nothing, i. e. serve well-known addresses in HTTP!
    </If>
    <ElseIf "%{HTTP_HOST} == 'lug-in.de'">
        RedirectMatch permanent "(.*)$" "https://lug-in.de$1"
    </ElseIf>
    <ElseIf "%{HTTP_HOST} = 'www.lug-in.de'">
        RedirectMatch permanent "(.*)$" "https://www.lug-in.de$1"
    </ElseIf>
    <Else>
        RedirectMatch permanent "(.*)$" "https://lug-in.de$1"
    </Else>
</VirtualHost>

<VirtualHost *:443>
    ServerName www.lug-in.de
    ServerAlias lug-in.de
    ServerAdmin admin@lug-in.de

    Use AccessErrorLogging lug-in-www_ssl
    Use TLSConfigurationBlock

    DocumentRoot /var/www/drupal/

    <If "%{HTTP_HOST} == 'lug-in.de'">
        RedirectMatch permanent "(.*)$" "https://www.lug-in.de$1"
    </If>

    <Directory "/var/www/drupal">
        Options Indexes FollowSymlinks MultiViews
        AllowOverride All

        Require all granted
    </Directory>
</VirtualHost>

Bemerkungen zur Konfiguration:

Aktivieren der Site:

$ a2ensite lug-in-www

9.4. lug-in-cloud.conf (ownCloud)

Ansprechpartner

jackhammer

Für den ownCloud-Server stellen wir natürlich auch eine eigene Sites-Datei her, damit das mit dem VirtualHost auch klappt.

Die Konfiguration in /etc/apache2/sites-available/lug-in-cloud.conf sieht folgendermaßen aus:

<VirtualHost *:80>
    ServerName cloud.lug-in.de
    ServerAdmin admin@lug-in.de

    Use AccessErrorLogging lug-in-cloud
    Use AliasForAcmeWellKnownAddress

    <If "%{REQUEST_URI} !~ m#^/\.well-known(/|$)#">
        RedirectMatch permanent "(.*)$" "https://cloud.lug-in.de$1"
    </If>

    TransferLog /dev/null
</VirtualHost>

<VirtualHost *:443>
    ServerName cloud.lug-in.de
    ServerAdmin admin@lug-in.de

    Use AccessErrorLogging lug-in-cloud_ssl
    Use TLSConfigurationBlock

    DocumentRoot /usr/share/owncloud/

    <Directory /usr/share/owncloud/>
        Options +FollowSymLinks
        AllowOverride All

        Require all granted
    </Directory>
</VirtualHost>

Bemerkungen zur Konfiguration:

Aktivieren der Site:

$ a2ensite lug-in-cloud

9.5. lug-in-lists.conf (GNU Mailman)

Ansprechpartner

jackhammer

Startseite des GNU Mailman, Details siehe unter Mailman.

Die Konfiguration enthält VirtualHost-Einträge für HTTP und HTTPS.

Die Konfiguration in /etc/apache2/sites-available/lug-in-lists.conf sieht folgendermaßen aus:

<VirtualHost *:80>
    ServerName lists.lug-in.de
    ServerAdmin admin@lug-in.de

    Use AccessErrorLogging lug-in-lists
    Use AliasForAcmeWellKnownAddress

    DocumentRoot /var/www/lists

    <If "%{REQUEST_URI} !~ m#^/\.well-known(/|$)#">
        RedirectMatch permanent "(.*)$" "https://lists.lug-in.de$1"
    </If>
</VirtualHost>

<VirtualHost *:443>
    ServerName lists.lug-in.de
    ServerAdmin admin@lug-in.de

    Use AccessErrorLogging lug-in-lists_ssl
    Use TLSConfigurationBlock

    DocumentRoot /var/www/lists

    <Directory /usr/lib/cgi-bin/mailman/>
        AllowOverride None
        Options ExecCGI
        AddHandler cgi-script .cgi
        #FollowSymLinks
        Require all granted
    </Directory>

    <Directory /var/lib/mailman/archives/public/>
        Options FollowSymlinks
        AllowOverride None

        Require all granted
    </Directory>

    <Directory /usr/share/images/mailman/>
        AllowOverride None

        Require all granted
    </Directory>

    <Directory /var/lib/mailman/archives/>
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    Alias /pipermail/ /var/lib/mailman/archives/public/
    Alias /images/mailman/ /usr/share/images/mailman/

    ScriptAlias /admin /usr/lib/cgi-bin/mailman/admin
    ScriptAlias /admindb /usr/lib/cgi-bin/mailman/admindb
    ScriptAlias /cgi-bin/mailman/ /usr/lib/cgi-bin/mailman/
    ScriptAlias /confirm /usr/lib/cgi-bin/mailman/confirm
    ScriptAlias /create /usr/lib/cgi-bin/mailman/create
    ScriptAlias /edithtml /usr/lib/cgi-bin/mailman/edithtml
    ScriptAlias /listinfo /usr/lib/cgi-bin/mailman/listinfo
    ScriptAlias /options /usr/lib/cgi-bin/mailman/options
    ScriptAlias /private /usr/lib/cgi-bin/mailman/private
    ScriptAlias /rmlist /usr/lib/cgi-bin/mailman/rmlist
    ScriptAlias /roster /usr/lib/cgi-bin/mailman/roster
    ScriptAlias /subscribe /usr/lib/cgi-bin/mailman/subscribe
    ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/
    ScriptAlias / /usr/lib/cgi-bin/mailman/listinfo/lug-in
</VirtualHost>

Aktivieren der Site:

$ a2ensite lug-in-lists

10. Scanner

Die Konfiguration von Web-Servern kann über verschiedene Scanner überprüft werden:


CategoryDocumentation

Dokumentation/Apache (last edited 2018-12-09 23:39:04 by Mathias)