18 Apache Webserver-Sicherheits- und Härtungstipps

Der Apache Webserver ist einer der beliebtesten und am weitesten verbreiteten Webserver für das Hosting von Dateien und Websites. Er ist einfach zu installieren und einzurichten, um Ihren Hosting-Bedürfnissen gerecht zu werden. Die Standardeinstellungen bieten jedoch keine ausreichende Sicherheit, um Ihrer Website den erforderlichen Schutz zu gewährleisten.

In dieser Anleitung betrachten wir einige Apache-Server-Härtungstipps und -tricks, die Sie umsetzen können, um die Sicherheit Ihres Webservers zu verbessern.

1. So verbergen Sie die Apache-Version und die Betriebssysteminformationen

Standardmäßig zeigt der Apache-Webserver seine Version an, wenn Sie eine falsche URL einer Website besuchen. Hier ist ein Beispiel einer Fehlerseite, die angibt, dass die Seite auf der Website nicht gefunden werden kann. Die letzte Zeile gibt die Apache-Version, das Host-Betriebssystem, die IP-Adresse und den Port an, an dem es lauscht.

Show Apache Version Info

Es ist nie eine gute Idee, Ihre Webserverinformationen anzuzeigen, da dies für Hacker ein willkommenes Geschenk bei ihrer Aufklärungsmission sein kann. Um einen Sicherungsschutz hinzuzufügen und es für Hacker schwieriger zu machen, wird empfohlen, die Webserverinformationen zu verbergen.

Um dies zu tun, öffnen Sie die Standardkonfigurationsdatei von Apache auf Debian-basierten Distributionen.

$ sudo vim /etc/apache2/apache2.conf

Für auf RHEL-basierten Systemen wie RHEL, Fedora, CentOS, Rocky und AlmaLinux.

$ sudo vim /etc/httpd/conf/httpd.conf

Fügen Sie die folgenden Zeilen am Ende der Datei hinzu.

ServerTokens Prod
ServerSignature Off

Speichern Sie die Änderungen und starten Sie den Apache-Webserver neu.

$ sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
$ sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Jetzt laden Sie die Seite neu, und dieses Mal wird die Webserver-Information nicht angezeigt.

Check Apache Version Info

2. Verzeichnisliste in Apache deaktivieren

Standardmäßig erlaubt Apache die Anzeige von Verzeichnissen, und Besucher könnten alle Dateien oder Verzeichnisse sehen, die Sie in Ihrem Dokument-Root-Verzeichnis haben.

Um dies zu demonstrieren, erstellen wir ein Verzeichnis namens test.

$ sudo mkdir -p /var/www/html/test

Anschließend navigieren wir in das Verzeichnis und erstellen einige Dateien.

$ cd /var/www/html/test
$ sudo touch app.py main.py

Wenn wir jetzt auf die URL http://localhost/test zugreifen, können wir die Verzeichnisliste anzeigen.

Disable Apache Directory Listing

Um die Verzeichnisliste zu deaktivieren, gehen Sie zur Hauptkonfigurationsdatei von Apache und suchen Sie nach dem Attribut ‚Directory‚. Setzen Sie den Parameter ‚Options‚ auf '-Indexes', wie gezeigt.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Starten Sie Apache neu, und dieses Mal werden die Verzeichnisse nicht mehr angezeigt, wenn Sie die URL besuchen.

Disable Directory Listing in Apache

3. Apache regelmäßig aktualisieren

Es wird immer empfohlen, alle Ihre Anwendungen auf dem neuesten Stand zu halten, da die neuesten Anwendungen Fehlerbehebungen und Sicherheitspatches enthalten, die zugrunde liegende Sicherheitslücken in älteren Softwareversionen beheben.

Als solches wird empfohlen, Ihre Anwendungen regelmäßig auf ihre neuesten Versionen zu aktualisieren.

$ sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
$ sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
Update System Packages

4. Verwenden Sie die HTTPS-Verschlüsselung auf Apache

Apache verwendet standardmäßig das HTTP-Protokoll, das ein schwaches und unsicheres Protokoll ist, das anfällig für Abhören ist. Um die Sicherheit Ihrer Website zu verbessern und noch mehr Ihre Google-SEO-Rankings zu verbessern, sollten Sie in Betracht ziehen, Ihre Website mithilfe eines SSL-Zertifikats zu verschlüsseln.

Dadurch wird das standardmäßige HTTP-Protokoll auf HTTPS umgestellt, wodurch es für niemanden schwieriger wird, die Kommunikation zwischen Server und Client abzufangen und zu entschlüsseln.

Sehen Sie sich an, wie Sie den Apache-Webserver unter Linux mit einem Let’s Encrypt SSL absichern können.

5. Aktivieren Sie die HTTP Strict Transport Security (HSTS) für Apache

Neben der Verschlüsselung Ihrer Website mit einem TLS/SSL-Zertifikat sollten Sie die HSTS-Web-Sicherheitsmechanismus über HTTPS implementieren.

HTTP Strict Transport Security (HSTS) ist ein Richtlinienmechanismus, der Websites vor Man-in-the-Middle-Angriffen und Cookie-Hijacking schützt. Dies geschieht, wenn Angreifer das HTTPS-Protokoll auf das unsichere HTTP-Protokoll herabstufen.

HSTS ermöglicht es dem Webserver, strikt zu erklären, dass Webbrowser nur über HTTPS mit ihm interagieren sollten und niemals über das HTTP-Protokoll.

Um HSTS zu aktivieren, stellen Sie sicher, dass Ihre Website HTTPS verwendet und über ein gültiges TLS/SSL-Zertifikat verfügt.

Aktivieren Sie dann das Header-Modul für Apache:

$ sudo a2enmod headers

Starten Sie dann Apache neu, um die Änderungen zu übernehmen.

$ sudo systemctl restart apache2

Greifen Sie als nächstes auf die Konfigurationsdatei des virtuellen Hosts Ihrer Domain zu.

$ sudo vim /etc/apache2/sites-available/mydomain.conf

Fügen Sie als nächstes diese Zeile innerhalb des <VirtualHost *:443>-Blocks hinzu:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Dies sieht wie folgt aus.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

Der Parameter max-age weist Webbrowser an, Ihre Website für das nächste Jahr nur über HTTPS zu öffnen (31536000 = 1 Jahr).

Starten Sie schließlich Apache neu, damit die HSTS-Richtlinie wirksam wird.

$ sudo systemctl restart apache2

6. Aktivieren Sie HTTP/2 auf Apache

Im Jahr 2015 wurde HTTP/2 veröffentlicht, das eine neue Version des HTTP-Protokolls ist, die versucht, mehrere Probleme zu lösen, die die Schöpfer von HTTP/1.1 nicht vorausgesehen haben.

Während HTTP/1.1 immer noch weit verbreitet ist, wird es mit Leistungsproblemen in Verbindung gebracht, die mit der Verwendung mehrerer TCP-Verbindungen zur Bearbeitung mehrerer Anfragen vom Browser einhergehen, was zu hohen Ressourcenbelastungen auf der Clientseite führt und zu einer Beeinträchtigung der Netzwerkleistung führt.

Mit zunehmender Komplexität und Funktionalität von Anwendungen wurde HTTP/2 entwickelt, um die Mängel von HTTP/1.1 zu beheben, zu denen lange HTTP-Header, langsame Seitenaufbauzeiten und allgemeine Leistungseinbußen gehören.

HTTP/2 bietet mehr Schutz und Privatsphäre als sein Vorgänger. Ebenso wichtig ist die verbesserte Leistung durch die Verwendung von multiplexen Datenströmen. Mit HTTP/2 gewährleistet eine einzige TCP-Verbindung eine effektive Bandbreitennutzung, selbst bei der Übertragung mehrerer Datenströme.

Sehen Sie sich an, wie Sie HTTP/2 auf dem Apache-Webserver aktivieren können, indem Sie verwenden:

7. Zugriff auf sensible Verzeichnisse in Apache beschränken

Eine weitere Sicherheitsmaßnahme, die Sie ergreifen können, besteht darin, den Zugriff auf Verzeichnisse zu beschränken, die möglicherweise sensible Informationen wie Benutzerdaten, Protokolle und Konfigurationsdateien enthalten.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

In der obigen Konfiguration verweigert Require all denied allen, die versuchen, auf Dateien in /sensitive_directory zuzugreifen, den Zugriff.

Speichern Sie die Änderungen und verlassen Sie die Datei. Starten Sie dann Apache neu, damit die Änderungen wirksam werden.

8. Deaktivieren Sie die ServerSignature-Direktive in Apache

Die ServerSignature-Direktive in der Apache-Konfigurationsdatei fügt Fußzeilen zu servergenerierten Dokumenten hinzu, die Informationen über die Konfiguration Ihres Webservers wie die Version und das Betriebssystem enthalten, auf dem er läuft. Die Offenlegung wichtiger Details über Ihren Webserver gegenüber bösartigen Akteuren erhöht die Wahrscheinlichkeit eines Angriffs erheblich.

Um die Offenlegung solcher Informationen zu verhindern, müssen Sie diese Direktive in der Apache-Konfigurationsdatei deaktivieren:

ServerSignature Off

Speichern Sie die Änderungen und starten Sie Apache erneut, damit die Änderungen wirksam werden.

$ sudo systemctl restart apache2

9. Legen Sie die ‚ServerTokens‘-Direktive auf ‚Prod‘ fest

Die ‚ServerTokens‘-Direktive steuert, welche Informationen der Server sendet, einschließlich Apache-Version (Haupt- und Nebenversion), Betriebssystem und Art des Web-Servers, der läuft.

Die geringste Menge an Informationen, die Sie der Öffentlichkeit preisgeben möchten, ist, dass der Webserver Apache ist. Alles andere würde Ihren Server nur potenziellen Angriffen aussetzen. Daher wird empfohlen, die ‚ServerTokens‘-Direktive in der Apache-Konfigurationsdatei auf ‚prod‚ festzulegen.

ServerTokens Off

Wie immer, speichern Sie die Änderungen und stellen Sie sicher, dass Sie Apache neu starten.

10. Sichern Sie Apache mit Fail2ban

Fail2ban ist eine Open-Source-Anwendung zur Einbruchverhütung, die Linux-Systeme vor externen Bedrohungen wie DoS- und Bruteforce-Angriffen schützt. Es funktioniert, indem es ständig Systemprotokolle auf schädliche Aktivitäten überwacht und Hosts sperrt, die Muster erkennen lassen, die Angriffsverhalten nachahmen.

Fail2ban kann so konfiguriert werden, dass es Apache vor DoS-Angriffen schützt, indem es Apache-Protokolle ständig auf fehlgeschlagene Anmeldeversuche überwacht und vorübergehend die IPs der Übeltäter sperrt.

Erfahren Sie, wie Sie Fail2ban unter Linux installieren können, indem Sie folgende Schritte befolgen:

11. Deaktivieren Sie unnötige Module

Apache-Module sind einfach Programme, die geladen werden, um die Funktionalität des Webservers zu erweitern. Zu den durch Module erweiterten Funktionen gehören grundlegende Authentifizierung, Inhaltszwischenspeicherung, Verschlüsselung, Sicherheit usw.

Es wird immer empfohlen, alle Module zu deaktivieren, die derzeit nicht verwendet werden, um die Chancen zu minimieren, Opfer eines Angriffs zu werden.

Um alle aktivierten Module anzuzeigen, führen Sie den Befehl aus

$ apache2ctl -M
View Apache Modules

Um zu überprüfen, ob ein bestimmtes Modul aktiviert ist, führen Sie beispielsweise den Befehl aus, um das Rewrite-Modul zu überprüfen.

$ apache2ctl -M | grep rewrite
Check Apache Module

Um das Modul zu deaktivieren, führen Sie den Befehl aus:

$ sudo a2dismod rewrite 
Disable Apache Module

12. Verwenden Sie die Module mod_security und mod_evasive, um Apache zu sichern

Sie können die mod_security– und mod_evasive-Module aktivieren, um Apache vor Brute-Force-Angriffen oder DDoS-Angriffen zu schützen.

  • Das mod_security-Modul fungiert wie eine Web Application Firewall (WAF) und blockiert verdächtigen und unerwünschten Datenverkehr zu Ihrer Seite.
  • Das mod_evasive-Modul schützt Ihren Server vor Brute-Force- und Denial-of-Service-Angriffen (DoS).

Lesen Sie mehr darüber, wie Sie Apache mithilfe der Module mod_security und mod_evasive schützen können.

13. Eingeschränkte unerwünschte Dienste in Apache

Um Apache weiter abzusichern, sollten Sie bestimmte Dienste wie symbolische Links und CGI-Ausführung deaktivieren, wenn sie derzeit nicht benötigt werden. Standardmäßig folgt Apache Symbolischen Links, wir können diese Funktion sowie das -Includes-Feature und CGI in einer Zeile deaktivieren.

Um dies zu tun, fügen Sie die Zeile '-ExecCGI -FollowSymLinks -Includes' für die ‘Options’-Direktive im Abschnitt ‘Directory‘ hinzu.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

Dies kann auch auf Verzeichnisebene erreicht werden. Hier zum Beispiel deaktivieren wir Includes und Cgi-Dateiausführungen für das “/var/www/html/mydomain1”-Verzeichnis.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

Speichern Sie die Änderungen und starten Sie Apache neu.

14. Begrenzung der Datei-Upload-Größe in Apache

Ein weiterer Weg, Ihren Webserver abzusichern, besteht darin, die Gesamtgröße des HTTP-Anforderungsbodens zu begrenzen, der vom Client an den Webserver gesendet wird. Sie können es im Kontext des Servers, pro Verzeichnis, pro Datei oder pro Ort festlegen.

Zum Beispiel, wenn Sie den Datei-Upload in ein bestimmtes Verzeichnis, sagen wir /var/www/domain.com/wp-uploads-Verzeichnis, erlauben möchten und die Größe der hochgeladenen Datei auf 4M = 4194304Bytes beschränken möchten, fügen Sie die folgende Direktive Ihrer Apache-Konfigurationsdatei oder .htaccess-Datei hinzu.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

Änderungen speichern und Apache neu starten.

Sie können es im Kontext des Servers, pro Verzeichnis, pro Datei oder pro Standort festlegen. Die Direktive wehrt abnormalen Client-Anforderungsverhalten ab, das manchmal eine Form eines Denial-of-Service (DoS)-Angriffs sein kann.

15. Aktivieren Sie das Protokollieren in Apache

Die Protokollierung bietet alle Details zu Client-Anforderungen und allen anderen Informationen zur Leistung Ihres Webservers. Dies liefert nützliche Informationen, falls etwas schief geht. Das Aktivieren von Apache-Protokollen, insbesondere in virtuellen Host-Dateien, ermöglicht es Ihnen, ein Problem zu lokalisieren, falls etwas mit dem Webserver schief geht.

Um das Protokollieren zu aktivieren, müssen Sie das Modul mod_log_config einbinden, das zwei Hauptprotokollierungsdirektiven bereitstellt.

  • ErrorLog – Legt den Pfad der Fehlerprotokolldatei fest.
  • CustomLog – Erstellt und formatiert eine Protokolldatei.

Sie können diese Attribute in einer virtuellen Host-Datei im Abschnitt für virtuelle Hosts verwenden, um das Protokollieren zu aktivieren.

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Die {APACHE_LOG_DIR} Direktive in Debian-Systemen ist definiert als /var/log/apache2 Pfad.

16. Führen Sie Apache als separaten Benutzer und Gruppe aus

Das Ausführen von Apache als separater Benutzer und Gruppe ist eine gängige Sicherheitspraxis. Dadurch können Sie den Webserver-Prozess von anderen Systemprozessen isolieren und potenzielle Schäden minimieren, wenn der Webserver kompromittiert wird.

Zuerst sollten Sie einen neuen Benutzer und eine neue Gruppe speziell für Apache erstellen.

$ sudo groupadd apachegroup
$ sudo useradd -g apachegroup apacheuser

Dann müssen Sie die Apache-Konfigurationsdatei bearbeiten, um den neuen Benutzer und die neue Gruppe anzugeben.

User apacheuser
Group apachegroup

Da Sie den Benutzer und die Gruppe ändern, unter denen Apache ausgeführt wird, müssen Sie möglicherweise die Besitzverhältnisse von Webverzeichnissen und -dateien aktualisieren, um sicherzustellen, dass Apache sie weiterhin lesen kann.

$ sudo chown -R apacheuser:apachegroup /var/www/html

Nachdem Sie diese Änderungen vorgenommen haben, starten Sie Apache neu, um sie anzuwenden:

$ sudo systemctl restart httpd      # For RHEL/CentOS
$ sudo systemctl restart apache2    # For Debian/Ubuntu

17. Schutz vor DDoS-Angriffen und Absicherung

Es ist zwar wahr, dass Sie Ihre Website nicht vollständig vor DDoS-Angriffen schützen können. Hier sind jedoch einige Richtlinien, die Ihnen helfen können, sie zu mildern und zu verwalten.

  • TimeOut – Diese Direktive ermöglicht es Ihnen, die Dauer festzulegen, die der Server auf das Abschließen bestimmter Ereignisse wartet, bevor er einen Fehler zurückgibt. Der Standardwert beträgt 300 Sekunden. Für Websites, die anfällig für DDoS-Angriffe sind, ist es ratsam, diesen Wert niedrig zu halten. Die geeignete Einstellung hängt jedoch weitgehend von der Art der Anfragen ab, die Ihre Website erhält. Hinweis: Ein niedriger Timeout kann bei einigen CGI-Skripten Probleme verursachen.
  • MaxClients – Diese Direktive legt das Limit für die Anzahl der gleichzeitig bedienten Verbindungen fest. Neue Verbindungen über dieses Limit werden in die Warteschlange gestellt. Es ist sowohl in den Prefork– als auch in den Worker MPMs verfügbar. Der Standardwert beträgt 256.
  • KeepAliveTimeout – Diese Direktive legt die Dauer fest, die der Server auf eine nachfolgende Anfrage wartet, bevor er die Verbindung schließt. Der Standardwert beträgt 5 Sekunden.
  • LimitRequestFields – Diese Direktive legt ein Limit für die Anzahl der von Clients akzeptierten HTTP-Anforderungskopffelder fest. Der Standardwert beträgt 100. Wenn DDoS-Angriffe aufgrund einer übermäßigen Anzahl von HTTP-Anforderungsköpfen auftreten, wird empfohlen, diesen Wert zu reduzieren.
  • LimitRequestFieldSize – Diese Direktive legt eine Größenbeschränkung für den HTTP-Anforderungskopf fest.

18. Führen Sie regelmäßige Schwachstellen-Scans durch

Ein weiterer Weg, um Ihren Webserver zu schützen, besteht darin, regelmäßige Schwachstellen-Scan-Tests durchzuführen. Dies hilft dabei, potenzielle Sicherheitslücken zu identifizieren, die von Hackern ausgenutzt werden könnten, um Zugriff auf sensible Dateien zu erhalten oder Malware einzuschleusen.

Schwachstellen-Scan-Tools helfen auch dabei, unsichere Konfigurationseinstellungen aufzuzeigen und bei der Überprüfung auf Einhaltung zu unterstützen. Zu den beliebten Schwachstellen-Scan-Tools gehören Acutenix, Nessus, Nexpose, Sucuri und viele mehr.

Zusammenfassung

Dies sind einige der Apache-Härtungstipps, die Sie auf Ihrem Webserver implementieren können, um eine zusätzliche Schutzschicht zu bieten und Eindringlinge fernzuhalten.

Source:
https://www.tecmint.com/apache-security-tips/