Erste Schritte mit dem Apache HTTP-Server

Jan Kuparinen Version F34 onwards Last review: 2020-11-15 Needs Review!
Der Apache HTTP-Server ist einer der am häufigsten verwendeten Webserver. Dieser Abschnitt dient als Schnellstartanleitung für die Bereitstellung und Konfiguration von Apache unter Fedora.

HTTPD installieren

Dieses Verfahren beschreibt die Schritte zur Installation von Apache HTTPD auf Fedora.

  1. Installieren Sie die HTTPD-Pakete.

    $ sudo dnf install httpd -y
  2. Starten Sie den HTTPD-Dienst.

    $ sudo systemctl start httpd.service

Um den automatischen Start des HTTPD-Dienstes beim Systemstart zu aktivieren, führen Sie folgenden Befehl aus:

$ sudo systemctl enable httpd.service

Navigieren Sie zu http://localhost, um die Apache-Testseite aufzurufen. Der Zugriff auf den Server von anderen Hosts aus ist eventuell nicht möglich. Informationen zum Zugriff von anderen Hosts finden Sie unter Öffnen von Firewall-Ports.

Apache HTTPD absichern

Um die TLS/SSL-Unterstützung zu aktivieren, laden Sie eines der folgenden Pakete herunter und installieren Sie es:

Verwendung von mod_ssl

mod_ssl installieren

Das Paket mod_ssl wird nach der Installation automatisch aktiviert. Installieren Sie das Paket mod_ssl mit folgendem Befehl:

$ sudo dnf install mod_ssl -y

Ein neues Zertifikat erstellen

Um ein neues Zertifikat zu generieren, lesen Sie bitte Create a certificate using OpenSSL.

Ein vorhandenes Zertifikat installieren

Falls Sie bereits ein auf einem anderen Computer generiertes Zertifikat besitzen, gehen Sie wie folgt vor:

  1. Verschieben Sie das Zertifikat und die Schlüsseldatei in den richtigen Ordner.

    $ sudo mv key_file.key /etc/pki/tls/private/myhost.com.key
    $ sudo mv certificate.crt /etc/pki/tls/certs/myhost.com.crt
  2. Stellen Sie sicher, dass die folgenden Parameter korrekt sind:

    1. SELinux-Kontexte

      $ sudo restorecon /etc/pki/tls/private/myhost.com.key
      $ sudo restorecon /etc/pki/tls/certs/myhost.com.crt
    2. Eigentum

      $ sudo chown root:root /etc/pki/tls/private/myhost.com.key
      $ sudo chown root:root /etc/pki/tls/certs/myhost.com.crt
    3. Zugriffsrechte

      $ sudo chmod 0600 /etc/pki/tls/private/myhost.com.key
      $ sudo chmod 0600 /etc/pki/tls/certs/myhost.com.crt

Nach der Installation des vorhandenen Zertifikats richten Sie das Zertifikat mithilfe von Konfiguration von mod_ssl ein.

Konfiguration von mod_ssl

Die Standardkonfiguration für TLS/SSL befindet sich in der Datei /etc/httpd/conf.d/ssl.conf. In der Datei ssl.conf sind folgende Anweisungen enthalten, die den Speicherort des TLS/SSL-Zertifikats und -Schlüssels festlegen:

SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

Diese Direktiven sind in einem Block eingeschlossen, der einen virtuellen Host definiert:

<VirtualHost _default_:443>
...
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
...
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
...
</VirtualHost>

Um einen anderen Ort für diese Dateien festzulegen, gehen Sie wie folgt vor:

  1. Erstellen Sie eine Kopie der Datei /etc/httpd/conf.d/ssl.conf und benennen Sie die Datei in z-ssl-local.conf um.

  2. Bearbeiten Sie die folgenden Zeilen in der Datei z-ssl-local.conf:

<VirtualHost _default_:443>
SSLCertificateFile /etc/pki/tls/certs/www.myhost.org.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.myhost.org.key
</VirtualHost>

Diese Datei überschreibt die beiden Einstellungen für den virtuellen Host _default_:443; alle anderen Einstellungen aus ssl.conf bleiben erhalten.

Einstellungen für einzelne virtuelle Hosts

Um SSL/TLS für einen bestimmten virtuellen Host mit einem anderen Zertifikat als Standard zu verwenden, gehen Sie wie folgt vor:

  1. Öffnen Sie die Konfigurationsdatei des virtuellen Hosts: /etc/httpd/conf.d/hostname.conf.

  2. Fügen Sie diese Zeilen zwischen <VirtualHost Hostname:Port> und </VirtualHost> ein:

    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/hostname.crt
    SSLCertificateKeyFile /etc/pki/tls/private/hostname.key

Web-Apps installieren

Sie möchten wahrscheinlich etwas auf Ihrem Webserver betreiben. Viele der beliebtesten Webanwendungen sind als Pakete für Fedora verfügbar. Die Verwendung dieser Pakete wird empfohlen. Sie sind gemäß der bewährten Praxis der Distribution konfiguriert, was die Sicherheit der Installation gewährleistet.

Zum Beispiel durch die Installation statischer Dateien an Orten, auf denen der Webserver keine Schreibrechte hat, und durch die Zugriffskontrolle mit Konfigurationsdateien anstelle von .htaccess-Dateien, die etwas anfälliger für Angriffe sind.

Auch die paketierten Webanwendungen werden so konfiguriert, dass sie mit SELinux funktionieren, was erhebliche Sicherheitsvorteile bietet.

Aktualisierungen erhalten Sie auch über den üblichen Fedora-Aktualisierungsprozess, wodurch es einfacher wird, Ihre Installation auf dem neuesten Stand zu halten.

Oftmals ist auch die Standardkonfiguration an die Konventionen von Fedora angepasst, sodass Sie weniger Aufwand betreiben müssen, um die Anwendung zum Laufen zu bringen.

Die meisten Webanwendungen werden einfach unter ihrem Namen paketiert. Beispielsweise können Sie WordPress installieren, indem Sie folgenden Befehl ausführen:

$ sudo dnf install wordpress

Paketierte Webanwendungen stellen üblicherweise Fedora-spezifische Anweisungen in einer Dokumentationsdatei bereit. Beispielsweise bietet WordPress die Dateien /usr/share/doc/wordpress/README.fedora und /usr/share/doc/wordpress/README.fedora-multiuser an.

Standardmäßig ist der Zugriff auf paketierte Webanwendungen so eingeschränkt, dass er nur vom Server selbst aus möglich ist. Dadurch wird sichergestellt, dass die Erstkonfiguration sicher durchgeführt werden kann und administrative Schnittstellen nicht öffentlich zugänglich sind. Informationen zur Erweiterung des Zugriffs finden Sie unter Zugriff auf Webanwendungen aktivieren.

Webanwendungen benötigen üblicherweise einen Datenbankserver. Dieser Quick Docs-Artikel bietet Informationen zur Installation und Konfiguration von PostgreSQL, und diese Wiki-Seite beschreibt die Verwendung von MariaDB unter Fedora.

Apache HTTPD konfigurieren

Die Datei /etc/httpd/conf/httpd.conf ist die Hauptkonfigurationsdatei von Apache. Benutzerdefinierte Konfigurationsdateien werden unter /etc/httpd/conf.d/*.conf angegeben. Sind dieselben Einstellungen sowohl in /etc/httpd/conf/httpd.conf als auch in einer .conf-Datei unter /etc/httpd/conf.d/ definiert, werden die Einstellungen aus der Datei unter /etc/httpd/conf.d/ verwendet.

Dateien im Verzeichnis /etc/httpd/conf.d/ werden in alphabetischer Reihenfolge gelesen: Eine Einstellung aus /etc/httpd/conf.d/z-foo.conf hat Vorrang vor einer Einstellung aus /etc/httpd/conf.d/foo.conf. Ebenso hat eine Einstellung aus /etc/httpd/conf.d/99-foo.conf Vorrang vor einer Einstellung aus /etc/httpd/conf.d/00-foo.conf.

Es empfiehlt sich, die Datei /etc/httpd/conf/httpd.conf oder eine der mit Fedora-Paketen mitgelieferten Dateien /etc/httpd/conf.d nicht direkt zu bearbeiten. Lokale Änderungen an diesen Dateien werden in neueren Paketversionen nicht automatisch übernommen. Stattdessen wird eine .rpmnew-Datei erstellt, und Sie müssen die Änderungen manuell zusammenführen.

Es wird empfohlen, eine neue Datei im Verzeichnis /etc/httpd/conf.d/ zu erstellen, die Vorrang vor der zu ändernden Datei hat, und die gewünschten Einstellungen in dieser Datei vorzunehmen. Um beispielsweise eine Einstellung in /etc/httpd/conf.d/foo.conf zu ändern, können Sie die Datei /etc/httpd/conf.d/z-foo-local.conf erstellen und Ihre Einstellung dort einfügen.

Nachdem Sie Änderungen an Ihrer Serverkonfiguration vorgenommen haben, führen Sie folgenden Befehl aus:

$ sudo systemctl reload httpd.service

Bestimmte Änderungen erfordern möglicherweise einen vollständigen Neustart von Apache. Um Apache vollständig neu zu starten, führen Sie folgenden Befehl aus:

$ sudo systemctl restart httpd.service

Zugriff auf Web-Apps aktivieren

Standardmäßig sind in Fedora paketierten Webanwendungen so konfiguriert, dass der Zugriff nur vom lokalen Rechner (localhost) aus erlaubt ist. Dies wird durch die Datei /etc/httpd/conf.d/webapp.conf definiert, die folgende Einstellungen enthält:

<Directory /usr/share/webapp>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require local
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from ::1
    </IfModule>
</Directory>

Bevor Sie den allgemeinen Zugriff auf die Web-App erlauben, stellen Sie bitte Folgendes sicher:

  • Die Web-App wurde korrekt konfiguriert

  • Die Administrationsoberfläche und andere sensible Bereiche sind ohne entsprechende Authentifizierung nicht zugänglich

  • Die Datenbankkonfiguration ist sicher, sofern die Anwendung eine Datenbank verwendet

Um den Zugriff auf die Anwendung zu erweitern, erstellen Sie eine Datei /etc/httpd/conf.d/z-webapp-allow.conf. Um allen Systemen in einem typischen lokalen Netzwerk den Zugriff zu ermöglichen, fügen Sie die folgenden Zeilen in die Datei ein:

<Directory /usr/share/webapp>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require local
        Require ip 192.168.1
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from ::1
        Allow from 192.168.1
    </IfModule>
</Directory>

Sobald die Anwendung korrekt konfiguriert ist, fügen Sie die folgende Konfiguration hinzu, um den Zugriff von jedem Host aus zu ermöglichen:

<Directory /usr/share/webapp>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require all granted
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Allow from all
    </IfModule>
</Directory>

Firewall-Ports öffnen

Dadurch wird Ihr Computer dem Internet und potenziellen Angreifern ausgesetzt. Sichern Sie Ihr System und Ihre Apache-Installation ordnungsgemäß, bevor Sie Ihren Server dem Internet zugänglich machen.

Apache verwendet standardmäßig Port 80 für unverschlüsselte HTTP-Verbindungen und Port 443 für TLS/SSL-Verbindungen. Um diesen Dienst von anderen Computern oder aus dem Internet zugänglich zu machen, erlauben Sie Apache in der Firewall mit einem der folgenden Befehle:

Um Apache bei jedem Systemstart durch die Firewall zu lassen:

  • Für einfache HTTP-Verbindungen:

    $ sudo firewall-cmd --permanent --add-service=http
  • Für TLS/SSL-Verbindungen:

    $ sudo firewall-cmd --permanent --add-service=https

Um Apache sofort durch die Firewall zu lassen:

  • Für einfache HTTP-Verbindungen:

    $ sudo firewall-cmd --add-service=http
  • Für TLS/SSL-Verbindungen:

    $ sudo firewall-cmd --add-service=https
Wenn Ihr Server in einem Netzwerk mit einem NAT-Router betrieben wird, müssen Sie Ihren Router außerdem so konfigurieren, dass er die HTTP- und HTTPS-Ports an Ihren Server weiterleitet, wenn Sie den Zugriff von außerhalb Ihres lokalen Netzwerks ermöglichen möchten.

Testseite deaktivieren

Um die Testseite zu deaktivieren, kommentieren Sie alle Zeilen in der Datei /etc/httpd/conf.d/welcome.conf mit # wie folgt aus:

# <LocationMatch "^/+$">
#    Options -Indexes
#    ErrorDocument 403 /.noindex.html
# </LocationMatch>

# <Directory /usr/share/httpd/noindex>
#    AllowOverride None
#    Require all granted
# </Directory>

# Alias /.noindex.html /usr/share/httpd/noindex/index.html

Weitere Ressourcen