Piwik – Umgehen von Ad Blockern

Ad Blocker beeinflussen nicht nur das Anzeigen von nerviger Werbung auf Webseiten, sondern sie blockieren ebenfalls die Analyse Skripte auf den Seiten wie Piwik oder Google Analytics.

Sie blockieren diese Skripte, um bspw. Marketing-Tracking von Drittanbieter-Werbetreibenden, z. B. Google, einzudämmen. Wenn man Piwik Analytics oder eines der meisten anderen selbst gehosteten Systeme verwendet, kann man diese Blockierung allerdings umgehen, indem man die URL umschreibt.

Adblocker suchen auf Webseiten nämlich bspw. nach Keywords in diesen URLs wie http://…/piwik/piwik.js

Diese werden dann an der Ausführung gehindert.

Umschreiben der URL

Zunächst wird die Haupt URL via .htaccess oder Seitenkonfiguration geändert:

RewriteEngine On
RewriteRule ^wieauchimmerdieneueurlheissensoll/(.*) /piwik/piwik.$1 [L]

Der neue Pfad kann nach Belieben geändert werden. Der zweite Pfad muss die eigentliche Installation von Piwik beinhalten.

Ändern Piwik Tracking Code

Anschließend muss der Tracking Code in den Seiten so angepasst werden, dass er auch den neuen Pfad verweist, damit die Ad Blocker nicht mehr anschlagen.

So sollte der Code vor der Änderung aussehen:

<!-- Piwik -->
<script type="text/javascript">
 var _paq = _paq || [];
 /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
 _paq.push(['trackPageView']);
 _paq.push(['enableLinkTracking']);
 (function() {
 var u="//www.example.com/piwik/";
 _paq.push(['setTrackerUrl', u+'piwik.php']);
 _paq.push(['setSiteId', '1']);
 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
 g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
 })();
</script>
<!-- End Piwik Code -->

Und so sollte der Code mit den geänderten Werten aussehen:

<!-- Piwik -->
<script type="text/javascript">
 var _paq = _paq || [];
 _paq.push(['trackPageView']);
 _paq.push(['enableLinkTracking']);
 (function() {
 var u="//www.example.com/wieauchimmerdieneueurlheissensoll/";
 _paq.push(['setTrackerUrl', u+'php']);
 _paq.push(['setSiteId', 2]);
 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
 g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'js'; s.parentNode.insertBefore(g,s);
 })();
</script>
<!-- End Piwik Code -->

Zeile 7: Hier muss die URL auf die geänderte URL angepasst werden, wie sie in der Rewrite-Regel definiert wurde.

Zeile 8,11: Hier wird “piwik.” entfernt. Manche Ad Blocker blockieren piwik.[php language=”/js”][/php] oder einfach das ganze Wort wie durch ABP.

Nach diesen Änderungen sollte Piwik auch Informationen sammeln können, wenn Ad Blocker verwendet werden. Tracker wie Ghostery listen Piwik bspw. nicht mehr als Tracker auf der Seite:

 

 

 

Advertisements

Upgrade php5.5 auf 7.0 unter Ubuntu

PHP in der aktuell installierten Version kann man sich via php -v anzeigen lassen.

Um ein Upgrade auf eine neue Version von PHP durchzuführen, kann man Ondřej Surý’s PPA nutzen. Er pflegt die PHP Pakete unter Debian. Die PPA installiert man wie folgt:

apt-get install software-properties-common
add-apt-repository ppa:ondrej/php
apt-get update
apt-get install php7.0

Nutzt man MySQL, muss dieses Paket ebenfalls auf die neue Version gebracht werden:

apt-get install php7.0-mysql

Webserver anpassen

Die alte PHP Version ist immer noch installiert. Um dem Apache mitzuteilen, dass er die neue Version nutzen soll, muss das alte PHP-Modul deaktiviert und das neue aktiviert werden:

a2dismod php5
a2enmod php7.0

Webserver neu starten und fertig.

service apache2 restart

Zum Testen kann man wieder php -v eingeben oder aber die info.php anlegen und sich die aktuellen Einstellungen anzeigen lassen:

<?php
phpinfo();
?>

Cloudflare und Piwik: Anzeige Origin IP

Will man Piwik auf einem Server nutzen, der sich hinter Cloudflare befindet, müssen folgende zwei Dinge beachtet werden:

Apache: Installation von mod_cloudflare

Das Modul mod_cloudflare erlaubt es, die echte IP Adresse des Besuchers in Logs und co. anzuzeigen.

Heruntergeladen werden kann das Modul bei Cloudflare.

Ubuntu:

wget https://www.cloudflare.com/static/misc/mod_cloudflare/ubuntu/mod_cloudflare-xenial-amd64.latest.deb

dpkg -i mod_cloudflare-xenial-amd64.latest.deb

service apache2 restart

Rocket Loader deaktivieren

In den Cloudflare Einstellungen muss unter den Performance Einstellungen der Rocket Loader auf manuell oder aus geschaltet werden.

WordPress und Cloudflare: ERR_SSL_PROTOCOL_ERROR

Nach der Umstellung auf Cloudflare und der Aktiv Schaltung des Dienstes, ist die Seite nicht mehr erreichbar.

ssl_error

Das liegt daran, dass das Zertifikat auf Seiten Cloudflares noch nicht erzeugt und registriert ist. Der Status im Crypto Reiter sollte “Authorizing Certificate” anzeigen.

ssl-authorisierung

Während dieser Zeit werden Fehlermeldungen ausgegeben, wenn man versucht die Seite via https:// aufzurufen.

registrierung

Nach der Registrierung sollte alles einwandfrei laufen und ein SSL Zertifikat von Cloudflare ausgeliefert werden. Im “Free-Modus” kann hier kein anderes Zertifikat wie eins von Let’s Encrypt durchgereicht und angewendet werden!

cert

WordPress und Cloudflare: Let's Encrypt Zertifikat nutzen

By Default nutzt der Let’s Encrypt client für die ACME Authentifizierung die DVSNI Methode. Das wird nicht funktionieren, wenn eine Domain Cloudflare aktiv hat, da alle SSL (TLS) Verbindungen an den Cloudflare Servern getrennt werden und der ACME Server niemals das Zertifikat sehen wird, dass der Ursprungsserver ausgestellt hat. Die alternativen Methoden zur Validierung wie DNS oder HTTP werden aber unterstützt.

Das heißt, dass man Cloudflare nicht abschalten muss, um Let’s Encrypt nutzen zu können.

Man muss folgendes Kommando absetzen, um dem Client mitzuteilen, dass er die Verifizierung via HTTP durchführen soll:

/opt/letsencrypt/letsencrypt-auto certonly --webroot --webroot-path /var/www/ --renew-by-default --email xxx@xxx.de --text --agree-tos -d tj-braun.de -d http://www.tj-braun.de -d cloud.tj-braun.de -d mail.tj-braun.de -d imap.tj-braun.de -d smtp.tj-braun.de

Die erfolgreiche Erstellung sieht ähnlich dem folgenden Output aus:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for tj-braun.de
http-01 challenge for www.tj-braun.de
http-01 challenge for cloud.tj-braun.de
http-01 challenge for mail.tj-braun.de
http-01 challenge for imap.tj-braun.de
http-01 challenge for smtp.tj-braun.de
Using the webroot path /var/www for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0007_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0007_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/www.tj-braun.de/fullchain.pem. Your cert will
   expire on 2017-01-16. To obtain a new or tweaked version of this
   certificate in the future, simply run letsencrypt-auto again. To
   non-interactively renew *all* of your certificates, run
   "letsencrypt-auto renew"

WordPress und Cloudflare: Einrichtung

Cloudflare ist ein dezentral aufgestelltes Content Delivery Network (CDN) mit anhängigem DNS. Es fungiert als Reverse Proxy und wird vor die eigentlichen Webserver geschaltet. Dadurch kann es als Cache dienen, der die Inhalte schneller bereit stellen kann und die Webseite somit schneller machen kann. CDNs können aber auch bei DDoS Attacken helfen und die Last vom eigentlichen Server fern halten und bei kurzfristigen Downtimes helfen. Ein weiterer Vorteil ist, dass Cloudflare seit einiger Zeit die gecachten Webseiten im neuen HTTP/2-Protokoll ausliefert. Das bringt ebenfalls Geschwindigkeitsvorteile und Google scheint das neue Protokoll pushen zu wollen.

Einrichtung von Cloudflare

Zunächst muss man https://www.cloudflare.com aufrufen, sich dort registrieren und die URL der Webseite eingeben, die man verbinden möchte.

cloudflare-webseite-hinzufuegen

Anschließend werden die aktiven DNS Server der Domain gescannt. Das kann etwas dauern. Als Ergebnis erhält man eine Übersicht über die DNS-Zonen. Eine orange Wolke bedeutet, dass hier ein Caching über Cloudflare eingestellt ist und der Traffic über Cloudflare selbst läuft. Eine graue Wolke bedeutet, dass für diesen Host das Caching deaktiviert ist und Cloudflare lediglich den DNS Dienst übernimmt. Der Traffic wird also weiter über den eigenen Webserver laufen.

Hier wird beispielsweise nur der Traffic zu WordPress gecached. Der Rest nicht.

dns-cloudflare

[fusion_alert type=”general” accent_color=”” background_color=”” border_size=”1px” icon=”” box_shadow=”no” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=””]

Bei den DNS Einträgen ist es wichtig, dass auch wirklich alle Inhalte des bisherigen Providers auf den Cloudflare DNS übernommen werden. TXT Einträge wurden bei mir nicht von Beginn an übernommen und mussten händisch hinterlegt werden.

[/fusion_alert]

Anschließend wird der Plan ausgewählt. “Free” sollte für den Anfang ausreichen. Ein Upgrade ist während des Betriebs unterbrechungsfrei möglich.

DNS/Nameserver einrichten

Nach der Einrichtung muss man die eigene Domain auf Cloudflare umleiten.

Dieser Punkt ist ein Muss. Wer seine DNS-Einstellungen nicht verändern kann, der hat keine Chance, Cloudflare zu nutzen. Insbesondere User, die Webseite und Hosting beim gleichen Anbieter haben, können hier Probleme bekommen.

change-nameserver

Änderung anhand INWX

Da ich als Domainregistrar INWX nutze, wird die Umstellung hier an dem Beispiel erläutert.

Ein einfaches Abändern der DNS Server bzw. NS Records der Domain ist nicht möglich, da der SOA Eintrag fix auf den ersten DNS Server zeigt und es so zu Loops kommen kann und die Namensauflösung nicht mehr sauber funktioniert. Aus diesem Grund muss die komplette Domain auf einen externen DNS Server ausgelagert werden. Das ist in dem Fall Cloudflare.

Dazu ruft man die Domainliste auf, wählt die betroffene Domain und klickt in der Übersicht auf externe Nameserver. Dort werden dann die von Cloudflare vorgegebenen DNS Server hinterlegt.

externe-nameserver-inwx

Nachdem die Cloudflare-Nameserver eingetragen wurden, kann es bis zu 24 Stunden dauern, bis alles reibungslos funktioniert.

Die korrekten Einstellungen kann man auf Seiten wie mxtoolbox.com testen.

mxtoolbox-dns-check

Bis die DNS Einstellungen übernommen wurden wird auf der Cloudflare Seite der Pending Status ausgerufen.

cloudflare-web-performance-security

Status nach erfolgreicher Inbetriebnahme:

cloudflare-overview

Kontrolle der Auslieferung via Cloudflare

Trotz des “Active” Status kann es sein, dass die Webseite immer noch über den eigentlichen Webserver ausgeliefert wird. Das passiert immer dann, wenn der Cache-Header “no-store, no-chache” ausliefert. Dadurch erhält Cloudflare die Anweisung, dass die Webseite nicht im Cache abgelegt werden darf und muss jeden Aufruf wieder auf den Webserver weiterleiten. Dadurch kann keine Geschwindigkeitsoptimierung erfolgen.

Kontrolliert werden kann der Cache-Header z.B. durch den Befehl curl -I https://www.tj-braun.de

curl

Hat man diese Header Definition (WordPress setzt sie bspw.) gibt es dennoch eine Lösung: Cloudflare Page Rules. Das sind Regeln (von denen man in der Free-Version 3 definieren kann), die dafür sorgen, dass die Webseiten dennoch gespeichert und ausgeliefert werden.

Dafür unter dem Tab “Page Rules” zuerst das Pattern für die Webseite eintragen http://www.domain.tld/* und dann folgende Regel erstellen:

Custom Caching: Cache everything

Sometimes cache headers are set on the server-side or by a CMS solution like WordPress. If you choose to Cache Everything, CloudFlare will respect these headers unless you choose to overwrite them.

Edge cache expire TTL

To overwrite any default headers, choose a time from the drop-down menu. This is the refetch time for when CloudFlare checks the origin server for a new resource.

 

cache

Damit der Admin Bereich nicht gecached wird, wird eine zweite Regel erstellt.

Pattern: http://www.domain.tld/wp-*
Custom caching: Bypass cache

[fusion_alert type=”general” accent_color=”” background_color=”” border_size=”1px” icon=”” box_shadow=”no” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=””]

Die Einstellung des Admin Bereichs muss VOR der allgemeinen Definition stehen, damit der Admin Bereich auch wirklich nicht gecached wird.

[/fusion_alert]

SquidAnalyzer – Log Analyse für Squid3

Nutzt man Squid als Proxy, möchte man eventuell eine Auswertung der Internetnutzung starten.

Dazu eignet sich Squidanalyzer, welcher die erzeugten Logfiles des Proxys visuell aufbereitet.

Installation

Download des Pakets:
wget http://downloads.sourceforge.net/project/squid-report/squid-report/6.5/squidanalyzer-6.5.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fsquid-report%2F&ts=1466775184&use_mirror=freefr
mv squidanalyzer-6.5.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fsquid-report%2F squidanalyzer-6.5.tar.gz

Entpacken:
tar xfvz squidanalyzer-6.5.tar.gz
Kompilieren
perl Makefile.PL
make && make install

Anpassen der jeweiligen Apache Konfiguration (/etc/apache2/sites-enabled/squidanalyzer.conf)

ServerAdmin braun@xxx.de
DocumentRoot "/var/www"
Alias /squidreport /var/www/squidanalyzer
<Directory "/var/www/squidanalyzer">
Options +FollowSymLinks +FollowSymLinks +MultiViews
AllowOverride All

ServerSignature Off
LogLevel info
ErrorLog /var/log/apache2/squidanalyzer-error.log
CustomLog /var/log/apache2/squidanalyzer-access.log combined

Anpassen der Squid Reports
nano /etc/squidanalyzer/squidanalyzer.conf
Einmaliges Ausführen der Loganalyse:
/usr/bin/squid-analyzer > /dev/null 2>&1
Analyse als Cronjob hinterlegen
crontab -e
0 2 * * * /usr/local/bin/squid-analyzer > /dev/null 2>&1

SquidAnalyzer 6.5 Report