Apache ServerSignature ServerTokens deaktivieren

ServerSignature und ServerTokens bei Apache und NGINX unterdrücken. PHP-Version im HTTP Server Header unterdrücken

Es gibt zahlreiche Möglichkeiten, wie Webseiten Sicherheitsbedrohungen ausgesetzt werden. Informationen in der ServerSignature and ServerTokens sind für Systeme erhöhte Risiken und können gegen sie eingesetzt werden.

Die Apache ServerSignature und ServerTokens liefert wichtige Information über den WebServer mit den Erweiterungen und das Betriebssystem. Bei einem Apache WebServer auf Debian GNU/Linux wird die Apache Versionsnummer und die Betriebssysteminformation in der HTTP Server Header Signature angezeigt.

$ wget --server-response --spider http://www.foo.com/index.php
Spider mode enabled. Check if remote file exists.
--2020-12-12 14:41:06--  http://www.foo.com/index.php
Resolving www.foo.com (www.foo.com)... 198.51.100.21
Connecting to www.foo.com (www.foo.com)|198.51.100.21|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 301 Moved Permanently
  Date: Sat, 12 Dec 2020 13:41:06 GMT
  Server: Apache/2.4.35 (Debian) PHP/7.3.5~deb10u2 OpenSSL/1.1.1i
  Location: https://www.foo.com/index.php
  Keep-Alive: timeout=5, max=100
  Connection: Keep-Alive
  Content-Type: text/html; charset=iso-8859-1
Location: https://www.foo.com/index.php following
Spider mode enabled. Check if remote file exists
...

Diese im HTTP Server Header angezeigte Information bei Zeile 9 gibt aufschluss über die Webserver Versionsnummer und die PHP-Version, die OpenSSL Version für Transport Layer Security sowie das Betriebssystem.

HTTP ServerSignature und ServerTokens

Mit ServerSignature und ServerTokens können vertrauliche Informationen zu den auf dem Webserver ausgeführten Softwareversionen enthalten. Wird eine Seite auf dem Server nicht gefunden, sendet der Server dem Client eine Fehlerseite, dabei erscheint im Browser die Seite, Not Found.

Abbildung: Browser Seite mit HTTP-Statuscode 404 und Serversignatur

Ein toter Link wird mit dem HTTP-Statuscode 404 dem Browser zurückgegeben, dazu werden noch weitere Informationen über den Webserver sowie die verwendete Version bekanntgegeben.

Es wird empfohlen die Serversignatur zu deaktivieren, wenn das System vor offenen Bedrohungen geschützt werden soll. In diesem Tutorial wird gezeigt, wie die Serversignatur unterdrückt werden kann.

Apache HTTP ServerSignature und ServerTokens bei Debian deaktivieren

Unter Debian 10 oder neuer wird die Direktive Serversignature und ServerTokens in der Datei security.conf vorgenommen.

$ vi /etc/apache2/conf-available/security.conf

Die Standard Einstellung bei Debian und auch bei Ubuntu für ServerSignature ist On und für ServerTokens ist Full.

Daktivieren und unterdrücken lassen sich die Server Signaturen mit ServerSignature Off und ServerTokens Prod.

ServerTokens Prod
ServerSignature Off

Die Änderung der Apache Webserver Konfiguration übermehmen.

$ systemctl restart apache2.service

Apache HTTP ServerSignature und ServerTokens bei RedHat deaktivieren

Bei Rocky Linux (RedHat) wird die änderung von ServerSignature und ServerTokens in der Apache Konfiguration httpd.conf editiert.

$ vi /etc/httpd/conf/httpd.conf
...
ServerTokens Prod
ServerSignature Off
..

Die Unterdrückung der HTTP-ServerSignature und ServerTokens für Rocky Linux aktivieren.

$ systemctl restart httpd.service

Nach deaktivierung von ServerSignature und ServerTokens wird die Version in der HTTP Server Header Ausgabe nicht mehr angezeigt. Die überprüfung der änderung kann mit wget oder hier gemacht werden.

$ wget --server-response --spider http://www.foo.com/index.php
Spider mode enabled. Check if remote file exists.
--2020-12-12 15:15:33--  http://www.foo.com/index.php
Resolving www.foo.com (www.foo.com)... 198.51.100.21
Connecting to www.foo.com (www.foo.com)|198.51.100.21|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 301 Moved Permanently
  Date: Sat, 12 Dec 2020 14:15:33 GMT
  Server: Apache
  Location: https://www.foo.com/index.php
  Keep-Alive: timeout=5, max=100
  Connection: Keep-Alive
  Content-Type: text/html; charset=iso-8859-1
Location: https://www.foo.com/index.php following
Spider mode enabled. Check if remote file exists.
...

Das unterdrücken der Serversignatur kann auch mit einer .htaccess-Datei erreicht werden, diese wird falls nicht bereits vorhanden, in der Docroot erstellt.

htaccess kann nur mit Apache-Webserver benutzt werden.
$ echo -e "ServerTokens Prod\nServerSignature Off" >> .htaccess

PHP-Version im HTTP Server Header unterdrücken

Die Ausgabe der PHP Versionsnummer wird bei Debian wie folgt in der Datei php.ini unterdrückt.

$ vi /etc/php/7.4/apache2/php.ini
...
expose_php = Off
..

Bei RedHat wird die PHP Version Header unterdrückung in php.ini aktiviert.

$ vi /etc/php.ini
...
expose_php = Off
..

Apache HTTP-Response-Header

Die Apache ServerTokens Direktive hat die folgenden möglichen Werte, die an Clients gesendet werden, wenn der spezifische Wert festgelegt wird.

ServerTokens Prod
    Der Server sendet (zB): Server: Apache
ServerTokens Major
    Der Server sendet (zB): Server: Apache/2
ServerTokens Minor
    Der Server sendet (zB): Server: Apache/2.0
ServerTokens Minimal
    Der Server sendet (zB): Server: Apache/2.0.41
ServerTokens OS
    Der Server sendet (zB): Server: Apache/2.0.41 (Unix)
ServerTokens Full (oder nicht angegeben)
    Der Server sendet (zB): Apache/2.4.37 (Debian) PHP/7.3.5~deb10u2 OpenSSL/1.1.1

Diese Einstellung gilt für den gesamten Webserver und kann nicht auf Virtualhost-Basis aktiviert oder deaktiviert werden.

NGINX HTTP Server_tokens OFF

Für den Nginx Webserver ist die Datei nginx.conf zu editieren.

$ vi /etc/nginx/nginx.conf

http {
...
    server_tokens off;
...

Die unterdrückung der Nginx Serversignature aktivieren.

$ systemctl restart nginx.service

Die Nginx Version wird nicht mehr angezeigt.

WordPress URL ändern

Website URL und Links in der WordPress Datenbank ändern

WordPress Umstellungen und die Migration erfordern mehrere Schritte zur Anpassung der URL. Das festlegen der WordPress-Adresse wird unter Einstellungen -> Allgemein bei WordPress-Adresse (URL) und Webseite-Adresse (URL) vorgenommen. Bei URL Änderungen sind weitere Anpassungen vorzunehmen.

Bei der Migration kann es vorkommen, dass der Zugang zum WP-Admin versperrt ist, nachdem der A Record oder CNAME im DNS, und die Virtualhost Konfiguration beim Webserver bereits geändert wurde. Auch bei der Umstellung der Seite von Dev auf Live, oder beim wechsel von HTTP auf HTTPS muss die URL geändert werden. An dieser stelle kann die Webseiten-Adresse und die Links im Content mit phpMyAdmin geändert werden.

WordPress-Adresse (URL) und Webseite-Adresse (URL) in phpMyAdmin ändern

Um die WordPress-Adresse und Webseite-Adresse in phpMyAdmin zu ändern, öffnet man die Datenbank und geht auf Anzeigen, im nun geöffneten Tree wählt man die Tabelle wp_options, links sucht man in der Spalte option_name nach siteurl und home, hier mit Bearbeiten den Wert im Feld option_value mit der neuen URL ändern und mit OK bestätigen.

Abbildung: phpMyAdmin Anzeigen siteurl / home

Hinweis: Der WordPress Standard Datenbank Präfix ist wp_, hier wurde der Präfix zuvor auf wp_futbg5 geändert.

Möchte man die Datenbank nach Text durchsuchen, geht man nach dem öffnen der Datenbank auf Suchen und trägt das Suchargument eingebunden zwischen %-Zeichen ein. In diesem Beispiel soll die Entwickler Umgebung zur Live Seite geändert werden, wobei dev.example.tld die Entwickler URL, und www.example.tld die Live URL der Seite ist.

Bei In der/den Tabelle(n) klickt man auf Alle auswählen, anschlissend auf OK. In der Regel sind die treffer in den Tabellen wp_posts und wp_postmeta, jeweils im Feld post_content zu finden.

Mit phpMyAdmin im Abschnitt SQL kann die URL mit folgendem SQL-Befehl durch Suchen Ersetzen in den Tabellen geändert werden.

Die zu ändernden URLs in folgenden Tabellen, die URL www.example.tld entsprechend erstetzen. Die UPDATE Befehle entsprechend mit Copy & Paste in der SQL-Abfrage ausführen.

UPDATE wp_posts
SET guid = REPLACE(
    guid,
    "https://dev.example.tld",
    "https://www.example.tld"
);

UPDATE wp_posts
SET post_content = REPLACE(
    post_content,
    "https://dev.example.tld",
    "https://www.example.tld"
);

UPDATE wp_posts
SET post_excerpt = REPLACE(
    post_excerpt,
    "https://dev.example.tld",
    "https://www.example.tld"
);

UPDATE wp_options
SET option_value = REPLACE(
    option_value,
    "https://dev.example.tld",
    "https://www.example.tld"
);

UPDATE wp_postmeta
SET meta_value = REPLACE(
    meta_value,
    "https://dev.example.tld",
    "https://www.example.tld"
);

UPDATE wp_links
SET link_url = REPLACE(
    link_url,
    "https://dev.example.tld",
    "https://www.example.tld"
);

Werden Plugins verwendet, die Tabellen mit URLs beinhalten, dann muss der Inhat hier ebefalls geändert werden.

UPDATE tabellenname
SET feld_mit_urls = REPLACE(
    feld_mit_urls,
    "https://dev.example.tld",
    "https://www.example.tld"
);

Anstelle des Platzhalter tabellenname und feld_mit_urls den tatsächlichen Tabellenname eintragen, die betreffenden Plugins mit den Tabellen können wie oben beschrieben, mit Textsuche in phpMyAdmin gefunden werden.

Eines der Plugins das Tabellen mit URLs beinhalt ist das Newsletter Plugin, in der Tabelle wp_newsletter sind URls im Feld http_referer.

UPDATE wp_newsletter
SET http_referer = REPLACE(
    http_referer,
    "https://dev.example.tld",
    "https://www.example.tld"
);

Fazit

In diesem Tutorial werden die Schritte zur Anpassung der URLs und Links nach einer WordPress Umstellungen oder einer Migration gezeigt. Es können abhängig der installierten Plugins weitere Tabellen hinzukommen, die geändert werden müssen.

Copy
Die mobile Version verlassen