CaptivePortal Check mit PiHole

Posted by quark007 | Posted in Computer & IT, Smartphone & Android | Posted on 05-04-2021-05-2008

0

Schon vor langer Zeit hatte ich mit den Artikel von Kuketz-Blog vorgenommen und bei meinen Smartphones den Captiveportal Check umgestellt. Doch bei einem Smartphone ging das nicht und ich hatte keine Idee wieso. Egal was ich eingestellt hatte, es wurde immer noch der check auf google/gstatic/android gelaufen ist.

Da mein PiHole ja sowieso läuft und von Hausaus einen Webserver mitbringt, sollte sich das doch lokal einstellen lassen. Seit der neuesten Version von PiHole gibt es auch die Möglichkeit DNSrecords direkt einzugeben. Damit können also die CaptivePortal Adressen direkt auch auf das PiHole selbst geleitet werden ohne umwege über die hosts-datei.

Zunächst habe ich für captiveportal eine eigenen lighttpd vhost angelegt:

$HTTP["host"] =~ "connectivitycheck" {
        server.document-root = "/var/www/captiveportal/"
        include "/var/www/captiveportal/rewrite.conf"
}
$HTTP["host"] =~ "msftconnecttest.com" {
    server.document-root = "/var/www/captiveportal/"
    $HTTP["url"] =~ "^/connecttest.txt$" {
        url.redirect = ( "" => "index.php" )
        url.redirect-code = 302
    }
    $HTTP["url"] =~ "^/redirect$" {
        url.redirect = ( "" => "index.php" )
        url.redirect-code = 302
    }
}

Anschließend musste noch die index.php angelegt werden, die nichts anders macht als den Status-Code 204 zurückzugeben.

<?php header("HTTP/1.0 204 No Content"); ?>

Ein Problem gibt es noch: von einigen Android-Versionen wird die folgende URL aufgerufen: connectivitycheck.gstatic.com/generate_204 (ohne Slash am Ende). Anfangs hatte ich versucht über eine 301 Weiterleitung den 204 Status auszugeben, was aber nicht funktioniert hat (da Android für diesen Check der Weiterleitung nicht folgt).

Ich habe mich dafür dann dem mod-rewrite Modul bedient und folgende Regel erstellt:

url.rewrite-if-not-file = (
    "^/(.+)/?$" => "/index.php"
)

Dieses Regel-File ist in der Seiten-Konfiguration (siehe oben) schon enthalten (mittels include). Es leitet einfach jede Anfrage auf die index.php um, wenn es die Datei nicht gibt.

Damit erhalte ich nun endlich nicht mehr die nervigen Benachrichtigungen, dass ich mich im Netzwerk anmelden müsste. Das lässt sich auch ganze einfach prüfen, indem im Browser die URL connectivitycheck.gstatic.com/generate_204 (mit und ohne Slash) aufgerufen wird und über die Entwicklerwerkzeuge der Rückgabe-Statuscode geprüft wird. Es darf dort NUR 204 stehen und zu jeder Anfrage auch nur eine Verbindung geben (sonst hätte man wieder die Weiterleitung per 301, die für diesen Zweck nicht funktioniert).

An dieser Stelle sei auch auf die wirklich guten Beitrag zu weiteren Möglichkeiten mit dem PiHole verweisen.

Honor 7 mit hohem Stromverbrauch

Posted by quark007 | Posted in Smartphone & Android | Posted on 27-02-2016-05-2008

0

Heute habe ich ein neues Honor 7 (gekauft in den Blitz-Deals von Amazon) eingerichtet. Geladen wurden es bereits über Nacht und hat bis heute morgen auch kaum an Akku verloren. Heute habe ich dann das Gerät das erste mal mit dem Internet verbunden und das Google-Konto eingerichtet. Damit fing der hohe Stromverbrauch an. Zwischen 11:00 und 15:00 ist der Akku von ~ 85% auf etwa 30% gesunden bei weniger als 30 Minuten SOT (ScreenOnTime). In dieser Zeit habe ich das Google-Konto einmal gelöscht und mich mit einem anderen neu angemeldet, mehr ist nicht passiert.Ich konnte mir den Verbrauch also nicht erklären. Ein Blick in die Akku-Statistik hat meinen Verdacht auf die PlayDienste gelengt und wollte sie beenden. Ohne Root war das aber leider nicht möglich. Aufgefallen ist mir außerdem, dass das Gerät die ganze Zeit nicht in den DeepSleep gegangen ist, also bei ausgeschaltetem Bildschirm immer noch voll aktiv war. 3G/4G war nicht aktiv, die Bildschirmhelligkeit auf niedrigster Stufe und alle Apps beendet. Für mich also wirklich ein Rätsel

Letzendlich habe ich mich daran erinnert, dass beiScreenshot_2016-02-27-22-26-24[1] meinem Nexus4 ein PlayDienste-Update gelaufen ist, nachdem ich über Threema einige Nachrichten erst bei entsperren des Handys erhalten habe. Um dieses Phänomen von vorne herein auszuschließen habe ich auch bei dem Honor 7 das Update eingespielt (LINK) und auch den PlayStore aktualisiert (unter Einstellungen auf die BuildNummer klicken, dann erfolgt das Update automatisch).
Seitdem hat sich der Akkuverbrauch auf weniger als 1% pro Stunde reduziert und das bei aktiviertem WLan und gelegentlich aktiviertem Bildschirm.

Ich hoffe damit dem ein oder anderen viel Google-Arbeit und Ärger zu ersparen. Zu dem Smartphone selber wird eventuell auch noch ein Bericht über die Einrichtung, das Unlocken und Rooten folgen.

Lightning zeigt synchronisierte Termine nur als “vorläufig” an

Posted by quark007 | Posted in Computer & IT, Smartphone & Android | Posted on 22-04-2015-05-2008

6

Seit ich meine OwnCloud Installation auf dem Server rund laufen habe, bin ich dabei immer mehr Dienste nach Hause zu holen. Die Synchronisation von Kontakten und Kalendern mit dem Smartphone funktioniert problemlos und nun sollte auch der Thunderbird auf meinen Laptops eingebunden werden.

Thunderbird Lightning vorläufigFür die Kalender benutze ich schon seit längerem das Lightning-Addon. Bislang immer nur mit meinem Mailprovider posteo. Das hat wunderbar funktioniert und die Synchronisation mit OwnCloud ließ sich genauso einfach einrichten. Nach dem ersten Sync ist mir aber aufgefallen, dass alle Termine, die nicht im Thunderbird erstellt wurden ausgeraut sind. In den Termin-Einstellungen findet man in der Menuleiste unter “Einstellungen -> Status”, dass dieser bei synchronisierten Terminen auf voläufig steht. Deshalb werden die Termine halb-transparent dargestellt.

Wieso das so gemacht wird, habe ich nicht in Erfahrung bringen können. Auf einigen Seiten [1] [2] habe ich aber einen Workaround gefunden, wie man sich diese Termine zumindest alle gleich anzeigen lassen kann. Da ich den Status sowieso nicht nutze, war das für mich vollkommen ausreichend.

Es werden dabei nur die Anzeige-Einstellungen angepasst und an den Terminen selber nichts geändert. Dazu müssen folgende Zeilen in die Datei
[Laufkwer]:\[Profilordner]\extensions\[Lightning-Ordner]\chrome\skin\common\calendar-views.css

eingefügt werden:

 calendar-event-box[invitation-status="TENTATIVE"],
 calendar-editable-item[invitation-status="TENTATIVE"],
 calendar-month-day-box-item[invitation-status="TENTATIVE"],
 calendar-event-box[status="TENTATIVE"],
 calendar-editable-item[status="TENTATIVE"],
 calendar-month-day-box-item[status="TENTATIVE"],
 agenda-richlist-item[status="TENTATIVE"],
 agenda-richlist-item[invitation-status="TENTATIVE"]
 {
 opacity: 1 !important;
 }

Thunderbird Lightning mit WorkaroundDamit wird der Status vorläufig mit einer Sichtbarkeit von 100% versehen und unterscheidet sich in dem Punkt nicht mehr von den anderen Terminen.

Die Synchronisation von Kontakten mit Thunderbird läuft bei mir über das Addon SOGo Integrator Thunderbird extension von Sogo. Eine Anleitung zur Installation ist hier zu finden.

Self-Signed Zertifikat für Multi-Domain Server

Posted by quark007 | Posted in Computer & IT, Smartphone & Android | Posted on 31-03-2015-05-2008

2

Wie bereits in den anderen Posts zu lesen ist, habe ich meinen HP MicroServer mit OpenMediaVault aufgesetzt. Das hat alles auch wunderbar funktioniert, bis ich zusätzlich OwnCloud installiert habe, um von der Google-Synchronisation von Kontakten und Kalendereinträgen unabhängig zu werden. Doch OwnCloud funktioniert nur über die sichere(re) HTTPS-Verbindung, für die ein Zertifikat notwendig ist. Da ich für den Heimbereich kein öffentlich zertifiziertes Zertifikat benötige, habe ich mir self-signed-Zertifikate erstellt, für jede Seite natürlich ein eigenes. Das war mir irgendwann zu bunt, da auch die Verwaltung in Android auf die Dauer lästig wurde.

Ich habe sehr viel herum probiert und auch viel im Internet gesucht und bin habe die Möglichkeit gefunden SubjectAltNames (SAN) zu definieren. Mit dieser Erweiterung lässt sich ein Zertifikat für mehrere Domains erstellen. Anders als ein Wildcard-Zertifikat (*.domain.tld) werden die Domains definiert und das Zertifikat ist nur für diese gültig. Ich habe sogar Anleitungen dafür gefunden, die aber leider nicht selbst-signierte Zertifikate erstellen sondern CSR-Dateien, also Zertifizierungsanfragen an öffentliche Stellen. Nach langem Suchen habe ich diese Anleitung gefunden, die ich etwas näher erläutern möchte:

How can I generate a self-signed certificate with SubjectAltName using OpenSSL?

Da ich zuvor schon viele HowTos probiert hatte, war meine openssl.cnf-datei (unter /etc/ssl/) schon arg verändert, dass ich mir eine Standard-Konfiguration aus dem Internet gesucht habe. Ich habe dies verwendet:

http://web.mit.edu/crypto/openssl.cnf

Jetzt kann man nach der obigen Anleitung weiter vorgehen.

  1. zunächst öffnet man die Datei openssl.cnf. Unter neueren Debian Versionen liegt sie unter /etc/ssl/ Falls sie nicht vorliegt erstellt man sie mit sudo nano /etc/ssl/openssl.cnf und fügt die Zeilen der Standard-Version ein
  2. Am Ende der Datei fügt man nun neue Zeilen an, nach diesem Muster
    [alternate_names]
    DNS.1        = example.com
    DNS.2        = www.example.com
    DNS.3        = mail.example.com
    DNS.4        = ftp.example.com
    
  3. als nächstes sucht man in der Datei (Strg + W) die Stelle [v3_ca] und fügt folgende Zeilen dazu
    [v3_ca]
    subjectAltName      = @alternate_names

    damit werden die Alternativen Domainnamen in das SAN-Attribut übernommen

  4. Zudem kann man aus der Zeile
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment
    

    das nonRepudiation herausnehmen. Laut Beschreibung ist es nutzlos und von Leuten eingeführt, die sich als Anwälte sehen.

  5. als nächstes sucht man in der Datei den Bereich [CA_default]: und die Zeilen
    # Extension copying option: use with caution.
    # copy_extensions = copy

    Falls diese nicht vorliegen, muss man sie hinzufügen und die Auskommentierung # vor copy_extensions entfernen. Nur dann werden die SANs auch wirklich in das Zertifikat übernommen.

  6. Damit kann es losgehen. Zunächst erzeugen wir unseren privaten Schlüssel. Dieser wird in dem Verzeichnis abgelegt, in dem wir uns momentan befinden. Ich habe mir unter /etc/ssl/ ein neues Verzeichnis angelegt (sudo mkdir /etc/ssl/new_cert/) und bin dorthin gewechselt (cd /etc/ssl/new_cert). Dann erzeugen wir unseren privaten Schlüssel:
    sudo openssl genrsa -out private.key 3072
  7. folgend wird mit dem privaten Schlüssel ein öffentlicher Schlüssel erzeugt:
    sudo openssl req -new -x509 -sha256 -days 3650 -nodes -key /etc/ssl/new_cert/private.key -out /etc/ssl/new_cert/omv.crt

    Die Fragen, die einem gestellt werden sollte man beantworten, muss es aber nicht. Mit [Enter] bleibt das Feld leer und es kommt die nächste Frage. Wichtig ist aber die Frage nach dem  CommonName. Dort ist es wichtig die IP-Adresse des Servers anzugeben.

  8. Anschließend kann man sich noch versichern, dass die SANs auch ordnungsgemäß eingetragen sind:
    sudo openssl x509 -in /etc/ssl/new_cert/omv.crt -text -noout

    Dabei sollte man auf die Zeile X509v3 Subject Alternative Name: achten. In der Zeile darunter müssen die zuvor definierten SANs zu finden sein

Wie man die damit erstellten Zertifikate in Nginx oder Apache einbindet findet man zu genüge z.B. hier bzw. hier.

Damit war es mir endlich möglich sowohl die OpenMediaVault-WebGUI, das WebMysql, Owncloud und auch meine Webserver mit einem Zertifikat über HTTPS zu erreichen. Wichtig war das insbesondere um mit DavDroid (F-Droid) und owncloud-SMS die Synchronisation mit OwnCloud zu ermöglichen.

Android-Update bei Telefonverschlüsselung

Posted by quark007 | Posted in Smartphone & Android | Posted on 17-02-2015-05-2008

0

Als ich mich heute wieder einmal über das nicht funktionierende WLan-Tethering aufgeregt habe, kam mir die Idee doch mal nach einem Update zu schauen. Ich wollte keine neue Android-Version, das war auch gar nicht nötig, da ein Update für meine Version vorlag. Ich benutze übrigends das PurityRom auf AOSP 4.4.4 auf meinem Nexus 4.

Doch das Update ging nicht so einfach wie erwartet. Dadurch, dass die Benutzerdaten erst beim Systemstart entschlüsselt werden und dadurch im Recovery-Modus kein Zugriff auf die Daten möglich ist, funktionierte auch das Update nicht. Ich erhielt immer die Meldung, dass die SD-Karte nicht gemountet werden konnte.

Nach einiger Recherche habe in einem Blog den Hinweis gefunden, dass über Sideload im CWM (vermutlich auch TWRP) ein Upload auf das Smartphone möglich ist. Zuvor wollte ich noch ein Nandroid-Backup machen, doch das geht ja auch nicht. Wenn die Benutzerdaten aber einmal entschlüsselt sind, ist der Zugriff möglich. Mit der App “Online Nandroid Backup” ist das sogar problemlos geführt möglich.

Als nächstes muss ADB (Android Debug Bridge) installiert werden, um mittels 02-17 Online Nandroid Backupsideload im Recoverymodus Dateien an das Smartphone senden zu können. Ich habe mich für die minimale Variante entschieden, die auf xda-developers erhältlich ist. Außerdem ist der Download der aktuellen ROM-Version notwendig. Der Einfachheit halber sollte man die Datei in “update.zip” umbenennen und in den gleichen Ordner wie das Minimal ADB and Fastboot kopieren.

Dann kann es losgehen:

  1.  das Smartphone in den Recovery-Modus booten und über “Install zip -> From Sideload” den Dateiempfang starten
  2. mit der CMD.exe in den Minimal ADB-Ordner gehen (oder über das “Startmenü -> Programme -> Minimal ADB and Fastboot -> Minimal ADB and Fastboot” aufrufen)
  3. den Befehl “adb sideload update.zip” in der cmd ausführen (alternativ anstelle von “update.zip” den absoluten Dateipfad in Anführungszeichen eingeben, falls der Download wo anders liegt bzw. anders benannt ist)

02-17 minimalADB

Damit wird das Update auf das Smartphone übertragen und im Anschluss direkt installiert. Wenn nötig müssen nun Firewall, AdAway, xPrivacy und Co. wieder neu installiert werden, da die Einträge in die entsprechenden Systemdateien beim Upgrade gelöscht werden.

Jetzt funktioniert endlich mein Wifi-Tethering und ich brauche keine Angst vor der nächsten Sicherheitslücke in einer zu alten Android-Version zu haben.