Roundcube Webmail mit Zwei-Faktor Authentifizierung

Um die Sicherheit zu erhöhen habe ich vor ein paar Wochen das Two-Factor Gauthenticator Modul im Roundcube Webmail hinzugefügt. Damit können die User sich nicht mehr nur mit Benutzer und Passwort einloggen, sondern brauchen einen zweiten Faktor. Das ist dann ein 6-stelliger Code aus dem Google Authenticator auf dem Smartphone.

Die Installation ist recht einfach. Das Module wird in das Webverzeichnis in dem Roundcube installiert ist im Ordner “plugins” gespeichert. z.B. “/var/www/webmail/plugins

cd /var/www/webmail/plugins
git clone https://github.com/alexandregz/twofactor_gauthenticator.git

Um das PlugIn zu aktiveren öffnet man die Roundcube Konfigurationsdatei und fügt das PlugIn in der Liste hinzu:

$config[‘plugins’] = array(‘plugin1’, ‘plugin2’, ‘twofactor_gauthenticator’);

Anschliessend kann man sich im Roundcube einloggen und in die Einstellungen unter dem Punkt “Zwei-Faktor Authentifizierung” die Einstellungen vornehmen und den Goolge Authenticator einrichten.

Roundcube Webmail mit Two-Factor Authentication
  1. Auf speichern klicken.
  2. Es erscheint eine Meldung das nicht alle Felder ausgefüllt sind.
  3. OK Bestätigen und es erscheint ein QR-Code.
  4. Den Google Authenticator öffnen.
  5. Hinzufügen auswählen und Barcode scannen.
  6. Den 6 stelligen Code aus der App eingeben und prüfen anklicken.
  7. Auf “Speichern” klicken.

Ab jetzt wird nach dem Login im Webmail nach dem zweiten Faktor gefragt.

Die Wiederherstellungscodes sollte man speichern und sicher aufbewahren. Diese werden benötigt wenn man das Smartphone verliert oder wenn der Google Authenticator zum Beispiel bei einem defekten Gerät nicht mehr zur Verfügung stehen sollte.

DSL Traffic 2018

Unser DSL-Traffik 2018

Angabe in Terabytes

DSL-Traffik 2018

MonatGesendetEmpfangenGesamt
Jan0.071.201.30
Feb0.070.951.05
Mär0.730.921.02
Apr0.060.810.87
Mai0.081.281.36
Jun0.070.710.78
Jul0.100.820.92
Aug0.061.011.07
Sep0.081.091.18
Okt0.861.011.10
Nov0.041.171.21
Dez0.041.111.16
Gesamt:2.2612.0813.02
traffic_2018
traffic_2018

Wie auch schon im letzten Jahr auch dieses Jahr wieder die DSL Traffik Statistik. Der Dennis hat seine auch schon online. Und Michel so wie so.

Die Grafiken dazu werden später noch nachgereicht.

 

 

 

 

DSGVO: temporäre Speicherung der IP Adressen bei Kommentaren

Mit der DSGVO ist die IP-Adresse zu schützen. Vorher wurde die IP auch nur temporär gespeichert. Nach der Freischaltung eines Kommentars wurden die IP Adressen bei den Kommentaren gelöscht.

Mit der DSGVO habe ich einfach mal die IP-Adresse bei den Kommentaren komplett eliminiert und jetzt knapp 2 Monate versucht ohne auszukommen.

Ergebnis: Scheisse.

Früher war es so das Spammer versucht haben ihre Scheisse los zu werden. Dabei sind sie meistens wie folgt vorgegangen:

  1. Kommentar gesendet. (z.B. von 123.123.123.123)
  2. Minuten oder Stunden später kam dann der nächste Spam-Kommentar. wieder mit der gleichen IP Adresse.
  3. Einige Zeit später ein weiterer Kommentar.
  4. Spätestens jetzt habe ich dann die IP genommen, gegen ein Tool von mir geworfen und die IP landete in direkt in der Firewall in einer Blacklist.
  5. Ruhe
  6. Ohne geht das jetzt weiter bis dann 30 und mehr Spam-Kommentare das Blog zu müllen.

Daher werden hier jetzt bei den Kommentaren die IP-Adressen wieder gespeichert und nach Freigabe oder Löschung der Kommentare die IP-Adressen aus der Datenbank entfernt.

Das ganze ist natürlich in der Datenschutzerklärung abgedeckt.

Kommentare und Beiträge

Wenn Nutzer Kommentare oder sonstige Beiträge hinterlassen, können ihre IP-Adressen auf Grundlage unserer berechtigten Interessen im Sinne des Art. 6 Abs. 1 lit. f. DSGVO für 7 Tage gespeichert werden.

Zusätzlich werden Besucher beim Schreiben der Kommentare auf die Speicherung der IP-Adresse hingewiesen. 

Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY

The iPhone X Index

Wer einfach mal wissen möchte wie lange er für ein iPhone arbeiten müsste.

Oder sich einfach mal bewusst machen wie viel Glück die meisten von uns eigentlich haben ein Smartphone überhaupt zu haben.

howmuch.net

 

 

eBook React and React Native kostenlos

Bei packtpub.com gibt es wieder das tägliche kostenlose E-Book. “React and React Native” heißt das heutige Buch und könnte für einige interessant sein.

React and React Native

Use React and React Native to build applications for desktop browsers, mobile browsers, and even as native mobile apps
Build React and React Native applications using familiar component concepts
Dive deep into each platform, from routing in React to creating native mobile applications that can run offline
Use Facebook’s Relay, React and GraphQL technologies, to create a unified architecture that powers both web and native applications

 

Twitter und Youtube/Vimeo Videos datenschutzgerecht eingebunden

Hier werden jetzt Videos von Youtube, Vimeo (Facebook würde auch gehen), sowie Tweets von Twitter datenschutzgerecht eingebunden.

 

Heise.de hat dafür Embetty und Embetty Server veröffentlicht.

Beim Aufruf der Artikel werden die Videovorschau jetzt nicht mehr direkt bei Google und Co mit der IP der Besucher dieser Seite der abgerufen. Das wird jetzt alles über den Embetty Server gemacht. Embetty hängt also als Proxy zwischen euch und Youtube, Vimeo, Facebook und Twitter. Erst wenn ein Video angeklickt wird werden Daten an die Server der Anbieter gesendet.

Im WordPress Header wurde jetzt einfach der embetty Server hinzugefügt und im Webroot der Seite das embetty.js abgelegt:

<meta data-embetty-server="https://blog.pretzlaff.info:8089">
<script async src="/embetty.js"></script>

Tweet im Artikel einbinden:

<embetty-tweet status="1000738984253943811"></embetty-tweet>
Ergebnis:

<embetty-video type="vimeo" video-id="91085172"></embetty-video>
Ergebnis:


git clone https://github.com/heiseonline/embetty-server.git
cd embetty-server

docker-compose.yml

version: '3.1'

services:

server:
image: heiseonline/embetty-server:latest
ports:
- 8089:8080
environment:
- VALID_ORIGINS=http://localhost
- TWITTER_ACCESS_TOKEN_KEY=<YOURTOKENKEY>
- TWITTER_ACCESS_TOKEN_SECRET=<YOURSECTRETKEY>
- TWITTER_CONSUMER_KEY=<YOURCUNSOMERKEY>
- TWITTER_CONSUMER_SECRET=<YOURCONSUMERSECRET>

Speichern ..
docker-compose up -d
und der Server rennt.

DSL Graph mit Python

Da heute ja hier Graphen zum Traffic im Jahr 2016 veröffentlicht wurde hier auch gleich eines der Scripts.

Datenquelle: fb.csv


Monat;Gesendet;Empfangen;Gesamt
Jan;4124;16815;20939
Feb;1078;403;1481
Mar;1199;446;1645
Apr;2464;36476;38940
Mai;92979;615268;708247
Jun;138402;664743;803145
Jul;116406;507155;623561
Aug;35654;471810;507464
Sep;31362;428400;459762
Okt;24072;549927;573999
Nov;44095;914362;958457
Dez;57889;1141699;1199588
Gesamt:;549724;5347504;5897228

Benötigte python Pakete:

  • pygal
  • cairosvg


pip install pygal
pip install cairosvg

bzw.

apt-get install -y python-cairosvg python-pygal

Script welches die Daten ausliest und die Grafik erstellt:


#!/bin/bash

OUT=for i in $(tail -n 13 fb.csv | head -n 12 | awk -F";" {'print $2'} ); do echo -n "$i "; done | sed -e 's/\ $//' | sed -e 's/\ /, /g'
IN=for i in $(tail -n 13 fb.csv | head -n 12 | awk -F";" {'print $3'} ); do echo -n "$i "; done | sed -e 's/\ $//' | sed -e 's/\ /, /g'
SUM=for i in $(tail -n 13 fb.csv | head -n 12 | awk -F";" {'print $4'} ); do echo -n "$i "; done | sed -e 's/\ $//' | sed -e 's/\ /, /g'

echo "
import pygal
bar_chart = pygal.Bar()
bar_chart.x_labels = 'Jan', 'Feb', 'Mar', 'Apr', 'Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'
bar_chart.add('Eingehend', [$IN ])
bar_chart.add('Ausgehend', [$OUT ])
bar_chart.add('Gesamt', [$SUM ])
bar_chart.render_to_file('output.svg')
" > generate.py

/usr/bin/python generate.py

Ausführbar machen und ausführen:

chmod +x generate.sh
./generate.sh

Ergebnis:

PyGal output

DSL Traffic 2017

Unser DSL-Traffik 2017

Angabe in Megabytes

DSL-Traffik

MonatGesendetEmpfangenGesamt
Jan41241681520939
Feb10784031481
Mär11994461645
Apr24643647638940
Mai92979615268708247
Jun138402664743803145
Jul116406507155623561
Aug35654471810507464
Sep31362428400459762
Okt24072549927573999
Nov44095914362958457
Dez5788911416991199588
Gesamt:54972453475045897228

Anfang des Jahres war der Traffik hauptsächlich über den anderen Anschluss und taucht hier in der Statistik nicht auf.
Im März und April war noch Renovierungszeit und es wurde weniger gestreamt. Wir haben uns nach der Arbeit eher selbst nur noch in Bett gestreamt.

Im Oktober wurde das 1. OG mit aufgeklemmt und gepatched. Daher dann ab Ende Oktober der Anstieg des Traffiks.
In den nächsten Tagen kommt noch das EG mit dazu, dann ist das Netzwerk endlich komplett.

Im 2. und 3. OG ist schon alles fertig. 2. und 3. OG haben jeweils 2 x 16 Port Switche. Beide Etagen sind mit 4 Gigabit (LAG) verbunden.
Im 2. OG ist dann noch der AccessPoint und ein Cisco 10 Port für Layer 3, der die unteren Etagen mit anbindet.
Das 1. OG ist über den Cisco Switch mit 2 Leitungen (LAG) zum dort verbauten Cisco Switch verbunden. Das gleiche wird dann bald auch noch jeweils aus dem 1. und 2. OG in das EG gemacht. So das 4 Leitungen (LAG) 4 Gigabit theoretisch im ganzen Haus können.
Wenn das gemacht ist werden alle Geräte über 2 Leitungen ins Internet gehen und die Jahresstatistik nächstes Jahr wird beide Anschlüsse beinhalten.

Aber hier jetzt erst einmal die Graphen von 2017 mit nur einem Anschluss.

Ein- und ausgehender Traffic:

Ein- und ausgehender Traffic (Summe)

Ein- und ausgehender Traffic:

Ausgehender Traffic:

Eingehender Traffic:

Danke an Dennis für den Hinweis das ein Jahr wieder rum ist.

PHP in AWS Lambda Function ausführen

Bei der Transformation in der Cloud möchte man manchmal schnell kleine Scripts in die
Cloud bringen ohne erst Server oder Container in der Cloud zu installieren.
In vielen Fällen reichen Funktionen wie AWS-Lambda-Functions, Azure Functions oder
Google Cloud Functions.

AWS Lambda bietet dafür in Lambda folgende (Script)-Sprachen an:

  • C#
  • Java
  • python
  • nodejs

Gerade in älteren Umgebungen werden oft Perl und PHP für kleinere Webscripte,
die Applikationen zum Austausch von Informationen benutzen eingesetzt.
Klar, diese Scripte sollte man teilweise überdenken und erneuern. Das kostet zum
einen Geld, jemand muss es machen und manche sollen auch nur noch bei dem Sprung
in die Cloud helfen und dann eh das zeitliche segnen.

Daher wäre es nicht schlecht diese Tools schnell mit in die Cloud zu nehmen um
andere Software so in die Cloud zu bekommen und die Tools nicht als Spassbremse
zu haben.

nodejs und statisch kompliliertes php

Da Lambda nodejs anbietet kann man es auch dazu nötigen PHP auszuführen.
Ja, würde ich es jetzt auch lesen oder es von jemanden hören, ich würde mich
jetzt genau so schütteln.
Aber es soll ja nur den Sprung in die Cloud ermöglichen und zeigen wie man solche
Probleme umgehen kann.

PHP Binary erstellen

Um das PHP statisch als ein Binary vorliegen zu haben bietet sich Docker an.

build_php_7.sh

#!/bin/sh
PHP_VERSION_GIT_BRANCH=PHP-7.1.1
echo "Build PHP Binary from current branch '$PHP_VERSION_GIT_BRANCH' on https://github.com/php/php-src"
docker build --build-arg PHP_VERSION=$PHP_VERSION_GIT_BRANCH -t php-build -f Dockerfile.BuildPHP .
container=$(docker create php-build)
docker -D cp $container:/root/php7/usr/bin/php ./php
docker rm $container

Das stellt einen Container der PHP 7.7.1 zusammensetzt und anschliessend das
fertige Binary aus den Docker Container kopiert.

Wer eine andere Version benötigt kann die Version mit PHP_VERSION_GIT_BRANCH setzen.

PHP Script

<?php
echo "Hello world!";
var_dump($argv);
?>

index.js spawn für php

Damit der PHP Interpreter und ein Script aufgerufen werden benötigt man nur noch
etwas JavaScript:

'use strict';
var child_process = require('child_process');
exports.handler = function(event, context) {
  var strToReturn = '';
  var proc = child_process.spawn('./php', [ "index.php", JSON.stringify(event), { stdio: 'inherit' } ]);
  proc.stdout.on('data', function (data) {
    var dataStr = data.toString()
    console.log('stdout: ' + dataStr);
    strToReturn += dataStr
  });

  proc.on('close', function(code) {
    if(code !== 0) {
      return context.done(new Error("Process exited with non-zero status code"));
    }
    context.succeed(strToReturn);
  });
}

Alles einpacken und verschiffen

Jetzt nur noch ein Zip-File aws-lambda-php-example.zip erstellen mit den Dateien:

  • index.js
  • index.php
  • php

    zip aws-lambda-php-example.zip index.js index.php php

In AWS eine neue Lambda Function erstellen mit folgenden Parametern:

  • Type: nodeJS
  • RAM: 128mb
  • Timeout: 3 seconds

Den JavaScript Code nicht in den Online Editor kopieren, sondern Upload auswählen
und das komplette ZIP-File hochladen und an der Lambda Function anhängen.
Alternativ im S3 ablegen und aus dem Bucket heraus laden lassen

Benötigt man die Schnittstelle per HTTP von extern und/oder anderen Instanzen kann
man auch noch das API-Gateway von Amazon hinzuziehen.

Spassbremse umgangen

Das Script stört nicht mehr die weitere Transformation und alle anderen Softwarebrocken
können ihren Weg in die Cloud beschreiten. Die Teams, die solche Softwarestückchen
einmal in schön abliefern müssen, können dies dann noch später nachholen.
Haben aber auch erst einmal Zeit für die grösseren Cloud-Projekte.

Wer aus “Gründen” nicht sofort eine komplette Software in die Cloud bringen kann
sollte sich das API-Gateway einmal genauer angucken. Path und Method lassen sich
damit sehr gut trennen. Einzelne Aufrufe lassen sich so auf die alte Software
oder die neue Software leiten. Natürlich nur, so lange so etwas mit einer Software
möglich ist und intern keine Abhängigkeiten bestehen. Ist es möglich steht einer
Migration einzelner Funktionen nichts im Wege. Rollback inklusive.

Atom Editor hinter Proxy

Da will man sich im Atom Editor mal eben das Package “script” installieren, um Code zum testen direkt im Atom auszuführen, da stellt sich der Proxy mal wieder in den Weg.


apm config set https-proxy http://proxy.example.com:3128
apm config set http-proxy http://proxy.example.com:3128

Atom wieder öffnen und Package installieren.

Betrieben von WordPress | Theme: Baskerville 2 von Anders Noren.

Nach oben ↑