Ich wollte wissen welche TLS Versionen für die Aufrufe von techgrube.de verwendet werden. Dabei ging es mir darum herauszufinden ob es nötig ist die ältere Version TLSv1 noch zu unterstützen, oder ob nur noch Version 1.2 zum Einsatz kommt. Leider loggt NGINX diese Information standardmäßig nicht.

Nach kurzem suchen habe ich die Lösung auf serverfault.com gefunden. Damit die TLS-Version und die verwendete Ciphersuite in das access Log aufgenommen wird muss ein benutzerdefiniertes Log-Format erstellt werden welches die folgende Zeile enthält.

'$ssl_protocol/$ssl_cipher '

Logformat definieren

Benutzerdefinierte Log-Formate werden für NGINX im http-Bereich der /etc/nginx/nginx.conf definiert.
Das Beispiel auf Serverfault basiert auf dem Standard combined Log-Format, ergänzt um oben genannte Zeile. Dazu muss untenstehende Konfiguration in der nginx.conf nach http { eingefügt werden:

log_format combined_ssl '$remote_addr - $remote_user [$time_local] '
'$ssl_protocol/$ssl_cipher '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';

Anpassen der Virtual-Host-Datei

In der Virtual Host Datei (z.B. /etc/nginx/sites-available/000-default.conf) muss anschließend die Zeile access_log ersetzt werden:

access_log /var/log/nginx/access.log combined;
access_log /var/log/nginx/access.log combined_ssl;

Allerdings verwende ich schon seit langem ein eigenes Logformat, wie im Artikel Nginx Logfiles anonymisieren und mit AWstats auswerten beschrieben. Die Idee dafür stammt aus einem Beitrag von Stackoverflow.com.  Dieses Logformat sorgt dafür dass NGINX aus Datenschutzgründen sowohl IPv4 als auch IPv6 Adressen in verkürzter, anonymisierter Form speichert. Bei v4 Adressen wird der letzte Ziffernblock durch eine Null ersetzt. Bei v6 Adressen werden die letzten vier Blöcke entfernt.

Mein Logformat mit verkürzten IP-Adressen und logging der TLS-Version sieht folgendermaßen aus:

map $remote_addr $ip_anonym1 {
default 0.0.0;
"~(?P<ip>(\d+)\.(\d+)\.(\d+))\.\d+" $ip;
"~(?P<ip>[^:]+:[^:]+:[^:]+:[^:]+):" $ip;
}

map $remote_addr $ip_anonym2 {
default .0;
"~(?P<ip>(\d+)\.(\d+)\.(\d+))\.\d+" .0;
"~(?P<ip>[^:]+:[^:]+):" ::;
}

map $ip_anonym1$ip_anonym2 $ip_anonymized {
default 0.0.0.0;
"~(?P<ip>.*)" $ip;
}

log_format anonymized '$ip_anonymized - $remote_user [$time_local] '
'$ssl_protocol/$ssl_cipher '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';

In der access_log Zeile wird das Standardlogformat combined durch anonymized ersetzt.

access_log /var/log/nginx/access.log combined;
access_log /var/log/nginx/access.log anonymized;

Das Ergebnis

Das Ergebnis im Logfile sieht in verkürzter Form folgendermaßen aus:

2001:16b8:22b7:bb00:: - - [22/Nov/2017:21:13:04 +0100] TLSv1.2/ECDHE-RSA-AES256-GCM-SHA384 "GET /.../... HTTP/2.0" 200 17401 "..." "Mozilla/5.0"
162.243.22.0 - - [22/Nov/2017:21:11:11 +0100] TLSv1.2/DHE-RSA-AES256-GCM-SHA384 "GET /.../... HTTP/1.1" 200 18356 "..." "Mozilla/5.0"

 

Wenn sich nach einigen Tagen aussagekräftige Daten angesammelt haben kann mit grep nach TLSv1/  oder allgemein nur nach TLS gefiltert werden.

grep TLSv1/ /var/log/nginx/access.log

Im Ergebnis zeigt sich dass die meisten Systeme TLSv1.2 nutzen, die Anzahl der Aufrufe über TLSv1 ist aber nach wie vor sehr hoch. Auf jeden Fall viel zu hoch um die Unterstützung für diese Version Serverseitig zu deaktivieren.


Dieser Text ist lizensiert unter einer Creative Commons Namensnennung 4.0 International Lizenz.

1 Comment

  1. Max Eichelberger

    Hallo,

    einen ähnliches Vorgehen habe ich vor ca. einem Monat auf meiner Website durchgeführt. Dabei ist mir aufgefallen, dass unter den Verbindungen mit TLSv1 viele Bots sind. Namentlich
    * http://mj12bot.com/,
    * ein Bot, der unter dem User-Agent „Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)“ nach Injection-Attacks sucht,
    * https://www.mediatoolkit.com/
    * http://www.seokicks.de/robot.html
    * https://extlinks.com/Bot.html
    Auf meine Kontaktversuche gab es, falls sie beantwortet wurden, ausweichende Antworten.
    Es hilft vielleicht, wenn Sie die in Ihren Logeinträgen gefundenen Bots zu erreichen versuchen.

    Mit freundlichen Grüßen
    Max Eichelberger