Website-Suche

18 Tipps zur Sicherheit und Härtung des Apache-Webservers


Der Apache-Webserver ist einer der beliebtesten und am weitesten verbreiteten Webserver zum Hosten von Dateien und Websites. Es ist einfach zu installieren und zu konfigurieren, um Ihren Hosting-Anforderungen gerecht zu werden. Allerdings sind die Standardeinstellungen nicht sicher, um den dringend benötigten Schutz zu bieten, den Ihre Website benötigt.

In diesem Leitfaden sehen wir uns einige Tipps und Tricks zur Härtung des Apache-Servers an, die Sie implementieren können, um die Sicherheit Ihres Webservers zu erhöhen.

1. So verbergen Sie Apache-Versions- und Betriebssysteminformationen

Standardmäßig zeigt der Apache-Webserver seine Version an, falls Sie die falsche URL einer Website durchsuchen. Unten sehen Sie ein Beispiel für eine Fehlerseite, die darauf hinweist, 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, den es überwacht.

Es ist nicht immer eine gute Idee, die Informationen Ihres Webservers anzuzeigen, da dies ein gutes Geschenk für Hacker bei ihrer Aufklärungsmission sein kann. Um die Sicherheit zu erhöhen und es Hackern zu erschweren, wird empfohlen, die Webserverinformationen zu verbergen.

Öffnen Sie dazu die Standard-Apache-Konfigurationsdatei auf Debian-basierten Distributionen.

sudo vim /etc/apache2/apache2.conf

Für RHEL-basierte Systeme wie RHEL, Fedora, CentOS, Rocky und AlmaLinux.

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

Fügen Sie am Ende der Datei die folgenden Zeilen 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]

Laden Sie nun die Site neu und dieses Mal werden die Webserverinformationen nicht angezeigt.

2. Deaktivieren Sie die Verzeichnisliste in Apache

Standardmäßig erlaubt Apache die Auflistung von Verzeichnissen, und Besucher sehen möglicherweise alle Dateien oder Verzeichnisse, die Sie möglicherweise in Ihrem Dokumentstammverzeichnis haben.

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

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

Als nächstes navigieren wir in das Verzeichnis und erstellen ein paar Dateien.

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

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

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

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

Laden Sie Apache neu. Dieses Mal werden die Verzeichnisse nicht mehr angezeigt, wenn Sie die URL besuchen.

3. Aktualisieren Sie Apache regelmäßig

Es wird immer empfohlen, alle Ihre Anwendungen auf dem neuesten Stand zu halten, da die neuesten Anwendungen Fehlerbehebungen und Sicherheitspatches enthalten, die zugrunde liegende Schwachstellen älterer Softwareversionen beheben.

Daher wird empfohlen, Ihre Anwendungen regelmäßig auf die 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]

4. Verwenden Sie HTTPS-Verschlüsselung auf Apache

Apache verwendet standardmäßig das HTTP-Protokoll, ein schwaches und unsicheres Protokoll, das leicht abgehört werden kann. Um die Sicherheit Ihrer Website zu verbessern und vor allem Ihr SEO-Ranking bei Google zu verbessern, sollten Sie erwägen, Ihre Website mit einem SSL-Zertifikat zu verschlüsseln.

Dadurch wird das Standard-HTTP-Protokoll auf HTTPS umgestellt, wodurch es für irgendjemanden schwieriger wird, die vom Server hin und her gesendete Kommunikation abzufangen und zu entschlüsseln.

Erfahren Sie, wie Sie den Apache-Webserver mit Let’s Encrypt SSL unter Linux sichern.

  • So sichern Sie Apache mit dem SSL-Zertifikat von Let’s Encrypt auf RHEL
  • So sichern Sie Apache mit dem kostenlosen Let’s Encrypt SSL-Zertifikat unter Ubuntu und Debian

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

Zusätzlich zur Verschlüsselung Ihrer Website mit einem TLS/SSL-Zertifikat sollten Sie die Implementierung des HSTS-Websicherheitsmechanismus zusätzlich zu HTTPS in Betracht ziehen.

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 herunterstufen.

Mit HSTS kann der Webserver strikt festlegen, dass Webbrowser nur über HTTPS und niemals über das HTTP-Protokoll mit ihm interagieren sollen.

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

Als nächstes aktivieren Sie das Header-Modul für Apache:

sudo a2enmod headers

Laden 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 Blocks hinzu:

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

Das sieht wie folgt aus.

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

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

Starten Sie abschließend 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, eine neue Version des HTTP-Protokolls, die darauf abzielt, mehrere Probleme anzugehen oder zu lösen, die die Entwickler von HTTP/1.1 nicht vorhergesehen hatten.

Obwohl HTTP/1.1 immer noch weit verbreitet ist, ist es mit Leistungsproblemen verbunden, die mit der Verwendung mehrerer TCP-Verbindungen zur Verarbeitung mehrerer Anfragen vom Browser verbunden sind, was zu einem hohen Ressourcenaufwand auf der Clientseite führt. Dies führt zu einer verminderten Netzwerkleistung.

Da Anwendungen immer komplexer und funktionaler wurden, wurde HTTP/2 entwickelt, um die Mängel von HTTP/1.1 zu beheben, zu denen lange HTTP-Header, langsame Ladegeschwindigkeiten von Webseiten und allgemeine Leistung gehören Degradierung.

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

Erfahren Sie, wie Sie HTTP/2 auf dem Apache-Webserver aktivieren, indem Sie Folgendes verwenden:

  • So aktivieren Sie HTTP/2 in Apache unter Ubuntu

7. Beschränken Sie den Zugriff auf vertrauliche Verzeichnisse in Apache

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

<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 der Require all denied den Zugriff jedem, der versucht, auf Dateien in /sensitive_directory zuzugreifen.

Speichern Sie die Änderungen und beenden 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 hängt eine Fußzeile an servergenerierte Dokumente an, die Informationen über die Konfiguration Ihres Webservers enthalten, z. B. die Version und das Betriebssystem, auf dem er ausgeführt wird. Wenn Sie böswilligen Akteuren wichtige Details Ihres Webservers zugänglich machen, erhöht sich die Wahrscheinlichkeit eines Angriffs erheblich.

Um die Offenlegung solcher Informationen zu verhindern, müssen Sie diese Anweisung 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. Setzen Sie die „ServerTokens“-Direktive auf „Prod“

Die „ServerTokens“-Direktive steuert, welche Informationen der Server sendet, einschließlich der Apache-Version (Haupt- und Nebenversion), des Betriebssystems und des Typs des laufenden Webservers.

Die geringste Information, die Sie der Öffentlichkeit zugänglich machen möchten, ist, dass der Webserver Apache ist. Alles andere würde Ihren Server nur potenziellen Angriffen aussetzen. Daher wird empfohlen, die Direktive „ServerTokens“ in der Apache-Konfigurationsdatei auf „prod“ zu setzen.

ServerTokens Off

Speichern Sie wie immer die Änderungen und starten Sie Apache neu.

10. Sichern Sie Apache mit Fail2ban

Fail2ban ist eine Open-Source-Intrusion-Prevention-Anwendung, die Linux-Systeme vor externen Bedrohungen wie DoS- und Brute-Force-Angriffen schützt. Es funktioniert, indem es Systemprotokolle ständig auf schädliche Aktivitäten überwacht und Hosts sperrt, die Mustern entsprechen, die Angriffsverhalten nachahmen.

Fail2ban kann so konfiguriert werden, dass Apache vor DoS-Angriffen geschützt wird, indem Apache-Protokolle ständig auf fehlgeschlagene Anmeldeversuche überwacht und beleidigende IPs vorübergehend gesperrt werden.

Sehen Sie sich an, wie Sie Fail2ban unter Linux installieren, indem Sie Folgendes verwenden:

  • So verwenden Sie Fail2ban zum Sichern Ihres Linux-Servers

11. Deaktivieren Sie nicht benötigte 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 Basisauthentifizierung, Inhaltscaching, Verschlüsselung, Sicherheit usw.

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

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

apache2ctl -M

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

apache2ctl -M | grep rewrite

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

sudo a2dismod rewrite 

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

Sie können die Module mod_security und mod_evasive 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 auf Ihrer Website.
  • 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 mit den Modulen mod_security und mod_evasive schützen.

13. Eingeschränkte unerwünschte Dienste in Apache

Um Apache weiter abzusichern, sollten Sie erwägen, bestimmte Dienste wie symbolische Links und CGI-Ausführung zu deaktivieren, sofern diese derzeit nicht erforderlich sind. Standardmäßig folgt Apache Symlinks. Wir können diese Funktion sowie die Funktion -Includes und CGI in einer Zeile deaktivieren.

Fügen Sie dazu die Zeile '-ExecCGI -FollowSymLinks -Includes' für die Direktive „Options“ im Abschnitt „Directory“ hinzu.

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

Dies kann auch auf Verzeichnisebene erreicht werden. Hier deaktivieren wir beispielsweise die Ausführung von Includes und CGI-Dateien für das Verzeichnis „/var/www/html/mydomain1“.

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

Speichern Sie die Änderungen und starten Sie Apache neu.

14. Begrenzen Sie die Datei-Upload-Größe in Apache

Eine weitere Möglichkeit, Ihren Webserver zu sichern, besteht darin, die Gesamtgröße des HTTP-Anfragetexts zu begrenzen, der von einem Client an den Webserver gesendet wird. Sie können es im Serverkontext, pro Verzeichnis, pro Datei oder pro Standort festlegen.

Wenn Sie beispielsweise das Hochladen von Dateien in ein bestimmtes Verzeichnis zulassen möchten, sagen Sie das Verzeichnis /var/www/domain.com/wp-uploads und beschränken Sie die Größe der hochgeladenen Datei auf 4 MB=4194304Bytes, fügen Sie die folgende Anweisung zu Ihrer Apache-Konfigurationsdatei oder .htaccess-Datei hinzu.

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

Speichern Sie die Änderungen und denken Sie daran, Apache neu zu starten.

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

15. Aktivieren Sie die Anmeldung bei Apache

Die Protokollierung liefert alle Details zu Client-Anfragen und alle anderen Informationen zur Leistung Ihres Webservers. Dies liefert nützliche Informationen für den Fall, dass etwas schief geht. Durch die Aktivierung von Apache-Protokollen, insbesondere in virtuellen Hostdateien, können Sie ein Problem lokalisieren, falls etwas mit dem Webserver schief geht.

Um die Protokollierung zu aktivieren, müssen Sie das Modul mod_log_config einbinden, das zwei Hauptprotokollierungsanweisungen bereitstellt.

  • ErrorLog – Gibt den Pfad der Fehlerprotokolldatei an.
  • CustomLog – Erstellt und formatiert eine Protokolldatei.

Sie können diese Attribute in einer virtuellen Hostdatei im Abschnitt „Virtual Host“ verwenden, um die Protokollierung 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 als /var/log/apache2-Pfad definiert.

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

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

Zunächst möchten Sie einen neuen Benutzer und eine neue Gruppe speziell für Apache erstellen.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

Als Nächstes 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, die Apache ausführt, müssen Sie möglicherweise den Besitz 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 zu übernehmen:

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

17. Schützen Sie DDOS-Angriffe und -Härtung

Nun, es stimmt, dass Sie Ihre Website nicht vollständig vor DDoS-Angriffen schützen können. Hier sind jedoch einige Richtlinien, die Ihnen helfen können, diese zu mildern und zu bewältigen.

  • TimeOut – Mit dieser Anweisung können Sie angeben, wie lange der Server auf den Abschluss 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, empfiehlt es sich, diesen Wert niedrig zu halten. Die geeignete Einstellung hängt jedoch weitgehend von der Art der Anfragen ab, die Ihre Website erhält. Hinweis: Eine niedrige Zeitüberschreitung kann bei einigen CGI-Skripten zu Problemen führen.
  • MaxClients – Diese Anweisung legt die Grenze für die Anzahl der Verbindungen fest, die gleichzeitig bedient werden können. Alle neuen Verbindungen, die über dieses Limit hinausgehen, werden in die Warteschlange gestellt. Es ist sowohl im Prefork- als auch im Worker-MPM verfügbar. Der Standardwert ist 256.
  • KeepAliveTimeout – Diese Anweisung gibt an, wie lange der Server auf eine nachfolgende Anfrage wartet, bevor er die Verbindung schließt. Der Standardwert beträgt 5 Sekunden.
  • LimitRequestFields – Diese Anweisung legt eine Grenze für die Anzahl der von Clients akzeptierten HTTP-Anfrage-Header-Felder fest. Der Standardwert ist 100. Wenn DDoS-Angriffe aufgrund einer übermäßigen Anzahl von HTTP-Anfrageheadern auftreten, wird empfohlen, diesen Wert zu reduzieren.
  • LimitRequestFieldSize – Diese Direktive legt eine Größenbeschränkung für den HTTP-Anforderungsheader fest.

18. Führen Sie regelmäßige Schwachstellenscans durch

Eine weitere Möglichkeit, Ihren Webserver zu schützen, ist die Durchführung regelmäßiger Schwachstellen-Scan-Tests. 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.

Tools zum Scannen von Sicherheitslücken helfen auch dabei, unsichere Konfigurationseinstellungen aufzudecken und bei der Prüfung der Compliance zu helfen. Zu den beliebten Tools zum Scannen von Schwachstellen gehören Acutenix, Nessus, Nexpose, Sucuri und viele mehr.

Abschluss

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