Datenschützende Analyseinstrumente

F-Droid vermeidet immer, soweit wie möglich, Anwender auszuspionieren. Wir werden nie ein Konto fordern und wir haben viele Anstrengungen unternommen, damit es selbst dem f-droid.org-Server schwerfällt, Nutzer zu überwachen. Wir sehen aber auch, dass Nutzungsdaten wertvoll sind. Ihre Verwendung kann dabei helfen, den Beliebtheitsgrad herauszufinden und App-Entwicklern eine Rückmeldung zu verschaffen, was Anwender mögen.

Nachdem wir uns jahrelang von der Datennutzung wegbewegt haben, einschließlich der Deaktivierung von Download-Zählern auf f-droid.org, haben wir ein Experiment zur Erfassung der Nutzung ohne Nutzerüberwachung gestartet. Wir bauen dabei auf Arbeiten der Projekte Tor und Guardian auf. Zur ersten Erprobung haben wir die Zugriffsprotokollierung auf https://search.f-droid.org und https://mirror.f-droid.org/ freigegeben. (Hinweis: Suchen auf f-droid.org erfolgen möglicherweise komplett client-seitig über JavaScript, in diesem Fall werden Suchen niemals search.f-droid.org treffen und daher nicht aufgezeichnet werden).

Ein Vorbehalt hierbei ist, dass Nginx im Gegensatz zu Apache keine angepassten Zeitformate erlaubt, die Web-Protokolle also das genaue Datum und die Zeit jedes Treffers enthalten werden. Die Zeitzone wird genullt. Die Protokollrohdaten werden nicht veröffentlicht und sie werden bereinigt, bevor sie in irgendwelche Analysesysteme wie Matomo/Piwik eingespeist werden. Außerdem erlaubt Nginx keine Anpassung der Fehlerprotokoll-Formate, Fehler werden also die kompletten Informationen besitzen. Die Daten zu Fehlern werden daher, ohne vollständige Bereinigung, nicht in der Analyse verwendet werden und nur für einen kurzen Zeitabschnitt aufgehoben.

Unsere Konfiguration

Auf unseren Servern läuft Debian, was die Befehle in diesem Kontext vorgibt. Zuerst muss sichergestellt sein, dass Nginx mit der Erweiterung “geoip” eingerichtet ist. Das versetzt Nginx in die Lage IP-Adressen in Ländercodes umzuwandeln, damit Ländercodes anstatt IP-Adressen protokolliert werden.

# apt-get install libnginx-mod-http-geoip geoip-database

Dann wird die angepasste Protokollierung in /etc/nginx/nginx.conf eingerichtet:

```conf geoip_country /usr/share/GeoIP/GeoIP.dat; log_format privacy ‘0.0.0.0 - $remote_user [$time_local] “$request” $status $body_bytes_sent “$http_referer” “-“ $geoip_country_code’;

access_log /var/log/nginx/access.log privacy; ```

Dies bewirkt, dass die Zugriffsprotokolldaten ungefähr so aussehen:

```console

tail /var/log/nginx/access.log

0.0.0.0 - - [12/Apr/2019:07:01:37 +0000] “GET /android-free/repository/ HTTP/1.1” 200 949 “-“ “-“ PL 0.0.0.0 - - [12/Apr/2019:07:02:27 +0000] “GET /robots.txt HTTP/1.1” 200 24 “-“ “-“ US 0.0.0.0 - - [12/Apr/2019:07:02:27 +0000] “GET /android-free/repository/ HTTP/1.1” 200 949 “-“ “-“ US 0.0.0.0 -

  • [12/Apr/2019:07:04:08 +0000] “GET / HTTP/1.1” 200 278 “-“ “-“ BR 0.0.0.0 -
  • [12/Apr/2019:07:06:41 +0000] “GET /android-free/repository/ HTTP/1.1” 200 949 “-“ “-“ US 0.0.0.0 - - [12/Apr/2019:07:11:45 +0000] “GET /android-free/repository/ HTTP/1.1” 200 949 “-“ “-“ FR 0.0.0.0 - - [12/Apr/2019:07:16:32 +0000] “GET / HTTP/1.1” 200 278 “-“ “-“ CA 0.0.0.0 - - [12/Apr/2019:07:16:49 +0000] “GET /android-free/repository/ HTTP/1.1” 200 949 “-“ “-“ GB 0.0.0.0 - - [12/Apr/2019:07:19:42 +0000] “GET / HTTP/1.1” 200 278 “-“ “-“ VN 0.0.0.0 - - [12/Apr/2019:07:20:20 +0000] “GET /robots.txt HTTP/1.1” 200 24 “-“ “-“ US 0.0.0.0 - - [12/Apr/2019:07:21:51 +0000] “GET /android-free/repository/ HTTP/1.1” 200 949 “-“ “-“ US 0.0.0.0 - - [12/Apr/2019:07:26:57 +0000] “GET /android-free/repository/ HTTP/1.1” 200 949 “-“ “-“ DE 0.0.0.0 - - [12/Apr/2019:07:32:01 +0000] “GET /android-free/repository/ HTTP/1.1” 200 949 “-“ “-“ SE 0.0.0.0 - - [12/Apr/2019:07:32:23 +0000] “GET /android-free/repository/sys-img/android/sys-img-9.0.0_r33-sdk.xml HTTP/1.1” 200 904 “-“ “-“ US 0.0.0.0 - - [12/Apr/2019:07:37:04 +0000] “GET /android-free/repository/ HTTP/1.1” 200 949 “-“ “-“ DE 0.0.0.0 - - [12/Apr/2019:07:38:55 +0000] “\x03\x00\x00/*\xE0\x00\x00\x00\x00\x00Cookie: mstshash=Administr” 400 173 “-“ “-“ RU 0.0.0.0 - - [12/Apr/2019:07:39:12 +0000] “GET / HTTP/1.1” 200 278 “-“ “-“ EC ```