10
Jun 18

HSTS und nur noch HTTPS / Privacy Checker

Durch einen Beitrag im Netbib Weblog bin ich jüngst auf den Webseiten-Privacy-Checker von dataskydd.net  aufmerksam geworden. Beflügelt durch die erfolgreiche Verlängerung der Letsencrypt-Zertifikate, welche ich seit drei Monaten nutze, war ich motiviert auch andere suboptimale Zustände zu beheben.

So war der Blog bisher auch ohne Verschlüsselung erreichbar. Und auch die HTTP Strict-Transport-Security-Angabe (HSTS) war bisher nicht gesetzt. Ich zweifelte zuerst, ob ich diese Einstellung in meinem Hosteurope-Webpack tätigen kann. Glücklichweise zu unrecht. Dank eines Blogeintrages von Janiczek habe ich die Verbesserung dieses Aspektes mit einem simplen Copy&Paste in die .htaccess-Datei erreicht.

RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>

Jetzt wurmen mich nur noch ein wenig die Grafiken, die WordPress von seiner eigenen Domain aufruft (s.w.org). Diese sind z.Zt. zwar nur in drei Dateien verlinkt (wp-admin/about.php, wp-includes/formatting.php und wp-includes/general-tempate.php1) – dennoch ist eine manuelle Anpassung nicht meine favorisierte Lösungsmöglichkeit. Einfache Wartung und so… Da ich zur Zeit keine Emojis einsetze und der Admin-Bereich meine Privatsache ist, werde ich es wohl auch erst mal dabei belassen.

 


  1. Analyse mit Hilfe von Notepad++ und der „rekursiven Suche in einem Verzeichnis“-Funktion – sollte mir wohl mal den find-Befehl unter Windows näher anschauen []

24
Mrz 18

Ein ordentliches Zertifikat

Das war schon länger überfällig. Nun habe ich also endlich die passenden Zertifikate für meine aktiven Domains erstellt mit Hilfe von Let’s Encrypt.

Dafür musste für mich als oller Windows-Nutzer erst mal eine funktionierende Linux-Maschine in der Virtuellen Box her. Und dann der Certbot. Zusammenbasteln des benötigten Befehls, sudo certbot --manual certonly, und nach einigen kleinen Hürden – Berechtigungen1 und angestaubtes Terminal-Wissen2 – landeten die benötigten Dateien dann tatsächlich in der Zertifikats-Administration von Hosteurope3. Juchuh.

Beim Verifizieren der Weblog-Domains scheiterte ich jedoch mit dem zu schnellen Griff nach Strg+C – sehr fatal im Terminal – und erinnerte mich an ein Script, dass ich wenige Minuten zuvor auf einer als „nicht meine Frage beantwortende“-Seite gesehen habe: hosteurope-letsencrypt von Sebastian Stein zu meiner Rettung.

Also schnell git installiert, das Repository geklont, die 3 Einstellungsdateien erzeugt, das Erzeugungspython-Script ausgeführt und die relevanten Dateien anschließend hochgeladen, Fertig.

Update: Okay, das war doch noch nicht alles. Mit Hilfe von Search & Replace mussten noch sämtliche URLs auf Bilder und andere Resourcen im Blog von http auf https geändert werden. Ich hoffe, ich habe jetzt alle erwischt.

 


  1. Wie kommt ein Nutzer noch mal in eine Gruppe? sudo usermod -a -G groupName userName []
  2. Wie kopiere ich nicht den symbolischen Link sondern die Datei dahinter? -L []
  3. Zertifikat : fullchain.pem, Key: privkey.pem []

15
Apr 17

Die Mastodons erobern das Internet *toot.toot*

Zugegeben, ein etwas reißerischer Titel für ein Phänomen, welches tendenziell eher in der Nische zu beobachten ist. Ich bin jedoch sehr gespannt wohin die Reise der Mastodons geht und würde mich freuen, wenn aus dem Mini-Hype viele solide Communities erwachsen würden, die jenseits von Wachstums-Zwang und Kommerzialisierung einen sich gut anfühlenden Ort für den Austausch zwischen Gleichgesinnten bilden [via].

Was ist Mastodon?

Kurz zusammengefasst: Mastodon ist eine unter der GNU AGPL-Lizenz veröffentlichte Software, welche jedem Interessierten erlaubt ein twitter-ähnliches Microblogging-Netzwerk aufzubauen: seine eigene Mastodon-Instanz, mit eigenen Regeln.

Abb.1 an Tweetdeck erinnernde Ansicht der verschiedenen Timelines von Mastodon

Auf einer Instanz können sich – sofern diese Funktion nicht abgeschaltet oder beschränkt wurde – Nutzer einen Account erstellen. Sodann können Einträge („Toots“) bis zu 500 Zeichen verfasst und andere Nutzer verfolgt werden. Neben Hashtags, Bildanhängen, Mentions und private Nachrichten (Abb.1, grüner Pfeil), der eigenen Timeline („Home„) sowie einer Timeline aller auf der eigenen Instanz erfolgten öffentlichen Toots („Local Timeline„) und Notifications (wie bei Twitter) gibt es von Hause aus eine Funktion („CW„, Abb.1, roter Pfeil), mit der sensibler oder aus anderen Gründen versteckt werden sollender Inhalt ausgeblendet werden kann. Auch Bilder kann man mit der Eigenschaft „NSFW“ (Not Safe for Work) versehen, so dass sie nicht direkt angezeigt und mit einer Warnung versehen werden. Natürlich gibt es Emoticons (Abb.1, blauer Pfeil) und die Möglichkeit, Toots zu retooten („Boost„) oder mit einem Stern zu versehen – kein Herz *yay*.

Der größte Unterschied von Mastodon zu den aktuellen Netwerken ist natürlich die Dezentralität. Es existieren viele einzelne Instanzen mit z.T. unterschiedlichen Regeln. Die einzelnen Instanzen stehen jedoch nicht komplett isoliert nebeneinander, sonder es ist möglich, Nutzer von anderen Instanzen zu folgen. Außerdem gibt es eine Federated Timeline. In dieser werden alle der eigenen Instanz bekannten öffentlichen Toots angezeigt. Was heißt bekannt? Deine Instanz kennt alle Toots von Mastronauten anderer Instanzen, die von Mastronauten Deiner Instanz verfolgt werden.

In meinem Augen bietet Mastodon eine große Chance Orte zu schaffen, die für einen Neunutzer auf den ersten Blick einen erkennbaren Nutzwert ausstrahlen. Ich erinnere mich an Debatten darüber, dass Twitter für den unbedarften Nutzer unverständlich und verwirrend erscheinen konnte. Dass zwar ein Account angelegt, ein paar Informationsquellen gefolgt wurde, die dann nach kurzer Zeit brach liegen gelassen wurden, da sich ein Mehrwert nicht erschlossen hatte.

Bei einem Blick auf die inzwischen veraltete Mastodon-Instanz-Liste auf GitHub fiel mir z.b. ins Auge, dass für die Furry-Community überproportional viele Instanzen existierten. Bei der aktuellen Liste gibt es leider keine Beschreibung mehr auf der Übersichtszeite – es kitzelt mich ja ein bisschen in den Fingern dies auszuwerten.

Natürlich gibt es auch kritische Stimmen, wie jene von John Henry, welcher Mastodon in seinem lesenswerten Beitrag als Totgeburt bewertet. Diese Bewertung ist selbstverständlich aus einer bestimmten Perspektive erfolgt. Die Kritikpunkte rund um die Macht des Instanzbetreibers, dass Instanzen andere Instanzen blockieren können und dass das was man in der Federated Timeline sieht sehr stark vom Betreiber der eigenen Instanz abhängt, ist nicht von der Hand zu weisen.

Ich wittere hier eine Chance für die Entwicklung eines guten Miteinanders. Aus dem Bauch heraus würde ich sagen, dass bei den bestehenden Netzwerken der Zug für eine Bottom-Up-Entwicklung abgefahren ist. Und damit bleibt wahrscheinlich nur Überwachung und Zensur :-/. Sich basierend auf gemeinsamen Interessen entwickelnde Instanzen haben es da viel leichter einen gemeinsamen Konsenz zu finden. Verklärt utopistisch gesprochen könnte es leichter fallen, diesen gemeinsamen Konsenz tranparent zu kommunizieren und die eigene Instanz durch Microfunding (z.B. via Patreon: Gargron: mastrodon developer & mastodon.social, Valentin Ouvrard: mastodon.cloud) zu tragen. Dass diese Vorstellung eher naiv ist, ist mir bewusst. Hier möchte ich die Hoffnung einfach nicht aufgeben ;) und mir sind Foren-Communities (auch größere) bekannt, die von wertschätzendem Miteinander geprägt sind.

Also, go for it! Übrigens, es gibt bereits eine Bonner Instanz: bonn.social

 

 

 


01
Jan 17

Eigenes Tweet-Archive mit Hilfe von OZHs Plugins [Update: 2018-01-12]

UPDATE: Diese Anleitung funktioniert nicht mehr.

Man nehme: eine neue WordPress-Instanz, das Plugin Ozh‘ Tweet Archiver, das passende Theme Ozh‘ Tweet Archive und bei mehr als 3600 Tweets das eigene Twitter-Archiv (Im Twitter-Account unter „Dein Twitter Archiv„) und ein Import-Script et voilà: ein Backup der eigenen Tweets unter eigenen Kontrolle.

Btw.: Merci beaucoup Ozh Richard (Blog) for sharing your awesome work!

Das Theme kann und sollte man anpassen – sinnvoll ist es, zumindestens die Kontaktdetails und den Twitternamen in der Datei header.php austauschen ;). Auch bietet es sich an das im Theme-Ordner „img“ gelegene Avatar-Bild „new-profile.jpg“ mit dem eigenen Avatar-Bild zu ersetzen. Die Header-Grafik ist in der Datei 1500×500.png abgelegt.

Ein eigenes Kopfbild kann man schnell z.B. mit den Onlinetools ZenBG- Background Generator, dem Unique Gradient Generator oder dem Trianglify Generator erstellen.

Wer keine Angst vor CSS hat1, der wird ziemlich einfach Anpassungen bzgl. der Farben oder anderen Formatierungen in der Datei style.css vornehmen können. So wollte ich z.B. eine einheitliche Schriftgröße für alle Tweets und nicht, wie voreingestellt, unterschiedliche Größen abhängig von der Länge.

.tweet.short.is_no_reply > p,
.tweet.medium.is_no_reply > p,
.tweet.long.is_no_reply > p, 
body.single #tweets .tweet {
  font-size:16px;
  line-height:20px;
 }

Einfacher wäre es natürlich, die Formatierung komplett zu löschen ;). Aber wer weiß, ob ich es nicht vielleicht doch einmal anders haben mag und auf diese Art und Weise weiß ich noch, wie die Klassen heißen.

Retweets hervorheben

Was ich mir nach der Einrichtung wünschte, war eine Hervorhebung von Retweets. Da dies bisher nicht vorhanden war, habe ich ein wenig an der Datei functions.php herumgedoktort und die Funktion otat_get_tweet_style() um eine simple Abfrage nach dem String „RT“ in Tweets erweitert.

function otat_get_tweet_style() {
    $tweet       = get_the_title();    
    $firstrt  = strpos( $tweet, "RT" );
    if ( $firstrt === 0  ) {
        $is_rt = "is_rt";
    } elseif ($firstrt > 0) {
        $is_rt = "is_inline_rt";
    }     else $is_rt = "no_rt";

    $title    = strlen( $tweet );
    $is_reply = ozh_ta_is_reply_or_not( false );
    if( $title > 100 ) {
        $style = 'long';
    } elseif ( $title > 50 ) {
        $style = 'medium';
    } else {
        $style = 'short';
    }
    return "$style $is_reply $is_rt";

Das klappt super für die Startseite. Die Retweets formatiere ich über die Klasse .tweet.is_rt. Für das Archiv muss ich dies nochmal überprüfen bzw. wahrscheinlich wo anders anpassen.

Sobald ich das Gefühl habe, dass es funktioniert, werde ich auch zusehen, das ganze vernünftig auf GitHub zu Verfügung zu stellen.

Noch ein kleiner Hinweis: Natürlich dauert der Import von vielen Tweets eine ganze Weile. Es werden immer 15 Tweets am Stück importiert und die Seite läd sich etwa alle 5 Sekunden neu für die nächsten 15 – you can do the math ;).

Wer sich nun auf die Suche nach meinem Archiv begibt, den muss ich leider enttäuschen. Mit Hilfe eines Bitnami-WordPress-Stacks habe ich das Archiv lokal angelegt. Dazu vielleicht in einem späteren Post mehr.


  1. oder z.B. DuckDuckGos Cheat-Sheet-Funktion nutzt, die über den Suchergebnissen angezeigt wird, z.B. für „text-decoration css„ []

01
Aug 16

NetCologne und der eigene Router

Was eine schwere Geburt. Erst einmal herauszufinden, woher wir die Zugangsdaten bekommen und dann auch noch die Einrichtung korrekt vorzunehmen war eine mehrstündige Sisyphos-Arbeit. Darum halte ich dies hier fürs nächste Mal nach.

Schritt eins: Zugangsdaten erhalten

Da in den NetCologne Einstellungen, wie sie auf der AVM-Routerwahls-Seite (/via) verlinkt waren, kein Punkt zum Thema Zugangsdaten bei uns auftauchte, warf ich zuerst ein Blick in die Anleitung.

Auf der Hilfeseite von NetCologne > Einrichten des DSL-Anschlusses > Ohne Splitter las es sich so einfach:

„Als NetCologne-Kunde können Sie dieses ganz einfach und bequem in unserem OnlineService erledigen. Melden Sie sich hierzu mit Ihrer Kundenummer und Ihrem Kundenkennwort an und über „Produkte“ und „Optionen verwalten“ haben Sie die Möglichkeit, ein eigenes Endgerät für Ihren Anschluss zu beauftragen.“

In den OnlineServices unter Produkte > „Anhaken unseres Vertragsproduktes“ > Produkt bearbeiten suchte ich den im Screenshot auf der Hilfeseite gezeigten Dialog jedoch vergeblich. Diesen erhält man nämlich erst, wenn man die Seite über einen Klick auf „Weiter“ verlässt.2016-08-01_WeiterAnschließend kann man wie auf der Anleitungsseite gezeigt den Punkt „Ich werde mein eigenes Endgerät nutzen“ auswählen. Ein weiteres Mal mit „Weiter“ bestätigen und anschließend den Auftrag über „Zahlungspflichtig bestellen“ absenden. Sofern keine weiteren Änderungen am Paket vorgenommen wurden, sollte keine einmaligen Kosten auftauchen und die monatlichen Kosten den bisherigen entsprechen.

Die Auftragsbearbeitung erfolgte bei uns am nächsten Werktag. Auf der Telefoneinstellungsseite existierte nun der Punkt SIP Zugangsdaten.2016-08-01_SIP

 

Schritt zwei: Wo trage ich welche Zugangsdaten ein?

Jetzt folgte die eigentliche Herausforderung. Wie richte ich die Fritz!Box ein? Dies herauszufinden hat eine Weile gedauert.

  1. Telefonie
    Hierfür werden die Daten benötigt, die man unter SIP Zugangsdaten erhalten kann, wobei unter Telefonie > Eigene Rufnummern folgendes einzutragen ist:
    Rufnummer für die Anmeldung: Teil des SIP-Username vor @ (das entspricht der Telefonnummer mit Vorwahl ohne 0)
    Interne Rufnummer in der FRITZ!Box: Telefonnummer ohne Vorwahl
    Zugangsdaten:
    Benutzername: SIP-Username
    Kennwort: SIP-Passwort
    Registrar: SIP-Server (IP)
    Proxy- und STUN-Server habe ich leer gelassen
    Rufnummernformat auf Default gelassen
    Leistungsmerkmale Default bis auf den Punkt „Anmeldung immer über eine Internertverbindung„, bei diesem habe ich den Haken entfernt.
    Das Ganze gespeichert und unter „Anschlusseinstellungen“ „Festnetz aktiv“ aktiviert. Die weiteren Einstellungen schienen okay. VLAN-ID = 20 und VPI/VCI wie auf der Anleitungsseite beschrieben (8/35). Kapselung Bridged und mit automatischer IP-Adressen-Beziehung.
  2. Internet
    Hierfür werden die Internet-Zugangsdaten benötigt, die bei Vertragsabschluss in Papierform zugesandt wurden.
    Unter Internet > Zugangsdaten einzutragen:
    Internetanbieter: Weiterer Internetanbieter > NetCologne/NetAachen
    Zugangsart: In unserem Fall DSL ohne Splitter
    Benutzername: Der Internetbenutzername aus den Unterlagen, und unbedingt das @netcologne.de nicht vergessen!!!
    Kennwort: Das Kurzkennwort aus den Unterlagen.
    Die Verbindunseinstellungen blieben bei uns auf den Default-Einstellungen

Nützliche Quellen, die mir weitergeholfen haben während meiner Suche nach den richtigen Einstellungen: