Wie kann ich prüfen ob eine Webseite meine Daten zu Dritten sendet

Ich erhalte viele Anfragen von Benutzern, die sich beim surfen im Internet bezüglich Ihrer Privatsphäre große Sorgen machen. Um zu verstehen was Tracking ist, wie es funktioniert und warum jeder etwas zu verbergen hat, wird im folgenden dargelegt.

Was ist Tracking und warum will man nicht getrackt werden.

Generell gibt es mehrere Formen von Tracking, alle laufen darauf hinaus, ein Profil von Ihnen zu erstellen und möglichst genau zu wissen, was Sie tun, mit wem Sie kommunizieren und vieles mehr.

Tracking unterscheidet sich auch in der Form des verwendeten Gerätes. Am schlimmsten ist das Tracking mittels Programmen am Smartphone oder Tablet mittels von Werbeleute App genannter Software, welche mit Ihren Berechtigungen am Gerät, meist auch im Hintergrund, laufen. Eine App ist generell Software, ein Programm, dass auf Ihrem Gerät alles machen kann, dass Sie mit Ihren Berechtigungen auch können. Sehr gefährlich, insbesondere für reine Anwender ohne IT Spezialwissen.

Smartphone und Tablet

Vielfach wollen diese Programme (Apps) Zugriff auf:

  • Ihr Adressbuch (sehr gefährlich, denn das Senden von Adressen an Drittanbieter verstößt gegen die Datenschutzgrundverordnung und kann Ihnen eine Menge Probleme, im schlimmsten Fall Klagen und hohe Schadensersatzforderungen einbringen. Oder haben Sie von jedem Ihrer Kontakte die schriftliche Einwilligung seine Adresse an andere zu verteilen?)

  • Ihren Kalender (extrem gefährlich da hier massive Profildaten erhoben werden können, inkl. Meta Daten über Kommunikationspartner bei Kalendereinladungen in beide Richtungen)

  • Ihre GPS Daten (eines der gefährlichsten Dingen, denn damit erhalten Dritte ein exaktes Bewegungsprofil und können auch ein Matching mit anderen Personen, welche sich aktuell an diesem Standort befinden durchführen. Diese Daten wollen Sie in keinem Fall weitergeben, denn dumm in ein Raster gefallen könnte sich Ihr Leben in Sekundenschnelle dramatisch verändern. Nur weil Sie an einem Standort waren, wo jemand anderer auch ist.)

  • Ihre SMS (Wenn diese Daten öffentlich wären, würden Sie diese auf einer Postkarte versenden,)

  • Ihre E-Mails und je nach Gerät kommt die App dann auch an die Zugangsdaten Ihres Mailservers und kann die Daten auch direkt, ohne Ihr Zutun abrufen und lesen. Auch wenn Sie nichts zu verbergen haben, Ihre Kommunikationspartner könnten Ihnen die Veröffentlichung des E-Mail Verkehrs durchaus übel nehmen. Klagen und Schadenersatz nicht ausgeschlossen.

  • Ihre Messenger Kommunikation. Mit diesen Kommunikationsdaten wurden schon Jobs verloren, Ehen geschieden und vieles mehr. Bedenken Sie, dass eine App eventuell Zugriff auf End-to-End verschlüsselte Daten hat, da die App am Gerät die Daten eventuell auch dechiffriert sieht.

  • Microfon und Kamera. Das übelste, denn wenn hier ein Zugriff besteht führen Sie eine eventuell filmende, alles hörende Wanze mit sich und Sie wissen noch nicht einmal ob irgendwo im Netz jemand live zusieht oder mithört. Es ist mir unverständlich warum Smartphones und Tablets noch immer bei Besprechungen erlaubt sind. Ein kompromittiertes Gerät reicht aus um z.B. durch Verlust eines Auftrages einen riesigen Schaden zu verursachen. Die Möglichkeiten sind vielfältig und es gibt Szenarien für jedermann.

Damit sind Ihre Daten im Falle eines Hacks des Drittanbieters der die Daten erhält bereits weitgehend der Öffentlichkeit preisgegeben. Wenn Sie das nicht glauben und jetzt denken - „Der lebt in einer anderen Welt“ - dann nehmen Sie sich etwas Zeit und lesen Sie am besten per RSS Newsfeed:

• https://www.bleepingcomputer.com/ 
• https://www.heise.de/security/ 

Es gibt einiges mehr, insbesondere wenn jemand tiefer in die Materie eintaucht, aber mit oben genannten ist das notwendige Tages-Minimumwissen für alle Anwender ohne Spezialwissen im Kurzüberblick abgedeckt. Millionen von gestohlenen Datensätzen, oftmals durch laienhafte Security bei kleinen und großen Unternehmen leicht zu ergattern, sind Online auch von renommierten Firmen verfügbar. Aktuell ist gerade ein Data Breach mit Daten eines großen Kreditkartenunternehmens im Umlauf der aufgrund der Datenmenge durchaus interessant werden könnte.

Um nur ein Beispiel zu nennen, welches in den USA reihenweise Existenzen zerstört hat, sei der Equifax Hack genannt. Eine in den USA sehr wichtige Kredit Auskunftei, denen 143 Millionen Datensätze amerikanischer Bürger gestohlen wurden. Die folgen für Einzelne sind im Detail noch immer nicht ganz abzuschätzen, aber hier wurden Existenzen, Firmen und mehr vernichtet. Einfach nach „Equifax Hack“ suchen und lesen um zu verstehen, wir kritisch die Situation ist und warum jeder etwas zu verbergen hat.

Bei Smartphones und Tablet existiert zusätzlich das Problem, dass wenn eine Mobilfunkverbindung existiert und Benutzer mit einem Standard-Betriebsystem arbeiten, keine Firwall den ausgehenden Datenverkehr blockiert. D.h. das senden von Daten zum Datensilo geht im Normalfall immer und jede App kann, ohne dass normale Benutzer den Traffic prüfen oder blockieren kann, über das mobile Netz Daten senden. Niemand weiß welche Daten übertragen werden. Profis testen Apps auf solche Übertragungen und können Apps dadurch etwas besser bewerten.

In Summe sollten keine Apps installiert werden, sonder immer nur die Webanwendung verwendet werden. Kombiniert mit einem guten Browser ala Firefox und einigen Addons, lässt sich so am Smartphone oder Tablet das Laden von Drittanbietern zum Tracking recht gut verhindern und wenn der Browser geschlossen wird, läuft keine Datensammel-Anwendung im Hintergrund. Mit der Verwendung des Browsers ist man am Smartphone oder Tablet in etwas auf der selben Ebene wie weiter utnen für Desktop Arbeitsplätze geschildert.

Wenn es unbedingt eine App sein muss, dann verlangen Sie vom Anbieter eine APP aus einem Open Soure App Store, ala F-Droid für Android und LineageOS. Open Source Anwendungen werden meist von vielen Entwicklern geprüft und damit wird das Risiko maximal minimiert.

Sollte der Anbieter keine Open Source App anbieten, verlangen Sie genaue Angaben über die verwendeten Entwicklungstools. Eines der Hauptprobleme bei Apps ist, dass man oft schnell und billig, ohne Fokus auf die Sicherheit, die App auf den Markt bringen will. Vielfach wird die App mit sogenannten Tools und Frameworks erstellt, welche das Programmieren erleichtern, jedoch wenn ein sicherheitsrelevantes Update des Tools ansteht, die App unbedingt neu compiliert und upgedatet werden muss. Wenn der Anbieter diese Updates nicht beachtet, ist Ihr Gerät oftmals verloren!

Um nur ein Beispiel zu nennen:

Sollte Ihr Anbieter angeben, dass er z.B. mit Ionic seine Apps entwickelt, können Sie auf eine CVE Webseite bezüglich der Sicherheitsrelevanten Einträge (CVE) suchen:

https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=ionic

Die Liste zeigt die bekannten CVE an und so kann man mit dem Anbieter abklären, ob alle Patches in der App eingebracht sind. Für Benutzer nicht ganz einfach, aber wenn mehrere Anwender in dieser Richtung agieren, werden App Anbieter in Zukunft anders agieren.

Anbieter die die Privatsphäre Ihrer Benutzer schützen bieten Webseiten, welche mit dem Browser alle Features bieten. Damit ist es ein leichtes eventuelle Datenübermittlungen an Dritte zu finden, zu blockieren und durch Beenden des Browsers auch jede Aktivität einzustellen. Das ist die beste Methode, denn hier ist der Browser als Schutzschild zwischen anbieter und Benutzer.

Benachrichtigungen kann man sich auch als E-Mail oder Riot.IM Messenger Nachricht zustellen lassen. Dazu braucht es keine App, welche das persönliche Risiko dramatisch erhöht.

Tracking mit dem Browser des Dektop PC‘s

Hier wird es nun viel einfacher festzustellen, wem die Privatsphäre der Benutzer nichts wert ist, bzw. wer Daten sammelt. Und wohlgemerkt, es spricht nichts dagegen auf dem Hausinternen Server, zu die Webseite analysieren. Aber es dürften keine Daten an Dritte, insbesondere nicht außerhalb der EU, gesendet werden.

Es gibt Software wie Matomo, welche wir bei CTS zur Feststellung von Einbruchs und Hackversuchen auch verwenden, die Webseiten für verschiedene Zwecke analysieren kann. Im Fall dieser Webseite zum Monitoring von Einbruchs und Hackversuchen. Aber all dieses Software muss aus dem selben Servernetz geladen werden und keine Daten weitergeben. Eine Einführung zum Tracking findet sich im Wikipedia:

  • https://de.wikipedia.org/wiki/Web_Analytics und im Prinzip läuft alles auf die selbe Methode hinaus:

  • Sie geben im Browser www.zumbeispiel.com ein

  • Ihre Browser lädt vom Server www.zumbeispiel.com die Seite

  • Der Anbieter versteckt aber auf der Seite Ladevorgänge die den Browser Daten von anderen Servern laden lassen. Dazu gehören Fonts, Scripts und bei Web Anbietern die zu schwache Server betreiben um den Traffic zu bewältigen, das Laden der Daten von sogenannten CDN‘s. Vergessen Sie alle Ausreden, mit einem gut installierten Server mit ausreichend Resourcen kann alles von eigenen Servern geladen werden und man benötigt keine Daten von Drittanbietern!

  • Das Problem ist, dass jedes Laden von anderen Servern dort einen Logeintrag und andere Spuren hinterlässt und dieser Drittanbieter dann weiß auf welcher Seite Sie ich befinden, was Sie dort machen, etc. Mit JavaScript werden Drittserver teilweise erst bei Ausführung geladen um Blocker auszuschalten. Wenn der Datensammler global agiert, hat er ein komplette Bild Ihrer Person und Ihres Verhaltens.

Verwenden Sie wenn möglich den Tor Browser zum Surfen, diese anonymisiert Ihre IP Adresse und gitb auch keine Daten weiter. Der Tor Browser ist die erste Wahl, wenn Sie zum Beispiel nach Krankheiten, Krediten und anderen Problem, welche nicht öffentlich aufscheinen sollen suchen. Damit schützen Sie sich und stellen keine Verbindung zwischen Ihnen und der kritischen Suche her. Ein Profil mit Suchen nach Krankheiten oder auch nur nach Jobs, kann in den falschen Händen Ihr Leben durchaus in andere Bahnen lenken.

Sollten Sie nicht in der Lage sein Software zu installieren, dann verwenden Sie zumindest den Firefox Browser und installieren die Plugins meine Blog Eintrages:

Damit sind Sie schon sehr gut geschützt und der Aufbau eines Profils über Sie wird massiv erschwert.

Tracker und anderes anzeigen:

Die Plugins uMatrix und uBlock zeigen sehr gut, woher gewisse Seiten Daten laden und damit auch wohin diese Seite Daten sendet. Installieren Sie uBlock und uMatrix und lassen Sie sich anzeigen, wohin Ihre Daten gesendet werden. In den meisten Fällen sehr unschön und es gibt Seiten die Daten an 50 Drittserver senden, nur wenn Sie einmal hinsurfen.

Senden Sie doch dem Geschäftsführers der Webseite Ihres Vertrauens eine E-Mail mit der Frage, wie er das vertreten kann. Der unten angeführte Screenshot ist von einer hier abonnierten Zeitung, welche dieses E-Mail jetzt auch bekommt, denn Daten an so viele Drittanbieter zu senden ist fragwürdig, in keinem Fall seriös und unter Umständen laut DSGVO strafbar.

Und Nein, es sind keine Schnuddelseiten, welche Daten missbrauchen, vielfach sind es sogenannte seriöse Anbieter die hier an der Grenze der Legalität agieren.

Abstrafen sollte so etwas der Benutzer und diese Seiten einfach meiden. Es gibt immer Alternativen!

Ich habe den Namen der Zeitung ausgeblendet, aber schauen Sie sich mit uMatrix udn uBlock an, wem Ihre Privatsphäre vollkommen egal ist! Sie werden sich wundern!

Viel Spaß beim surfen!

Ein EDV Leben ohne Lizenzkosten für Business und Privat!

Keine Lizenzkosten mit Open Source Software betrieben auf modernen Betriebssystemen!

Ich habe auf die letzten Blog Beiträge viel positives Feedback erhalten und die meisten Business- und Privatanwender träumen von einem IT Betrieb ohne Lizenzkosten und ohne bei neuen Systemen auf die Anzahl der Installationen achten zu müssen und vielem mehr. Bei vielen Managern stehen natürlich die Einsparungen der Lizenzkosten an oberster Stelle, aber es hat sich mittlerweile auch durchgesprochen, dass selbst gehostete System, welche die Privatsphäre schützen und so wenig wie möglich Daten an Dritte und Tracker übermitteln eine Bereicherung für jeden einzelnen sind.

Sicher ist, da die Lizenzkosten die letzte wirkliche Einsparungsmöglichkeit im IT Bereich sind, dass sich Open Source Software und Betriebssysteme nun weit stärker im Firmenumfeld durchsetzen. CFO‘s und CEO‘s werden sich hier stark engagieren um über diese Schiene die letzte Einsparungsmöglichkeit auszunutzen.

Natürlich ist mir klar, dass es nicht in allen Fällen zu 100% möglich ist umzustellen und es auch einige geben wird, die Ihre Daten auf Servern von Fremden im Internet (aka Cloud) speichern werden. Bei letzteren ist das Verhalten vollkommen unverständlich, denn wenn man diese Verantwortlichen fragt, ob sie Ihre wichtigen Firmendaten auf irgendwelchen Servern im Internet speichern würden, ist die Antwort meist ein Nein. Versehen mit dem Marketingmascherl Cloud gibt es dann doch welche, die alle Daten auf solchen Servern speichern. Der Anteil diese Cloud User ist in Wirklichkeit aber sehr gering.

Mit dieser Spezies, die im Normalfall in dem Irrglauben, die eigene Verantwortung delegieren zu können und gleichzeitig alles billiger wird, lebt, wollen wir weder heute noch an anderer Stelle Lebenszeit vergeuden. Meist existiert hier eine Beratungsresistenz.

Der Fokus liegt auf Verantwortlichen, welche zukunftsorientiert, offen, hungrig nach Weiterbildung und an neuem, vielfach besserem interessiert sind.

Wie schon in vielen Blog Einträgen hier auf meiner Seite geschrieben, wurde in meinem Umfeld und bei der CTS die komplette IT und auch mobile Geräte auf Open Source umgestellt. Ich höre jetzt schon viele sagen – Das kann ich nicht -. Doch, das kann jeder, mit ein paar ganz wenig Ausnahmen, wo spezielle Software benötigt wird und es nur Anbieter proprietärer Software gibt, welche die Zeichen der Zeit nicht erkannt haben und sich mit weiterer proprietärer Software anderer Anbieter so verknüpfen, dass es für diese keinen Ausweg aus der Falle – gebunden an ein Betriebssystem – gibt. Solche Systeme sollte man in einem eigenen VLAN betreiben, bis eine alternative Software erscheint und es darf gesagt werden, dass es mittlerweile für fast alle Anforderungen Open Source Lösungen gibt.

Das heißt natürlich nicht, dass Open Source Software keine Fehler hat und nicht auch hier ab und zu Probleme auftreten. Aber die Community, insbesondere bei den größeren Projekten, ist im Normalfall extrem schnell mit Fehlerbehebungen, welche in vollem Umfang auf der Projektseite nachvollzogen werden können. Bei Open Source Software ist auch jede Änderung für alle offen prüfbar. Zusätzlich kann man immer auch einen Programmierer (Freelancer) anheuern, welcher den Fehler korrigiert. Das ist Freiheit, ohne zu warten, ob ein Hersteller vielleicht irgendwann einen Patch heraus gibt, bei dem wieder nicht bekannt ist, welche Modifikationen vorgenommen werden.

Für besonders Interessierte habe ich ein Buch veröffentlicht, welches viele Details anspricht:

„Zero License Costs? It is possible!: This book will show you that it is possible to run your IT without any license costs. (CTS IT PRO E-Books 12)“ erhältlich bei Amazon https://www.amazon.com/dp/B072VGSQHF

Hier nun eine kurze Zusammenfassung eines freien Lebens mit IT:

Server

Alle meine privaten Server und die Server der CTS werden bereits seit 1995 fast durchgehend unter FreeBSD betrieben. Bald danach kamen noch Server unter Debian Linux hinzu und eine gewisse Zeit gab es auch wenige proprietäre Server von kommerziellen Betriebssystem Anbietern. In den späten 90ern war das Leben noch nicht so frei und einfach wie heute.

Seit mehreren Jahren, insbesondere da der XRDP Server unter Debian Linux mittlerweile auch sehr stabil läuft, werden alle Internet Server unter FreeBSD und Debian Linux betrieben. Operative Terminal Server für den Büroalltag betreiben wir unter Debian Linux mit XRDP, natürlich geschützt durch die Open Source VPN Lösung OpenVPN und hoch professionelle Open Source PfSense Firewalls.

Natürlich wird auch der E-Mail Server, sowie der Spam und Virenschutz selbst betrieben und im Haus gehostet. Eine Speicherung von unverschlüsselten E-Mails auf fremden Servern im Netz würde ich als unverantwortlich bezeichnen und bin der festen Überzeugung, dass Mails und deren Metadaten (wer-mit-wem mailt, etc.) nur im eigenen Haus betrieben werden sollten.

Mit OwnCloud wird hausintern eine eigene Lösung zum Speichern und Teilen von Daten, auch mit Dritten, betrieben. Natürlich ist auch dieser Server, da sensible Daten, im eigenen Haus.

Zusätzlich werden Server für Mastodon, eine dezentralisierte Open Source Micro Blogging Alternative, und Matrix/Riot.im, einer dezentralisierten, sicheren, Open Source Messenger und Kommunikationsplattform betrieben. Wie schon früher geschrieben, wurde mein alter Facebook Account, seit dem Umstieg auf Matrix/Riot.im, mit einem Script komplett geleert und existiert nur mehr als leere Hülle mit dem Hinweis auf meine Mastodon und Matrix/Riot.im Accounts. Einen Twitter Account, welcher die kommerzielle Alternative zu Mastodon wäre, habe ich privat nie gehabt.

Mit circa 1,5 Jahren relativ neu im Einsatz ist die Open Source Virtualisierungsplattform Proxmox, welche die frühere kommerzielle Variante ersetzt hat. Proxmox ist ein wirklicher Geheimtipp, der hier vollkommen fehlerfrei seinen Dienst versieht und viele Features beinhalten, welche bei kommerziellen Produkten hohe Aufpreise bedingen. Zum Beispiel das geniale Backup der virtuellen Maschinen, inklusive der eindrucksvollen Rücksicherungsmöglichkeit.

Und auch im Serverbereich gibt es keine wirkliche Ausrede, auch nicht für Privatanwender. Kleine Anwendungen können auch auf einem Raspberry für 40 € im eigenen Haus geräuschlos betrieben werden.

Es werden natürlich noch weitere Server betrieben, inklusive einer vollkommen eigenständigen public DNS Infrastruktur mit Hidden-Primaries und Web-basiertem Verwaltungstool. Den Betrieb von öffentlichen DNS Servern empfehle ich aber nur wirklichen IT Profis mit langjähriger Erfahrung auf diesem Gebiet.

In Summe besteht der Proxmox Cluster aus 4 Cluster Servern mit 40 CPU‘s, 140GB RAM und 4 TB Storage auf gespiegelten FreeBSD NAS Systemen. In Summe laufen 39 virtuelle Maschinen im Cluster. Eine beeindruckende, stabile Leistung, rein mit Open Source Software Lösungen. Alles komplett ohne Lizenzkosten.

Arbeitsplätze

Die verwendeten Arbeitsplätze, Desktops und Notebooks, werden alle unter Debian Linux mit XFCE als Desktop betrieben. Die Arbeitsplätze reichen von kleinen Netbooks bis hin zu i7 Systemen mit 16 GB RAM und 4 * 1920x1080 Monitoren zur Bildbearbeitung und zur Webseitenerstellung.

Generell wird nur LibreOffice als kompatible Office Anwendung verwendet. Einfach alle Fonts installieren, dann gibt es auch bei komplexeren Dokumenten keine Formatierungsprobleme. Textverarbeitung, Kalkulation, Präsentation und kleinere Datenbankanwendungen werden damit professionell und kompatibel abgedeckt. LibreOffice gilt auch als sicherer im Sinne der Angriffe mit Macros und anderen Bösartigkeiten. LibreOffice ist Open Source und komplett kostenlos. Es kann sogar parallel mit der kommerziellen Variante auf einem System betrieben werden um es zu testen.

Die Bedienung von LibreOffice ist kinderleicht und kann von ungeübten Benutzern in kürzester Zeit genauso beherrscht werden, wie die sehr teure kommerzielle Alternative. Funktionen und Buttons sind sehr ähnlich, d.h. für alle ohne jegliches Problem anwendbar und ohne Zeitaufwand in der Schulung im Rahmen einer Umstellung.

Da die CTS E-Mails in großen Umfang abarbeiten muss, wird eine professionelle Software als E-Mail Programm verwenden. Mit Mozilla Thunderbird, aus dem Hause des großartigen Browsers, werden alle Wünsche professioneller E-Mail Anwender genauso abgedeckt, wie die von Einsteigern. Mit dem Lightning Kalender als Standard Addon können auch professionelle Kalender via dem Industriestandard CalDAV eingebunden werden. Mit dem CardBook Plugin können via dem Industriestandard CardDAV zentrale Adressbücher eingebunden werden. Das alles mit Multi- Account, Multi-Identity und vielem mehr. Profis bei CTS arbeiten damit am Tag hunderte E-Mails in hunderten Unterordnern auf einfachste, Performance optimierte Weise an. Thunderbird und die Plugins sind natürlich Open Source und Lizenzfrei. Thunderbird gilt als extrem sicher und kann auch auf Text-only E-Mails umgestellt werden. Damit schützen Sie sich und Ihre Kontake vor unschönen Dingen in HTML E-Mails. Profis senden Text-Only!

Viele weitere Open Source Produkte runden die Installation ab. PGP Verschlüsselung für End-to-End verschlüsselte E-Mails, welche auch, egal bei wem und auf welchem Server. verschlüsselt am Server gespeichert werden. DigiKam, RawTherapee und GIMP für die professionelle Bildbearbeitung und IPTC Beschriftung, Shotcut für perfekten Videoschnitt inklusive Einbringung von Special-Effects, Audacity als professionellen Voice Editor, Blender als 3D Software, Scribus und Calibre für die Erstellung von Büchern und E-Books und vieles mehr sind kostenlos verfügbar.

Für Warenwirtschaft und Fakturierung sind kleine bis wirklich große Enterprise ERP Lösungen verfügbar. Dieses Thema würde einen eigenen Blog Eintrag füllen, aber es gibt für jede Unternehmensgröße eine Lösung. Von Kassabuch bis x-1000 Mitarbeiter ERP System.

Zum Surfen im Internet wird natürlich der gute Firefox Browser mit Sicherheits-Plugins, siehe https://kmj.at/mehr-privatsphaere-und-sicherheit-mit-kostenlosen-firefox-add-ons/ , verwendet.

Dazu unbedingt auch den Tor Browser für anonymes Surfen installieren. Das Tor Netz ist mittlerweile so groß und schnell, dass man sogar Videos schauen kann und auch wenn man nichts zu verbergen hat, geht es andere ganz einfach nichts an wo und wie man surft. Zur Suche qwant.com oder duckduckgo.com als Alternative zum Datensilo verwenden.

Verschlüsselter Messenger und verschlüsselte Telefonie, auch mit Dritten erfolgt nur über den Riot.IM Messenger angebunden an den eigenen Server im dezentralisierten Netz. Mitlesen durch Datensilos ist unerwünscht und wird dadurch vollkommen ausgeschlossen.

Natürlich sind auch Video Player und andere Kleinigkeiten die das Leben nett machen, an Bord.

Updates sind leicht und einfach durchzuführen und bei Linux Desktops ist neu aufsetzen eine seltene Ausnahme. Normalerweise, auch bei Releasewechsel, einfach updaten und fertig.

Die genannten Lösungen decken die Anforderung von 99% der Unternehmen ab und es ist eigentlich immer dieses - „Ich nehme das was andere nehmen, dann kann mich mein Boss bei Problemen nicht feuern!“ - , welches dem Unternehmen Kosten aufbürdet, welche nicht notwendig sind. Es ist zu bezweifeln dass kollektives Leiden mit anderen, dem Unternehmen bei Problemen ein Lösung schafft. Wissen, Weiterbildung und innovative, moderne Lösungen sind angesagt!

Die CTS hat ein sehr differenziertes Anforderungsprofil an Software, da nicht nur Textverarbeitung, Kalkulation, E-Mail, sondern auch die Erstellung von professionellen Webseiten, die Verwaltung und Bearbeitung von fast 200.000 Bildern der CTS Photo & Press Service Bildagentur und die Betreuung der IT Kunden zum Tagesgeschäft gehören. Ein reibungsloser Betrieb ist seit langem, ohne jede Lizenzkosten, gewährleistet.

Aktuell verbleibt ein einziges kleines Problem mit Banken, welche meist nicht in der Lage sind, außer für das proprietäre Betriebssystem eine Lösung anzubieten. In Wirklichkeit kein all zu großes Problem, da es hier nur bei Bankeinzügen trifft, welche über die Webanwendung nicht abgewickelt werden können. In Deutschland ist auch das kein Problem, denn für die HBCI Schnittstelle gibt es sogar Open Source Lösungen, welche alle Funktionen abdecken. Es ist aber zu erwarten, dass die Banken von modernen Kunden und auch von Apples MAC Anwendern zum Umdenken gezwungen werden und die fehlenden Funktionen vermutlich in die Web Anwendung integrieren. Zwischenzeitlich müssen österreichische Firmen auf ein deutsches Bankkonto mit HBCI für den Bankeinzug zurückgreifen. In Wirklichkeit ist alles lösbar.

Der Zwang von Banken Apps zu verwenden kann durch die Verwendung eines CardTAN Gerätes umgangen werden. Es ist zu empfehlen generell so wenig wie möglich Apps (Programme die mit Benutzerberechtigungen am Gerät laufen und Internetzugang haben) zu installieren und nur Webanwendungen, wodurch der Browser eine extra Schutzlinie ist, zu verwenden.

Mobile Geräte, Telefone und Tablets

Hier wird es etwas komplizierter, denn das Librem5 Telefon ist noch nicht ganz fertig. Die Zukunft für uns gehört, wenn die Marktreife geschafft wird, diesem Gerät. Hardware Kill-Switches für Micro und Kamera sind alleine schon ein Riesen Vorteil. Betriebssystem Linux und Open Source Apps eine gelungene Kombination.

Wenn man alle aktuell auftretenden Vorfälle bedenkt, dürfte niemand mehr eine Besprechung oder andere wichtige Besprechungen, privat oder beruflich, in Anwesenheit von Telefonen, Tablets, oder Sprachassistenten führen. Auch wenn man nichts zu verbergen hat, sind Wanzen eine unschöne Sache und die letzten Vorkommnsse haben gezeigt, das Home-Office Mitarbeiter zu den Sprachaufzeichnugnen kommen. Das war zu erwarten, aber wenn es jetzt auch bestätigt ist, sollte man diese Sprachassistenten in den Müll werfen und die paar Schritte zum Lichtschalter gehen. Fitness ist immer besser als zugängliche Gesprächem, die nicht für die Öffentlichkeit bestimmt waren.

Interessierte für alle Bereiche der Sicherheit lesen folgendes regelmäßig, am besten per RSS Newsfeed:

Es gibt einiges mehr, insbesondere wenn jemand tiefer in die Materie eintaucht, aber mit oben genannten ist das notwendige Tages-Minimumwissen für alle Anwender im Kurzüberblick abgedeckt.

Da es unerwünscht war proprietäre Systeme im mobilen Bereich zu verwenden wurde mit der Verwendung von LineageOS ein Kompromiss gefunden. LineageOS ist ein nacktes Android und sollte ohne die Google Apps installiert werden. Damit entspricht das Gerät dann den Vorstellungen von guter Privatsphäre. Einen detailierten Überblick über die Installation und die Verwendete Open Source Software findet sich im Blog: https://kmj.at/android-lineageos-privacy-teil3/ .

Natürlich ist es ganz wichtig, Apps wenn möglich nur aus dem F-Droid App Store zu installieren und sich von niemandem zu einer App zwingen zu lassen. Es ist, insbesondere am mobilen Gerät, keine App als vertrauenswürdig einzustufen, welche nicht als Open Source Software von mehreren Personen geprüft wurde. Das heißt nicht, dass man Anbietern hier Vorsatz unterstellt, aber diese Apps werden schnell und kostengünstig mit verfügbaren Tools von Drittanbietern erzeugt. Der Fokus liegt nicht auf Security, sondern auf schnell und kostengünstig rausbringen. Insbesondere verwaiste Apps sind ein erhöhtes Risiko. Zum Beispiel ladet ein Benutzer bei einer Veranstaltung eine App des Veranstalters, welche dann nie mehr upgedatet wird. Die App läuft aber immer im Hintergrund und wenn das Entwicklungstool einen Fehler hat, dann ist das Telefon verloren und wird von außen übernommen. Einfach die beiden Links regelmäßig lesen. Es tauchen täglich viele solcher sogenannter Exploits auf. Eine verwaiste App setzt das Telefon einem Angriffsszenario aus, weil das zugrunde liegende Entwicklungstool vom Anbieter nicht mehr upgedatet wird. Und Tschüss Telefon, schon gehörst Du dem Eindringling.

Wenn schon eine nicht vertrauenswürdige App installiert wird, sofort löschen, wenn diese nicht mehr benötigt wird. Und generell immer die Web Version mit dem Browser verwenden. Die App hilft im Normalfall dem App Anbieter Daten zu sammeln und nicht dem Benutzer. Dieser sollte mit der Web Anwendung über den Browser alle Funktionen verfügbar haben. Wenn schon eine Benachrichtigung für irgendetwas erfolgen soll, verwenden Sie E-Mail oder noch besser Riot.IM Messenger Nachrichten.

Und zum Abschluss

Zum Abschluss noch etwas zum lachen, oder weinen, je nachdem von welcher Seite man es betrachtet.

Immer wieder hört man am Nachbartisch im Restaurant oder Kaffee, bzw. bei Besprechungen:

Ich bin gehackt worden!

Ja, das ist mir/uns auch passiert

Und die Personen verfallen in kollektives gemeinsames Bedauern, aber sie selbst sind ja unschuldig!

Dazu sei gesagt:

  • 99% werden nicht gehackt sondern sind selbst Schuld!
  • 1 % sind echte, gezielte Hacks

Bei den 99% passiert normalerweise folgendes:

  • Selber schuld:

  • 1) Download von irgendeiner Software und Installation am eigenen PC

  • 2) Download von irgendeiner APP und Installation am mobilen Gerät

  • 3) Klick auf Ja, Ja, Ja, bei Fragen ob aktiviert, oder ausgeführt werden soll

Bis auf ganz wenige Ausnahmen führen die 99% die Schadsoftware selbst, nach mehrmaligem Klicken auf „JA“, mit den eigenen Berechtigungen am PC oder mobilen Gerät aus und sind damit selbst schuld, dass das Gerät mit Malware verseucht, oder verschlüsselt wird. Etwas mehr Vorsicht und -“Think before you click“ - würde vermutlich 70% der Vorfälle verhindern. Wenn man dann noch Text-E-Mails anstatt von HTML-E-Mails verwenden würde, könnte man, da man den richtigen Link sieht, vermutlich weitere 20% verhindern.

Die verbleibenden 9% wird man vermutlich akzeptieren müssen, aber der Rest wäre mit Hirn einschalten, Gier und Neugier ablegen und einem EDV-Anfängerkurs mit Fokus Sicherheit über weite Strecken zu verhindern.

Also „Nein, zu 99% nicht gehackt worden, sondern meist vermeidbarer Bedienerfehler und selbst schuld.“

Für Unternehmen bietet die CTS GMBH (https://cts-solutions.at) Beratungen, Consulting und Projektabwicklung für einen erfolgreichen Umstieg.

Riot.IM Messenger: Kurzanleitung für Benutzer mit Videos (Stand 05/2019)

Riot Messenger, die neue Art der Kommunikation!

  • Freie Open Source Anwendung
  • verfügbar für Windows, Linux, Mac, Android und IOS
  • Unterstützt End-to-End Verschlüsselung ohne Mitleser, auch bei Gruppenchat!
  • Chat, Voice und Video. Voice verschlüsselt, wenn der Raum verschlüsselt ist!
  • Der Referenz Client für den Matrix Server.
  • Jeder kann seinen eigenen Matrix Server betreiben oder sich auf einem öffentliche Server einen Account lösen.

UPDATE / HINWEIS / WICHTIG (2019-05-16)

Aufgrund der Überlastung des größten öffentlichen Servers matrix.org empfehle ich einen anderen öffentlichen Server aus dieser Liste für die Erstellung eines Accounts zu wählen:

Ich empfehle Freunden den Server: https://www.privacytools.io/, welcher in dieser Anleitung auch referenziert wird. Der Homeserver zur Registrierung findet sich hier: https://riot.privacytools.io/#/welcome . Für die Riot Windows, Linux, MAC,, Android oder IOS App, verfügbar von https://riot.im sind folgende Einstellungen zu verwenden: Heimserver: https://chat.privacytools.io . Deine Adresse wird dann: benutzername:privacytools.io

Erfreuliche News

Es ist sehr erfreulich, dass immer mehr Menschen auf Ihre Privatsphäre und Daten achten. Langsam bildet sich auch bei breiteren Bevölkerungsschichten ein Bewusstsein für mehr Kontrolle über die eigenen Daten aus. Riot.im als Anwendung für den Benutzer in Verbindung mit dem Open Source Matrix Synapse Server (Matrix.org) ist mehr als ein Messenger, es ist ein Tool für dezentralisierte Zusammenarbeit, Internettelefonie, Videotelefonie und Messaging. Durch den dezentralen Aufbau wird nur eine minimale Menge an Metadaten erzeugt und bei aktivierter End-to-End Verschlüsselung ist Mitlesen auch am Server unmöglich. Da so viele Menschen in die Matrix wechseln und dieser Beitrag extrem oft abgerufen wird, erfolgte nun ein Update der Anleitung.

Dezentraler Aufbau heißt, dass alle Matrix Server, ähnlich wie bei E-Mail untereinander kommunizieren können. Der Benutzer verbindet sich zu seinem Homeserver und damit wird seine IP für Betreiber anderer Server auch nicht sichtbar.

Anleitungen

Matrix Server (nur für alle, die selbst einen Server betreiben möchten)

Unter https://kmj.at/how-to-setup-your-matrix-synapse-messaging-homeserver-may-2019-english/ findet sich eine Anleitung zur Einrichtung eines eigenen Servers. Alle die einen eigenen Server für sich, Freunde oder die Firma an die Matrix anschließen wollen, finden sich hier alle Informationen für das sehr einfache Setup.

Riot.im (für alle Benutzer, Step-by-Step Anleitung)

Riot.im ist die App zum Einstieg in die Matrix für alle die einfach und sicher kommunizieren wollen!. Das wirklich genial daran ist, dass es die Riot App für IOS (Apple), Android, Windows, MAC und Linux gibt und man mit allen Geräten gleichzeitig online sein kann. Alle Geräte sind immer synchron und es ist egal, wo man gerade liest oder kommuniziert.

Diese Anleitung zeigt, wie man einen Account anlegt und den ersten Chat startet.

1) Registrierung des Accounts

Jeder Benutzer in der Matrix benötigt einen Account auf einem Homeserver. Ähnlich wie bei E-Mail haben die Adressen 2 Teile. Zum Beispiel ist meine Adresse:

  • @karl:matrix.ctseuro.com

Diese Adresse besteht auf dem @, welche die Adresse eröffnet. Danach folgt der Name des Benutzers am Homeserver, in meinem Fall karl. Die Trennung des Namens und der Servers erfolgt durch einen :. Danach folgt der Servername, auf dem der Benutzer einen Account hat, in meinem Fall am Server matrix.ctseuro.com.

Wir registrieren für diese Anleitung einen Account bei privacytools.io, welchen wir aus obiger Liste ausgewählt haben. Um den Account zu registrieren gehen wir auf:

klicken dort auf Konto erstellen und geben in der folgenden Maske

Benutzernamen und Passwort ein. Als Open Source Messenger sammelt Riot, anders als zentrale Datensilos keine Telefonnummern, oder E-Mail Adressen. Damit ist auch die Eingabe einer E-Mail Adresse nicht notwendig. Auf mobilen Endgeräten fragt Riot höflich um den Zugriff auf Kontakt, Mikorofon und Kamera. Den Zugriff auf die Kontakte sollte man generell ablehnen und Mikrofon und Kamera benötigt man nur, wenn man über Riot auch telefoniert, bzw. Videochats führt.

ACHTUNG Ohne E-Mail Adresse kann das Passwort natürlich auch nicht über diese zurückgesetzt werden. Ändern kann man es in den Einstellungen, aber wer sein Passwort vergisst hat den Account für immer verloren! Also Passwort gut merken. Es empfiehlt sich ein Passwort Safe ala Keepass.

Danach auf Registrieren klicken und die Frage nach der fehlenden E-Mail mit fortfahren beantworten.

Danach befinden wir uns bereits in der Webversion des Riot Messengers. Diese wollen wir aber, da wir überall mit End-to-End Verschlüsselung arbeiten wollen, nicht verwenden. Details dazu später. Über Einstellungen -> Abmelden melden wir uns ab. Abmelden ist extrem wichtig!

Beim Abmelden werden wir gefragt, ob wir die Schlüsselsicherung verwenden wollen. Dazu muss ich etwas ausholen, dieser Punkt ist aber sehr wichtig.

Ich versuche es nicht ganz so technisch, einfach verständlich zu erklären. Jedes Gerät eines Benutzers hat einen Schlüssel, zusätzlich haben Räume Schlüssel. Jeder Chat is ein Raum. D.h. 1:1 Chat ist ein Raum mit den beiden Benutzern, ein Gruppenchat ist ein Raum mit mehr als zwei Benutzern. Diese Schlüssel werden auf dem Endgerät gespeichert und wären einem anderen Gerät am selben Account nicht zugänglich. Zusätzlich löscht das Programm beim Abmelden aus Sicherheitsgründen alle Schlüssel. Um nun sicherzustellen, dass diese Schlüssel nicht verloren gehen – dann wären ältere Chats mangels fehlender Schlüssel nicht mehr lesbar – wurde die Möglichkeit eines Schlüsselbackups am Server eingerichtet.

Es ist ganz wichtig ein wirklich langes und sicheres Passwort zu verwenden und sich dieses und den Wiederherstellungsschlüssel sehr gut zu merken! (Keepass!) Es kann niemand helfen! Wer vergisst, hat verloren!

Ein Klick auf Beginne die Schlüsselsicherung zu nutzen bringt die Passwortabfrage. Hier wird das sichere Passwort eingegeben und auf Nächstes geklickt.

Nun ist es ganz wichtig den Wiederherstellungsschlüssel sicher zu verwahren!

Nicht fortfahren, bevor alles gut gesichert verwahrt ist! In die Zwischenablage kopieren und verwenden, bzw. herunterladen. Danach OK!

Und bei Erfolg noch einmal OK!

Nun, da die Schüssel gesichert sind, noch einmal Einstellungen und Abmelden, danach sollte die Abmeldung erfolgen.

2) Installation und Start der Riot APP

Der Riot Messenger ist für alle Betriebssysteme verfügbar und es können mehrere Geräte gleichzeitig verwendet werden. Z.B. am PC und am Handy, oder Tablet. Wir verwenden in dieser Anleitung die PC Version, jedoch funktionieren Android und IOS analog dazu.

Das Programm laden wir von https://riot.im und installieren es am System.

Danach den Riot Messenger starten und auf Anmelden klicken oder tippen.

Nun ist es notwendig den Homeserver umzustellen. Als Default ist matrix.org vorgegeben, d.h. wir klicken auf Ändern und geben den Homeserver: - https://chat.privacytools.io

und unsere zuvor registrierten Benutzerdaten ein.

Die vollständige Matrix Adresse ist @meinwunschname:privacytools.io

Der Server gibt einen Raum vor. Hier einfach auf den Raumnamen klicken, dann auf das Zahnrad und den Raum verlassen und die Einstellungsseite mit dem X schließen.

Die persönlichen Einstellungen finden sich beim eigenen Namen unter Einstellungen. Pro Raum gibt es das Zahnrad für die Raumeinstellungen. Es gibt sehr viele Möglichkeiten Benachrichtigungen und anderes Wichtiges einzustellen.

Hinweis: MeinRiot läuft aus verschiedenen selbst eingestellten Gründen in Englisch, aber natürlich spricht Riot per Default, auf einem deutschsprachigen System Deutsch.

3) Schlüsselsicherung verbinden

Nun ist es ganz wichtig die zuerst erstellte Schlüsselsicherung zu aktivieren. Auf Connect this device, bzw, Verdinden Schlüsselsicherung klicken.

Passwort eingeben

Und fertig. Mit X wegklicken.

chritt 2 und 3 müssen pro Gerät, für welches dieser Account verwendet wird, wiederholt werden.

4) Der erste Chat

Wir starten mit einem 1:1 Chat und schreiben mich an. Dazu klicken wir auf das + neben Personen und geben meine Adresse @karl:matrix.ctseuro.com ein.

Mit Chat beginnen leiten wir den Chat ein. Danach muss gewartet werden, ob die Einladung zum Chat von der anderen Seite akzeptiert wird.

Wenn der Eingeladene den Raum betritt wird eine Statusmeldung ausgegeben:

WICHTIG: Der Chat ist aktuell noch nicht verschlüsselt!

Über das Zahnrad in die Raumeinstellungen gehen, dort auf Sicherheit und Datenschutz und den Verschlüsselungsregler auf EIN stellen:

und OK, danach mit X wegklicken:

Das Einschalten der Verschlüsselung wird als Statusmeldung eingetragen.

Sicher einer der gewöhnungsbedürftigsten Punkte beim Umstieg ist die Verschlüsselung. Um es für Benutzer ohne Kenntnisse über Verschlüsselung und Kryptografie verständlich zu machen:

  • Nachdem die Verschlüsselung aktiviert wird, erscheinen bei anderen Benutzern orange Warndreiecke. Nun müssen die Schlüssel (einer oder mehrere pro Benutzer) verifiziert werden. Danach erscheint beim Schreiben ein grünes Schloss.
  • Bei Gruppenräumen kann es sinnvoller sein, die Warnmeldung mit „Trotzdem senden“ zu quittieren und nicht alle Benutzer des Raumes zu verifizieren.

Um die Geräte eines Benutzers zu verifizieren, klickt man auf den Benutzer und lässt sich die Geräteliste anzeigen. Mit Verifizieren kann man die Geräte verifizieren. Am besten mit Legacy Verifizierung verwenden (für veraltete Clients), das geht am schnellsten.

Dieser Vorgang muss für alle Geräte durchgeführt werden, andernfalls muss die Warnmeldung mit „Trotzdem senden“ quittiert werden, um Text zu senden.

HINWEIS

Bitte keine Suppportanfragen oder ähnliches an meine persönliche Adresse richten.

Es gibt einen öffentlichen Raum, den Sie über die Raumliste, oder durch Eingabe von

  • /j #kmj:matrix.ctseuro.com

betreten können. Hier helfe ich ab und zu mit Tipps aus.

Verschiedenes

Aufbau Mobile:

Musterbild zeigt die Android App, die Symbole sind aber auf allen Systemen gleich.

Im Hauptbereich sieht man:

  • Favoriten (über die Raumeinstellungen)
  • Personen (1:1 Kommunikation)
  • Räume (Gruppenkommunikation)
  • Niedrige Priorität (Nur Sortierung, sonst, keine Auswirkung)

In der Auswahlleiste unten:

  • Zurück zum Home Schirm
  • Favoriten anzeigen
  • Personen anzeigen
  • Räume anzeigen
  • Communities anzeigen

Communities:

Du kannst Communities (bestehen aus Personen und Räumen) erstellen, beitreten, oder eingeladen werden. Communities machen die Kommunikation, bzw. die Organisation von Projekten einfacher, da man in einer Ansicht alle Personen und Räume sieht. In der PC App und am Tablet werden die Communitysymbole für eine einfachere Navigation auch links angezeigt.

Räume:

Riot besteht aus Räumen, auch 1:1 Chats sind Räume, jedoch mit nur 2 Personen. Gruppenräume sind für mehrere Personen offen. Der Eröffner des Raumes ist Administrator und kann über das Zahnrad, bzw. über das Menü des Raum verwalten. Nur bei 1:1 Räumen sind beide Gesprächspartner Raumadministrator. Räume können manuell den Favoriten, bzw. der niedrigen Priorität zugeordnet werden. Damit bleibt die Übersicht gewahrt.

Räume haben vielfältige Einstellungsmöglichkeiten für Berechtigungen, Bild, Beschreibung und vieles mehr. Alle Einstellungen finden sich im Zahnrad, bzw. über die Raumeinstellungen. Die wichtigste Einstellung ist, egal ob 1:1 oder Gruppe, die Verschlüsselung zu aktivieren. Damit ist alles sicher End-to-End verschlüsselt.

Adressen in der Matrix:

Ähnlich wie bei E-Mails werden die Adressen in der Matrix aufgebaut und bestehen auch aus Benutzer und Domain. Eine persönliche Adresse sieht so aus:

  • @benutzername:server.com

Anders als bei E-Mails ist die erste Stelle speziell:

@ - steht für eine Person
# - steht für einen Gruppenraum
+ - steht für eine Community

Danach folgt der Benutzername und durch : getrennt der Server auf der der Benutzer registriert ist. Da sich aktuell sehr viele am öffentlichen Matrix Server registrieren sehen viele Adressen so aus:

@meinname:matrix.org

Wenn jemand auf einem anderen Server registriert ist, wie z.B. ich, dann sieht die Adresse z.B. so aus:

@karl:matrix.ctseuro.com

Mit dieser Adresse kann man einen 1:1 Chat mit dieser Person starten. Wenn Sie die Adresse eines Raumes kennen, können Sie durch Eingabe von:

- /j #kmj:matrix.ctseuro.com

einen Raum betreten.

Sprachnachrichten

Multi Account auf Android und LineageOS

  • Riot.IM für Account 1 installieren
  • miniVector (Riot Version ohne Telefonie) für Account 2 installieren

How to Setup your Matrix Synapse Messaging Homeserver (May 2019/English)

Feel free to link to this page if you like this blog post, but do not copy/paste the text somewhere else without asking. If you want to post the text in full or partial on your site or blog you must add in bold inside a h1 tag:

Just to be clear

This is how I have done it. Whatever you do, you do it for yourself. I am in no way responsible for anything. Everything you do is on your own risk!

Public Matrix Room

There is a public room #kmj:matrix.ctseuro.com where I answer questions from time to time in English or German. Please join if you have questions.

A guide to setup a Matrix Synapse Homeserver

End-to-end encrypted messenger and collaboration server using Python 3.6. We will add Turnserver for voice based communicatioa, add a firewall and more. If we are done you run your own homeserver which is able to communicate with all other matrix servers on the Internet via federation. Prefered Client on Linux, Mac, Windows, Android and IOS is https://riot.im .

At the time of writing this age we use FreeBSD 12.0. Newer FreeBSD Versions are very similar to setup.

prepare everything

For bare bone setup write the ISO to some USB stick, for virtual setup using Proxmox or VMWare, place the ISO on your host and create a virtual machine booting with the ISO file.

The required resources are:

  • RAM 4-6 GB for up to 100 users
  • 2-3 Cores
  • 80GB Harddisk
  • network card
  • static IP address with DNS entry pointing to it

Assume we create the homeserver matrix.ourdomain.com on IP 1.2.3.4. Each Matrix Synapse server is called homeserver. We have pointed an DNS A record matrix.ourdomain.com to IP 1.2.3.4. Check with nslookup matrix.ourdomain.com, or ping matrix.ourdomain.com that the name resolves.

NOTE: you must change ourdomain.com to your domain name and 1.2.3.4 to your IP!

Setup FreeBSD

Boot the ISO file and do a minimum setup of FreeBSD as described on FreeBSD.org. Enable sshd to be able to login. This sets the hostname, creates your user account, formats the harddisk and creates the partitions. Do not install ports or other stuff, except sshd. Finally reboot and login with the user you created. Detailed FreeBSD setup instructions is out of the scope of this document.

Setup additional software

use su to become root and enter y if asked to fetch and install pkg system.

  • pkg install ca_root_nss gcc mc bash curl
  • pkg install libffi libxslt jpeg
  • pkg install py36-virtualenv
  • pkg install py36-psycopg2
  • pkg clean -a

Create Environment

  • virtualenv-3.6 -p python3.6 /home/synapse/env

Always use sh for working with virtualenv.

sh
. /home/synapse/env/bin/activate
(env) #

The env # must be shown and do not forget to add the . at the beginning of the line. If it is not shown you have made some error! Go back and recheck if this happens!

Setup basic Synapse inside virtualenv

While still showing (env) # do:

  • pip install –upgrade pip
  • pip install –upgrade setuptools

This should show:

 . /home/synapse/env/bin/activate
(env) # pip install --upgrade pip
Requirement already up-to-date: pip in /usr/home/synapse/env/lib/python3.6/site-packages (19.1.1)
(env) # pip install --upgrade setuptools
Requirement already up-to-date: setuptools in /usr/home/synapse/env/lib/python3.6/site-packages (41.0.1)

If this is fine, continue with:

  • pip install matrix-synapse[all]

This will take some time, download different things and should finally end without error.

Setup Postgresql Database

  • leave virtualenv with typing: deactivate
  • you should only see # without env now
  • pkg install postgresql95-server
  • sysrc postgresql_enable=yes
  • service postgresql initdb
  • service postgresql start

now we have a running Postgresql database engine.

Setup the Firewall, DNS, NTP and Mail.

Before we continue we should setup our firewall to avoid attacks while runnign our setup.

Create /etc/rc.firewall.KMJ with the following content:

#!/bin/sh -
#
# Setup system for ipfw(4) firewall service.
#

# Suck in the configuration variables.
if [ -z "${source_rc_confs_defined}" ]; then
        if [ -r /etc/defaults/rc.conf ]; then
                . /etc/defaults/rc.conf
                source_rc_confs
        elif [ -r /etc/rc.conf ]; then
                . /etc/rc.conf
        fi
fi

############

setup_loopback() {
        ############
        # Only in rare cases do you want to change these rules
        #
        ${fwcmd} add 100 pass all from any to any via lo0
        ${fwcmd} add 200 deny all from any to 127.0.0.0/8
        ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any
        ${fwcmd} add 400 deny all from any to ::1
        ${fwcmd} add 500 deny all from ::1 to any
}

. /etc/rc.subr
. /etc/network.subr

############
# Set quiet mode if requested
#
case ${firewall_quiet} in
[Yy][Ee][Ss])
        fwcmd="/sbin/ipfw -q"
        ;;
*)
        fwcmd="/sbin/ipfw"
        ;;
esac

############
# Flush out the list before we begin.
#
${fwcmd} -f flush
setup_loopback

############
#
# We do not allow IPv6 Traffic
${fwcmd} add deny  ip6 from any to any

# Allow TCP through if setup succeeded
${fwcmd} add pass tcp from any to any established

# Allow IP fragments to pass through
${fwcmd} add pass all from any to any frag

# Allow setup of incoming connections
         
${fwcmd} add pass tcp from ${MGMTIP} to me 22 setup     # SSH

${fwcmd} add pass tcp from any to me 8448 setup         # MATRIX
${fwcmd} add pass tcp from any to me 3478 setup         # TURN
${fwcmd} add pass udp from any to me 3478 keep-state    # TURN
${fwcmd} add pass tcp from any to me 5349 setup         # TURN TLS
${fwcmd} add pass udp from any to me 5349 keep-state    # TURN TLS

${fwcmd} add pass tcp from any to me 80 setup           # letsencrypt only
${fwcmd} add pass tcp from any to me 443 setup          # https rev proxy fuer matrix

# Allow setup of outgoing TCP connections only
${fwcmd} add pass tcp from me to any setup

# Disallow setup of all other TCP connections
${fwcmd} add deny tcp from any to any setup

# Allow DNS queries out in the world
${fwcmd} add pass udp from me to any 53 keep-state

# Allow NTP queries out in the world
${fwcmd} add pass udp from me to any 123 keep-state

# Deny the Rest
${fwcmd} add deny all from any to any

Assuming you have an IPv4 connectivity only we block all IPv6 traffic. Furthermore it is not recommended to open SSH to the public. I assume you are a good administrator and restrict ssh access to the static IP of your notebook or desktop system. Otherwise you should setup OpenVPN to access your server. Do not use any as MGMTIP. If you open critial services to the public you will regret it later. They will brute force you and one day somebody will break into your system. Be smart and work like a professional!

Now add or change the settings in /etc/rc.conf. We already add settings we need later. You network configuration is not shown here and should not be touched. Do not change

  • hostname=
  • ifconfig_
  • defaultrouter=

parameters.

keymap="de.kbd" # do not change your keymap. we use german
clear_tmp_enable="YES"
syslogd_flags="-ss"
dumpdev="NO"

MGMTIP="5.6.8.9" # change to static IP of your notebook or desktop system
 
firewall_enable="YES"           # Set to YES to enable firewall functionality
firewall_script="/etc/rc.firewall.KMJ" # Which script to run to set up the firewall
firewall_type="KMJ"         # Firewall type (see /etc/rc.firewall)
firewall_quiet="NO"             # Set to YES to suppress rule display
firewall_logging="YES"          # Set to YES to enable events logging
firewall_logif="NO"             # Set to YES to create logging-pseudo interface

#######################
 
local_unbound_enable="YES"
sshd_enable="YES"
ntpd_enable="YES"

apache24_enable="YES"
postgresql_enable="YES"

synapse_enable="YES"
turnserver_enable="YES"

###############################

now change /etc/resolv.conf so it reads:

search ourdomain.com
nameserver 127.0.0.1
options edns0

The final setting requires that our server is able to send out e-mails.

  • cd /etc/mail
  • make
  • make install
  • edit /etc/mail/aliases and uncomment the root: entry.
  • change it to root: you@yourmaildomain.com
  • run newaliases

Using this settings we run a local cache DNS and resolve locally. Furthermore we run a time syncing via NTP daemon. To make sure everything is done OK, we should reboot now.

  • shutdown -r now

Check our Setup

  • login after reboot
  • do a ps -xaj and check that local-ubound, syslogd, ntpd and postgres deamons are running
  • do a mail -s “test” root, enter some text+ and press CTRL+d to send. You should receive your root mail. Check /var/log/maillog if not,

Setup Turnserver

To handle voice calls behind NAT you should setup Turnserver as kind of proxy. Setup is pretty easy.

  • pkg install turnserver
  • create turnserver.conf like below, but change your IP, domain and secret!
realm=matrix.ourdomain.com
listening-ip=1.2.3.4
#lt-cred-mech
use-auth-secret
static-auth-secret=1cd6c96c1f8d4f1008042d76d646691e3b0512e830d7f486d6ad6b702bfc234e
no-tcp-relay
user-quota=12 # 4 streams per video call, so 12 streams = 3 simultaneous relayed calls per user.
total-quota=1200

cert=/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/cert.pem
pkey=/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/privkey.pem

do not start turnserver now!

Setup Apache Reversed-Proxy and SSL Cert

We want Apache to handle the connections to https Port 443 from the clients. Federation is done via port 8448. So we need to setup an Apache Reversed-Proxy and get a free SSL Cert from Letsencrypt.

  • pkg install apache24 cronolog
  • we already added apache24_enable=“YES” to /etc/rc.conf earlier
  • save /usr/local/etc/apache24/httpd.conf and replace its content with
  • replace ourdomain.com with your domain
ServerRoot "/usr/local"

ServerSignature Off

Listen 80

LoadModule authn_file_module libexec/apache24/mod_authn_file.so
LoadModule authn_core_module libexec/apache24/mod_authn_core.so
LoadModule authz_host_module libexec/apache24/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache24/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache24/mod_authz_user.so
LoadModule authz_core_module libexec/apache24/mod_authz_core.so
LoadModule access_compat_module libexec/apache24/mod_access_compat.so
LoadModule auth_basic_module libexec/apache24/mod_auth_basic.so
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
LoadModule reqtimeout_module libexec/apache24/mod_reqtimeout.so
LoadModule filter_module libexec/apache24/mod_filter.so
LoadModule mime_module libexec/apache24/mod_mime.so
LoadModule log_config_module libexec/apache24/mod_log_config.so
LoadModule env_module libexec/apache24/mod_env.so
LoadModule headers_module libexec/apache24/mod_headers.so
LoadModule setenvif_module libexec/apache24/mod_setenvif.so
LoadModule version_module libexec/apache24/mod_version.so
LoadModule ssl_module libexec/apache24/mod_ssl.so
LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
LoadModule unixd_module libexec/apache24/mod_unixd.so
LoadModule autoindex_module libexec/apache24/mod_autoindex.so
<IfModule !mpm_prefork_module>
        #LoadModule cgid_module libexec/apache24/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
        #LoadModule cgi_module libexec/apache24/mod_cgi.so
</IfModule>
LoadModule dir_module libexec/apache24/mod_dir.so
LoadModule userdir_module libexec/apache24/mod_userdir.so
LoadModule alias_module libexec/apache24/mod_alias.so
LoadModule rewrite_module libexec/apache24/mod_rewrite.so

LoadModule proxy_module libexec/apache24/mod_proxy.so
LoadModule proxy_connect_module libexec/apache24/mod_proxy_connect.so
LoadModule proxy_http_module libexec/apache24/mod_proxy_http.so
IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.conf
<IfModule unixd_module>
    User www
    Group www
</IfModule>

ServerAdmin hostmaster@ourdomain.com
ServerName matrix.ourdomain.com:80

DirectoryIndex index.html

<Directory />
    AllowOverride none
    Require all denied
</Directory>

DocumentRoot "/usr/local/www/apache24/data"
<Directory "/usr/local/www/apache24/data">
    Options -Indexes +FollowSymLinks -ExecCGI -MultiViews
    AllowOverride None
    Require all granted
</Directory>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog  "|/usr/local/sbin/cronolog /var/log/www/%Y/%m/%d/errors.log"
LogLevel warn

LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i port:%p\"" combined
CustomLog "|/usr/local/sbin/cronolog /var/log/www/%Y/%m/%d/access.log" combined

<IfModule mime_module>
    #
    TypesConfig etc/apache24/mime.types
    #AddType application/x-gzip .tgz
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

Include etc/apache24/extra/httpd-ssl.conf

SSLRandomSeed startup builtin
SSLRandomSeed connect builtin

Include etc/apache24/Includes/*.conf

then save /usr/local/etc/apache24/extra/httpd-ssl.conf and replace it with the following content. Again replace IP and ourdomain.com with yours.

lISTEN 443

SSLCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA
SSLProxyCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA

SSLHonorCipherOrder on

SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3

SSLPassPhraseDialog  builtin

SSLSessionCache        "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout  300

<VirtualHost _default_:443>

ServerName matrix.ourdomain.com:443
ServerAdmin hostmaster@ourdomain.com

DocumentRoot "/usr/local/www/apache24/data-ssl"
SSLEngine on

SSLCertificateFile /usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/cert.pem
SSLCertificateKeyFile /usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/privkey.pem
SSLCertificateChainFile //usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/fullchain.pem

UserDir disabled
DirectoryIndex index.html index.htm


<Directory /usr/local/www/apache24/data-ssl>
    Options -Indexes -FollowSymLinks -ExecCGI -MultiViews
    AllowOverride None
    require all granted
</Directory>

################################################################################
# Matrix Synapse
################################################################################

ProxyPass /_matrix http://127.0.0.1:8008/_matrix
ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix

################################################################################

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i port:%p\"" combined
CustomLog "|/usr/local/sbin/cronolog /var/log/www/%Y/%m/%d/access.log" combined

</VirtualHost>

Now create the SSL directory:

  • mkdir /usr/local/www/apache24/data-ssl
  • touch /usr/local/www/apache24/data-ssl/index.html
  • echo “Server is offline” > /usr/local/www/apache24/data-ssl/index.html

NOTE

To be able to receive our cert from Letsenrypt, temporary change

  • Include etc/apache24/extra/httpd-ssl.conf

to

  • #Include etc/apache24/extra/httpd-ssl.conf

in httpd.conf. This must be changed back after we received the initial cert.

Now create the Letsencrypt stuff

  • mkdir -p /home/letsencrypt/cts
  • mkdir -p /usr/local/etc/matrix-synapse/certs
  • create /home/letsencrypt/cts/Run_Certs.sh with the following content
#!/bin/sh

cd /home/letsencrypt/cts
chmod 750 dehydrated
/home/letsencrypt/cts/dehydrated  -c  --config /home/letsencrypt/cts/conf-ip1/config.sh \
                                      --hook /home/letsencrypt/cts/conf-ip1/hook.sh

/usr/sbin/service apache24 restart

########################################################################

HOST=`hostname`
echo "copy cert for synapse / matrix server on ${HOST}"

/bin/cp -r /usr/home/letsencrypt/cts/conf-ip1/certs/${HOST} /usr/local/etc/matrix-synapse/certs
/usr/sbin/chown -R root:nobody /usr/local/etc/matrix-synapse/certs
/bin/chmod -R 755 /usr/local/etc/matrix-synapse/certs

/usr/sbin/service synapse restart

/bin/ps -xaj | /usr/bin/grep synapse
########################################################################
  • chown root:wheel /home/letsencrypt/cts/Run_Certs.sh
  • chmod 750 /home/letsencrypt/cts/Run_Certs.sh

  • create /home/letsencrypt/cts/dehydrated with the following content

#!/usr/bin/env bash

# dehydrated by lukas2511
# Source: https://github.com/lukas2511/dehydrated
#
# This script is licensed under The MIT License (see LICENSE for more information).

set -e
set -u
set -o pipefail
[[ -n "${ZSH_VERSION:-}" ]] && set -o SH_WORD_SPLIT && set +o FUNCTION_ARGZERO
umask 077 # paranoid umask, we're creating private keys

# Find directory in which this script is stored by traversing all symbolic links
SOURCE="${0}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
  SOURCE="$(readlink "$SOURCE")"
  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
SCRIPTDIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

BASEDIR="${SCRIPTDIR}"

# Create (identifiable) temporary files
_mktemp() {
  # shellcheck disable=SC2068
  mktemp ${@:-} "${TMPDIR:-/tmp}/dehydrated-XXXXXX"
}

# Check for script dependencies
check_dependencies() {
  # just execute some dummy and/or version commands to see if required tools exist and are actually usable
  openssl version > /dev/null 2>&1 || _exiterr "This script requires an openssl binary."
  _sed "" < /dev/null > /dev/null 2>&1 || _exiterr "This script requires sed with support for extended (modern) regular expressions."
  command -v grep > /dev/null 2>&1 || _exiterr "This script requires grep."
  _mktemp -u > /dev/null 2>&1 || _exiterr "This script requires mktemp."
  diff -u /dev/null /dev/null || _exiterr "This script requires diff."

  # curl returns with an error code in some ancient versions so we have to catch that
  set +e
  curl -V > /dev/null 2>&1
  retcode="$?"
  set -e
  if [[ ! "${retcode}" = "0" ]] && [[ ! "${retcode}" = "2" ]]; then
    _exiterr "This script requires curl."
  fi
}

store_configvars() {
  __KEY_ALGO="${KEY_ALGO}"
  __OCSP_MUST_STAPLE="${OCSP_MUST_STAPLE}"
  __PRIVATE_KEY_RENEW="${PRIVATE_KEY_RENEW}"
  __KEYSIZE="${KEYSIZE}"
  __CHALLENGETYPE="${CHALLENGETYPE}"
  __HOOK="${HOOK}"
  __WELLKNOWN="${WELLKNOWN}"
  __HOOK_CHAIN="${HOOK_CHAIN}"
  __OPENSSL_CNF="${OPENSSL_CNF}"
  __RENEW_DAYS="${RENEW_DAYS}"
  __IP_VERSION="${IP_VERSION}"
}

reset_configvars() {
  KEY_ALGO="${__KEY_ALGO}"
  OCSP_MUST_STAPLE="${__OCSP_MUST_STAPLE}"
  PRIVATE_KEY_RENEW="${__PRIVATE_KEY_RENEW}"
  KEYSIZE="${__KEYSIZE}"
  CHALLENGETYPE="${__CHALLENGETYPE}"
  HOOK="${__HOOK}"
  WELLKNOWN="${__WELLKNOWN}"
  HOOK_CHAIN="${__HOOK_CHAIN}"
  OPENSSL_CNF="${__OPENSSL_CNF}"
  RENEW_DAYS="${__RENEW_DAYS}"
  IP_VERSION="${__IP_VERSION}"
}

# verify configuration values
verify_config() {
  [[ "${CHALLENGETYPE}" =~ (http-01|dns-01) ]] || _exiterr "Unknown challenge type ${CHALLENGETYPE}... can not continue."
  if [[ "${CHALLENGETYPE}" = "dns-01" ]] && [[ -z "${HOOK}" ]]; then
    _exiterr "Challenge type dns-01 needs a hook script for deployment... can not continue."
  fi
  if [[ "${CHALLENGETYPE}" = "http-01" && ! -d "${WELLKNOWN}" ]]; then
    _exiterr "WELLKNOWN directory doesn't exist, please create ${WELLKNOWN} and set appropriate permissions."
  fi
  [[ "${KEY_ALGO}" =~ ^(rsa|prime256v1|secp384r1)$ ]] || _exiterr "Unknown public key algorithm ${KEY_ALGO}... can not continue."
  if [[ -n "${IP_VERSION}" ]]; then
    [[ "${IP_VERSION}" = "4" || "${IP_VERSION}" = "6" ]] || _exiterr "Unknown IP version ${IP_VERSION}... can not continue."
  fi
}

# Setup default config values, search for and load configuration files
load_config() {
  # Check for config in various locations
  if [[ -z "${CONFIG:-}" ]]; then
    for check_config in "/etc/dehydrated" "/usr/local/etc/dehydrated" "${PWD}" "${SCRIPTDIR}"; do
      if [[ -f "${check_config}/config" ]]; then
        BASEDIR="${check_config}"
        CONFIG="${check_config}/config"
        break
      fi
    done
  fi

  # Default values
  CA="https://acme-v01.api.letsencrypt.org/directory"
  LICENSE="https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf"
  CERTDIR=
  ACCOUNTDIR=
  CHALLENGETYPE="http-01"
  CONFIG_D=
  DOMAINS_D=
  DOMAINS_TXT=
  HOOK=
  HOOK_CHAIN="no"
  RENEW_DAYS="30"
  KEYSIZE="4096"
  WELLKNOWN=
  PRIVATE_KEY_RENEW="yes"
  KEY_ALGO=rsa
  OPENSSL_CNF="$(openssl version -d | cut -d\" -f2)/openssl.cnf"
  CONTACT_EMAIL=
  LOCKFILE=
  OCSP_MUST_STAPLE="no"
  IP_VERSION=

  if [[ -z "${CONFIG:-}" ]]; then
    echo "#" >&2
    echo "# !! WARNING !! No main config file found, using default config!" >&2
    echo "#" >&2
  elif [[ -f "${CONFIG}" ]]; then
    echo "# INFO: Using main config file ${CONFIG}"
    BASEDIR="$(dirname "${CONFIG}")"
    # shellcheck disable=SC1090
    . "${CONFIG}"
  else
    _exiterr "Specified config file doesn't exist."
  fi

  if [[ -n "${CONFIG_D}" ]]; then
    if [[ ! -d "${CONFIG_D}" ]]; then
      _exiterr "The path ${CONFIG_D} specified for CONFIG_D does not point to a directory." >&2
    fi

    for check_config_d in "${CONFIG_D}"/*.sh; do
      if [[ ! -e "${check_config_d}" ]]; then
        echo "# !! WARNING !! Extra configuration directory ${CONFIG_D} exists, but no configuration found in it." >&2
        break
      elif [[ -f "${check_config_d}" ]] && [[ -r "${check_config_d}" ]]; then
        echo "# INFO: Using additional config file ${check_config_d}"
        # shellcheck disable=SC1090
        . "${check_config_d}"
      else
        _exiterr "Specified additional config ${check_config_d} is not readable or not a file at all." >&2
      fi
   done
  fi

  # Remove slash from end of BASEDIR. Mostly for cleaner outputs, doesn't change functionality.
  BASEDIR="${BASEDIR%%/}"

  # Check BASEDIR and set default variables
  [[ -d "${BASEDIR}" ]] || _exiterr "BASEDIR does not exist: ${BASEDIR}"

  CAHASH="$(echo "${CA}" | urlbase64)"
  [[ -z "${ACCOUNTDIR}" ]] && ACCOUNTDIR="${BASEDIR}/accounts"
  mkdir -p "${ACCOUNTDIR}/${CAHASH}"
  [[ -f "${ACCOUNTDIR}/${CAHASH}/config" ]] && . "${ACCOUNTDIR}/${CAHASH}/config"
  ACCOUNT_KEY="${ACCOUNTDIR}/${CAHASH}/account_key.pem"
  ACCOUNT_KEY_JSON="${ACCOUNTDIR}/${CAHASH}/registration_info.json"

  if [[ -f "${BASEDIR}/private_key.pem" ]] && [[ ! -f "${ACCOUNT_KEY}" ]]; then
    echo "! Moving private_key.pem to ${ACCOUNT_KEY}"
    mv "${BASEDIR}/private_key.pem" "${ACCOUNT_KEY}"
  fi
  if [[ -f "${BASEDIR}/private_key.json" ]] && [[ ! -f "${ACCOUNT_KEY_JSON}" ]]; then
    echo "! Moving private_key.json to ${ACCOUNT_KEY_JSON}"
    mv "${BASEDIR}/private_key.json" "${ACCOUNT_KEY_JSON}"
  fi

  [[ -z "${CERTDIR}" ]] && CERTDIR="${BASEDIR}/certs"
  [[ -z "${DOMAINS_TXT}" ]] && DOMAINS_TXT="${BASEDIR}/domains.txt"
  [[ -z "${WELLKNOWN}" ]] && WELLKNOWN="/var/www/dehydrated"
  [[ -z "${LOCKFILE}" ]] && LOCKFILE="${BASEDIR}/lock"
  [[ -n "${PARAM_NO_LOCK:-}" ]] && LOCKFILE=""

  [[ -n "${PARAM_HOOK:-}" ]] && HOOK="${PARAM_HOOK}"
  [[ -n "${PARAM_CERTDIR:-}" ]] && CERTDIR="${PARAM_CERTDIR}"
  [[ -n "${PARAM_CHALLENGETYPE:-}" ]] && CHALLENGETYPE="${PARAM_CHALLENGETYPE}"
  [[ -n "${PARAM_KEY_ALGO:-}" ]] && KEY_ALGO="${PARAM_KEY_ALGO}"
  [[ -n "${PARAM_OCSP_MUST_STAPLE:-}" ]] && OCSP_MUST_STAPLE="${PARAM_OCSP_MUST_STAPLE}"
  [[ -n "${PARAM_IP_VERSION:-}" ]] && IP_VERSION="${PARAM_IP_VERSION}"

  verify_config
  store_configvars
}

# Initialize system
init_system() {
  load_config

  # Lockfile handling (prevents concurrent access)
  if [[ -n "${LOCKFILE}" ]]; then
    LOCKDIR="$(dirname "${LOCKFILE}")"
    [[ -w "${LOCKDIR}" ]] || _exiterr "Directory ${LOCKDIR} for LOCKFILE ${LOCKFILE} is not writable, aborting."
    ( set -C; date > "${LOCKFILE}" ) 2>/dev/null || _exiterr "Lock file '${LOCKFILE}' present, aborting."
    remove_lock() { rm -f "${LOCKFILE}"; }
    trap 'remove_lock' EXIT
  fi

  # Get CA URLs
  CA_DIRECTORY="$(http_request get "${CA}")"
  CA_NEW_CERT="$(printf "%s" "${CA_DIRECTORY}" | get_json_string_value new-cert)" &&
  CA_NEW_AUTHZ="$(printf "%s" "${CA_DIRECTORY}" | get_json_string_value new-authz)" &&
  CA_NEW_REG="$(printf "%s" "${CA_DIRECTORY}" | get_json_string_value new-reg)" &&
  # shellcheck disable=SC2015
  CA_REVOKE_CERT="$(printf "%s" "${CA_DIRECTORY}" | get_json_string_value revoke-cert)" ||
  _exiterr "Problem retrieving ACME/CA-URLs, check if your configured CA points to the directory entrypoint."

  # Export some environment variables to be used in hook script
  export WELLKNOWN BASEDIR CERTDIR CONFIG

  # Checking for private key ...
  register_new_key="no"
  if [[ -n "${PARAM_ACCOUNT_KEY:-}" ]]; then
    # a private key was specified from the command line so use it for this run
    echo "Using private key ${PARAM_ACCOUNT_KEY} instead of account key"
    ACCOUNT_KEY="${PARAM_ACCOUNT_KEY}"
    ACCOUNT_KEY_JSON="${PARAM_ACCOUNT_KEY}.json"
  else
    # Check if private account key exists, if it doesn't exist yet generate a new one (rsa key)
    if [[ ! -e "${ACCOUNT_KEY}" ]]; then
      echo "+ Generating account key..."
      _openssl genrsa -out "${ACCOUNT_KEY}" "${KEYSIZE}"
      register_new_key="yes"
    fi
  fi
  openssl rsa -in "${ACCOUNT_KEY}" -check 2>/dev/null > /dev/null || _exiterr "Account key is not valid, can not continue."

  # Get public components from private key and calculate thumbprint
  pubExponent64="$(printf '%x' "$(openssl rsa -in "${ACCOUNT_KEY}" -noout -text | awk '/publicExponent/ {print $2}')" | hex2bin | urlbase64)"
  pubMod64="$(openssl rsa -in "${ACCOUNT_KEY}" -noout -modulus | cut -d'=' -f2 | hex2bin | urlbase64)"

  thumbprint="$(printf '{"e":"%s","kty":"RSA","n":"%s"}' "${pubExponent64}" "${pubMod64}" | openssl dgst -sha256 -binary | urlbase64)"

  # If we generated a new private key in the step above we have to register it with the acme-server
  if [[ "${register_new_key}" = "yes" ]]; then
    echo "+ Registering account key with ACME server..."
    [[ ! -z "${CA_NEW_REG}" ]] || _exiterr "Certificate authority doesn't allow registrations."
    # If an email for the contact has been provided then adding it to the registration request
    FAILED=false
    if [[ -n "${CONTACT_EMAIL}" ]]; then
      (signed_request "${CA_NEW_REG}" '{"resource": "new-reg", "contact":["mailto:'"${CONTACT_EMAIL}"'"], "agreement": "'"$LICENSE"'"}' > "${ACCOUNT_KEY_JSON}") || FAILED=true
    else
      (signed_request "${CA_NEW_REG}" '{"resource": "new-reg", "agreement": "'"$LICENSE"'"}' > "${ACCOUNT_KEY_JSON}") || FAILED=true
    fi
    if [[ "${FAILED}" = "true" ]]; then
      echo
      echo
      echo "Error registering account key. See message above for more information."
      rm "${ACCOUNT_KEY}" "${ACCOUNT_KEY_JSON}"
      exit 1
    fi
  fi

}

# Different sed version for different os types...
_sed() {
  if [[ "${OSTYPE}" = "Linux" ]]; then
    sed -r "${@}"
  else
    sed -E "${@}"
  fi
}

# Print error message and exit with error
_exiterr() {
  echo "ERROR: ${1}" >&2
  exit 1
}

# Remove newlines and whitespace from json
clean_json() {
  tr -d '\r\n' | _sed -e 's/ +/ /g' -e 's/\{ /{/g' -e 's/ \}/}/g' -e 's/\[ /[/g' -e 's/ \]/]/g'
}

# Encode data as url-safe formatted base64
urlbase64() {
  # urlbase64: base64 encoded string with '+' replaced with '-' and '/' replaced with '_'
  #_sed 's/^\x0+//g' | openssl base64 -e | tr -d '\n\r' | _sed -e 's:=*$::g' -e 'y:+/:-_:'
   openssl base64 -e | tr -d '\n\r' | _sed -e 's:=*$::g' -e 'y:+/:-_:'
}

# Convert hex string to binary data
hex2bin() {
  # Remove spaces, add leading zero, escape as hex string and parse with printf
  printf -- "$(cat | _sed -e 's/[[:space:]]//g' -e 's/^(.(.{2})*)$/0\1/' -e 's/(.{2})/\\x\1/g')"
}

# Get string value from json dictionary
get_json_string_value() {
  local filter
  filter=$(printf 's/.*"%s": *"\([^"]*\)".*/\\1/p' "$1")
  sed -n "${filter}"
}

# OpenSSL writes to stderr/stdout even when there are no errors. So just
# display the output if the exit code was != 0 to simplify debugging.
_openssl() {
  set +e
  out="$(openssl "${@}" 2>&1)"
  res=$?
  set -e
  if [[ ${res} -ne 0 ]]; then
    echo "  + ERROR: failed to run $* (Exitcode: ${res})" >&2
    echo >&2
    echo "Details:" >&2
    echo "${out}" >&2
    echo >&2
    exit ${res}
  fi
}

# Send http(s) request with specified method
http_request() {
  tempcont="$(_mktemp)"

  if [[ -n "${IP_VERSION:-}" ]]; then
      ip_version="-${IP_VERSION}"
  fi

  set +e
  if [[ "${1}" = "head" ]]; then
    statuscode="$(curl ${ip_version:-} -s -w "%{http_code}" -o "${tempcont}" "${2}" -I)"
    curlret="${?}"
  elif [[ "${1}" = "get" ]]; then
    statuscode="$(curl ${ip_version:-} -s -w "%{http_code}" -o "${tempcont}" "${2}")"
    curlret="${?}"
  elif [[ "${1}" = "post" ]]; then
    statuscode="$(curl ${ip_version:-} -s -w "%{http_code}" -o "${tempcont}" "${2}" -d "${3}")"
    curlret="${?}"
  else
    set -e
    _exiterr "Unknown request method: ${1}"
  fi
  set -e

  if [[ ! "${curlret}" = "0" ]]; then
    _exiterr "Problem connecting to server (${1} for ${2}; curl returned with ${curlret})"
  fi

  if [[ ! "${statuscode:0:1}" = "2" ]]; then
    echo "  + ERROR: An error occurred while sending ${1}-request to ${2} (Status ${statuscode})" >&2
    echo >&2
    echo "Details:" >&2
    cat "${tempcont}" >&2
    echo >&2
    echo >&2
    rm -f "${tempcont}"

    # Wait for hook script to clean the challenge if used
    if [[ -n "${HOOK}" ]] && [[ "${HOOK_CHAIN}" != "yes" ]] && [[ -n "${challenge_token:+set}" ]]; then
      "${HOOK}" "clean_challenge" '' "${challenge_token}" "${keyauth}"
    fi

    # remove temporary domains.txt file if used
    [[ -n "${PARAM_DOMAIN:-}" && -n "${DOMAINS_TXT:-}" ]] && rm "${DOMAINS_TXT}"
    exit 1
  fi

  cat "${tempcont}"
  rm -f "${tempcont}"
}

# Send signed request
signed_request() {
  # Encode payload as urlbase64
  payload64="$(printf '%s' "${2}" | urlbase64)"

  # Retrieve nonce from acme-server
  nonce="$(http_request head "${CA}" | grep Replay-Nonce: | awk -F ': ' '{print $2}' | tr -d '\n\r')"

  # Build header with just our public key and algorithm information
  header='{"alg": "RS256", "jwk": {"e": "'"${pubExponent64}"'", "kty": "RSA", "n": "'"${pubMod64}"'"}}'

  # Build another header which also contains the previously received nonce and encode it as urlbase64
  protected='{"alg": "RS256", "jwk": {"e": "'"${pubExponent64}"'", "kty": "RSA", "n": "'"${pubMod64}"'"}, "nonce": "'"${nonce}"'"}'
  protected64="$(printf '%s' "${protected}" | urlbase64)"

  # Sign header with nonce and our payload with our private key and encode signature as urlbase64
  signed64="$(printf '%s' "${protected64}.${payload64}" | openssl dgst -sha256 -sign "${ACCOUNT_KEY}" | urlbase64)"

  # Send header + extended header + payload + signature to the acme-server
  data='{"header": '"${header}"', "protected": "'"${protected64}"'", "payload": "'"${payload64}"'", "signature": "'"${signed64}"'"}'

  http_request post "${1}" "${data}"
}

# Extracts all subject names from a CSR
# Outputs either the CN, or the SANs, one per line
extract_altnames() {
  csr="${1}" # the CSR itself (not a file)

  if ! <<<"${csr}" openssl req -verify -noout 2>/dev/null; then
    _exiterr "Certificate signing request isn't valid"
  fi

  reqtext="$( <<<"${csr}" openssl req -noout -text )"
  if <<<"${reqtext}" grep -q '^[[:space:]]*X509v3 Subject Alternative Name:[[:space:]]*$'; then
    # SANs used, extract these
    altnames="$( <<<"${reqtext}" grep -A1 '^[[:space:]]*X509v3 Subject Alternative Name:[[:space:]]*$' | tail -n1 )"
    # split to one per line:
    # shellcheck disable=SC1003
    altnames="$( <<<"${altnames}" _sed -e 's/^[[:space:]]*//; s/, /\'$'\n''/g' )"
    # we can only get DNS: ones signed
    if grep -qv '^DNS:' <<<"${altnames}"; then
      _exiterr "Certificate signing request contains non-DNS Subject Alternative Names"
    fi
    # strip away the DNS: prefix
    altnames="$( <<<"${altnames}" _sed -e 's/^DNS://' )"
    echo "${altnames}"

  else
    # No SANs, extract CN
    altnames="$( <<<"${reqtext}" grep '^[[:space:]]*Subject:' | _sed -e 's/.* CN=([^ /,]*).*/\1/' )"
    echo "${altnames}"
  fi
}

# Create certificate for domain(s) and outputs it FD 3
sign_csr() {
  csr="${1}" # the CSR itself (not a file)

  if { true >&3; } 2>/dev/null; then
    : # fd 3 looks OK
  else
    _exiterr "sign_csr: FD 3 not open"
  fi

  shift 1 || true
  altnames="${*:-}"
  if [ -z "${altnames}" ]; then
    altnames="$( extract_altnames "${csr}" )"
  fi

  if [[ -z "${CA_NEW_AUTHZ}" ]] || [[ -z "${CA_NEW_CERT}" ]]; then
    _exiterr "Certificate authority doesn't allow certificate signing"
  fi

  local idx=0
  if [[ -n "${ZSH_VERSION:-}" ]]; then
    local -A challenge_uris challenge_tokens keyauths deploy_args
  else
    local -a challenge_uris challenge_tokens keyauths deploy_args
  fi

  # Request challenges
  for altname in ${altnames}; do
    # Ask the acme-server for new challenge token and extract them from the resulting json block
    echo " + Requesting challenge for ${altname}..."
    response="$(signed_request "${CA_NEW_AUTHZ}" '{"resource": "new-authz", "identifier": {"type": "dns", "value": "'"${altname}"'"}}' | clean_json)"

    challenges="$(printf '%s\n' "${response}" | sed -n 's/.*\("challenges":[^\[]*\[[^]]*]\).*/\1/p')"
    repl=$'\n''{' # fix syntax highlighting in Vim
    challenge="$(printf "%s" "${challenges//\{/${repl}}" | grep \""${CHALLENGETYPE}"\")"
    challenge_token="$(printf '%s' "${challenge}" | get_json_string_value token | _sed 's/[^A-Za-z0-9_\-]/_/g')"
    challenge_uri="$(printf '%s' "${challenge}" | get_json_string_value uri)"

    if [[ -z "${challenge_token}" ]] || [[ -z "${challenge_uri}" ]]; then
      _exiterr "Can't retrieve challenges (${response})"
    fi

    # Challenge response consists of the challenge token and the thumbprint of our public certificate
    keyauth="${challenge_token}.${thumbprint}"

    case "${CHALLENGETYPE}" in
      "http-01")
        # Store challenge response in well-known location and make world-readable (so that a webserver can access it)
        printf '%s' "${keyauth}" > "${WELLKNOWN}/${challenge_token}"
        chmod a+r "${WELLKNOWN}/${challenge_token}"
        keyauth_hook="${keyauth}"
        ;;
      "dns-01")
        # Generate DNS entry content for dns-01 validation
        keyauth_hook="$(printf '%s' "${keyauth}" | openssl dgst -sha256 -binary | urlbase64)"
        ;;
    esac

    challenge_uris[${idx}]="${challenge_uri}"
    keyauths[${idx}]="${keyauth}"
    challenge_tokens[${idx}]="${challenge_token}"
    # Note: assumes args will never have spaces!
    deploy_args[${idx}]="${altname} ${challenge_token} ${keyauth_hook}"
    idx=$((idx+1))
  done

  # Wait for hook script to deploy the challenges if used
  # shellcheck disable=SC2068
  [[ -n "${HOOK}" ]] && [[ "${HOOK_CHAIN}" = "yes" ]] && "${HOOK}" "deploy_challenge" ${deploy_args[@]}

  # Respond to challenges
  idx=0
  for altname in ${altnames}; do
    challenge_token="${challenge_tokens[${idx}]}"
    keyauth="${keyauths[${idx}]}"

    # Wait for hook script to deploy the challenge if used
    # shellcheck disable=SC2086
    [[ -n "${HOOK}" ]] && [[ "${HOOK_CHAIN}" != "yes" ]] && "${HOOK}" "deploy_challenge" ${deploy_args[${idx}]}

    # Ask the acme-server to verify our challenge and wait until it is no longer pending
    echo " + Responding to challenge for ${altname}..."
    result="$(signed_request "${challenge_uris[${idx}]}" '{"resource": "challenge", "keyAuthorization": "'"${keyauth}"'"}' | clean_json)"

    reqstatus="$(printf '%s\n' "${result}" | get_json_string_value status)"

    while [[ "${reqstatus}" = "pending" ]]; do
      sleep 1
      result="$(http_request get "${challenge_uris[${idx}]}")"
      reqstatus="$(printf '%s\n' "${result}" | get_json_string_value status)"
    done

    [[ "${CHALLENGETYPE}" = "http-01" ]] && rm -f "${WELLKNOWN}/${challenge_token}"

    # Wait for hook script to clean the challenge if used
    if [[ -n "${HOOK}" ]] && [[ "${HOOK_CHAIN}" != "yes" ]] && [[ -n "${challenge_token}" ]]; then
      # shellcheck disable=SC2086
      "${HOOK}" "clean_challenge" ${deploy_args[${idx}]}
    fi
    idx=$((idx+1))

    if [[ "${reqstatus}" = "valid" ]]; then
      echo " + Challenge is valid!"
    else
      break
    fi
  done

  # Wait for hook script to clean the challenges if used
  # shellcheck disable=SC2068
  [[ -n "${HOOK}" ]] && [[ "${HOOK_CHAIN}" = "yes" ]] && "${HOOK}" "clean_challenge" ${deploy_args[@]}

  if [[ "${reqstatus}" != "valid" ]]; then
    # Clean up any remaining challenge_tokens if we stopped early
    if [[ "${CHALLENGETYPE}" = "http-01" ]]; then
      while [ ${idx} -lt ${#challenge_tokens[@]} ]; do
        rm -f "${WELLKNOWN}/${challenge_tokens[${idx}]}"
        idx=$((idx+1))
      done
    fi

    _exiterr "Challenge is invalid! (returned: ${reqstatus}) (result: ${result})"
  fi

  # Finally request certificate from the acme-server and store it in cert-${timestamp}.pem and link from cert.pem
  echo " + Requesting certificate..."
  csr64="$( <<<"${csr}" openssl req -outform DER | urlbase64)"
  crt64="$(signed_request "${CA_NEW_CERT}" '{"resource": "new-cert", "csr": "'"${csr64}"'"}' | openssl base64 -e)"
  crt="$( printf -- '-----BEGIN CERTIFICATE-----\n%s\n-----END CERTIFICATE-----\n' "${crt64}" )"

  # Try to load the certificate to detect corruption
  echo " + Checking certificate..."
  _openssl x509 -text <<<"${crt}"

  echo "${crt}" >&3

  unset challenge_token
  echo " + Done!"
}

# Create certificate for domain(s)
sign_domain() {
  domain="${1}"
  altnames="${*}"
  timestamp="$(date +%s)"

  echo " + Signing domains..."
  if [[ -z "${CA_NEW_AUTHZ}" ]] || [[ -z "${CA_NEW_CERT}" ]]; then
    _exiterr "Certificate authority doesn't allow certificate signing"
  fi

  # If there is no existing certificate directory => make it
  if [[ ! -e "${CERTDIR}/${domain}" ]]; then
    echo " + Creating new directory ${CERTDIR}/${domain} ..."
    mkdir -p "${CERTDIR}/${domain}" || _exiterr "Unable to create directory ${CERTDIR}/${domain}"
  fi

  privkey="privkey.pem"
  # generate a new private key if we need or want one
  if [[ ! -r "${CERTDIR}/${domain}/privkey.pem" ]] || [[ "${PRIVATE_KEY_RENEW}" = "yes" ]]; then
    echo " + Generating private key..."
    privkey="privkey-${timestamp}.pem"
    case "${KEY_ALGO}" in
      rsa) _openssl genrsa -out "${CERTDIR}/${domain}/privkey-${timestamp}.pem" "${KEYSIZE}";;
      prime256v1|secp384r1) _openssl ecparam -genkey -name "${KEY_ALGO}" -out "${CERTDIR}/${domain}/privkey-${timestamp}.pem";;
    esac
  fi

  # Generate signing request config and the actual signing request
  echo " + Generating signing request..."
  SAN=""
  for altname in ${altnames}; do
    SAN+="DNS:${altname}, "
  done
  SAN="${SAN%%, }"
  local tmp_openssl_cnf
  tmp_openssl_cnf="$(_mktemp)"
  cat "${OPENSSL_CNF}" > "${tmp_openssl_cnf}"
  printf "[SAN]\nsubjectAltName=%s" "${SAN}" >> "${tmp_openssl_cnf}"
  if [ "${OCSP_MUST_STAPLE}" = "yes" ]; then
    printf "\n1.3.6.1.5.5.7.1.24=DER:30:03:02:01:05" >> "${tmp_openssl_cnf}"
  fi
  openssl req -new -sha256 -key "${CERTDIR}/${domain}/${privkey}" -out "${CERTDIR}/${domain}/cert-${timestamp}.csr" -subj "/CN=${domain}/" -reqexts SAN -config "${tmp_openssl_cnf}"
  rm -f "${tmp_openssl_cnf}"

  crt_path="${CERTDIR}/${domain}/cert-${timestamp}.pem"
  # shellcheck disable=SC2086
  sign_csr "$(< "${CERTDIR}/${domain}/cert-${timestamp}.csr" )" ${altnames} 3>"${crt_path}"

  # Create fullchain.pem
  echo " + Creating fullchain.pem..."
  cat "${crt_path}" > "${CERTDIR}/${domain}/fullchain-${timestamp}.pem"
  tmpchain="$(_mktemp)"
  http_request get "$(openssl x509 -in "${CERTDIR}/${domain}/cert-${timestamp}.pem" -noout -text | grep 'CA Issuers - URI:' | cut -d':' -f2-)" > "${tmpchain}"
  if grep -q "BEGIN CERTIFICATE" "${tmpchain}"; then
    mv "${tmpchain}" "${CERTDIR}/${domain}/chain-${timestamp}.pem"
  else
    openssl x509 -in "${tmpchain}" -inform DER -out "${CERTDIR}/${domain}/chain-${timestamp}.pem" -outform PEM
    rm "${tmpchain}"
  fi
  cat "${CERTDIR}/${domain}/chain-${timestamp}.pem" >> "${CERTDIR}/${domain}/fullchain-${timestamp}.pem"

  # Update symlinks
  [[ "${privkey}" = "privkey.pem" ]] || ln -sf "privkey-${timestamp}.pem" "${CERTDIR}/${domain}/privkey.pem"

  ln -sf "chain-${timestamp}.pem" "${CERTDIR}/${domain}/chain.pem"
  ln -sf "fullchain-${timestamp}.pem" "${CERTDIR}/${domain}/fullchain.pem"
  ln -sf "cert-${timestamp}.csr" "${CERTDIR}/${domain}/cert.csr"
  ln -sf "cert-${timestamp}.pem" "${CERTDIR}/${domain}/cert.pem"

  # Wait for hook script to clean the challenge and to deploy cert if used
  export KEY_ALGO
  [[ -n "${HOOK}" ]] && "${HOOK}" "deploy_cert" "${domain}" "${CERTDIR}/${domain}/privkey.pem" "${CERTDIR}/${domain}/cert.pem" "${CERTDIR}/${domain}/fullchain.pem" "${CERTDIR}/${domain}/chain.pem" "${timestamp}"

  unset challenge_token
  echo " + Done!"
}

# Usage: --cron (-c)
# Description: Sign/renew non-existant/changed/expiring certificates.
command_sign_domains() {
  init_system

  if [[ -n "${PARAM_DOMAIN:-}" ]]; then
    DOMAINS_TXT="$(_mktemp)"
    printf -- "${PARAM_DOMAIN}" > "${DOMAINS_TXT}"
  elif [[ -e "${DOMAINS_TXT}" ]]; then
    if [[ ! -r "${DOMAINS_TXT}" ]]; then
      _exiterr "domains.txt found but not readable"
    fi
  else
    _exiterr "domains.txt not found and --domain not given"
  fi

  # Generate certificates for all domains found in domains.txt. Check if existing certificate are about to expire
  ORIGIFS="${IFS}"
  IFS=$'\n'
  for line in $(<"${DOMAINS_TXT}" tr -d '\r' | tr '[:upper:]' '[:lower:]' | _sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*$//g' -e 's/[[:space:]]+/ /g' | (grep -vE '^(#|$)' || true)); do
    reset_configvars
    IFS="${ORIGIFS}"
    domain="$(printf '%s\n' "${line}" | cut -d' ' -f1)"
    morenames="$(printf '%s\n' "${line}" | cut -s -d' ' -f2-)"
    cert="${CERTDIR}/${domain}/cert.pem"

    force_renew="${PARAM_FORCE:-no}"

    if [[ -z "${morenames}" ]];then
      echo "Processing ${domain}"
    else
      echo "Processing ${domain} with alternative names: ${morenames}"
    fi

    # read cert config
    # for now this loads the certificate specific config in a subshell and parses a diff of set variables.
    # we could just source the config file but i decided to go this way to protect people from accidentally overriding
    # variables used internally by this script itself.
    if [[ -n "${DOMAINS_D}" ]]; then
      certconfig="${DOMAINS_D}/${domain}"
    else
      certconfig="${CERTDIR}/${domain}/config"
    fi

    if [ -f "${certconfig}" ]; then
      echo " + Using certificate specific config file!"
      ORIGIFS="${IFS}"
      IFS=$'\n'
      for cfgline in $(
        beforevars="$(_mktemp)"
        aftervars="$(_mktemp)"
        set > "${beforevars}"
        # shellcheck disable=SC1090
        . "${certconfig}"
        set > "${aftervars}"
        diff -u "${beforevars}" "${aftervars}" | grep -E '^\+[^+]'
        rm "${beforevars}"
        rm "${aftervars}"
      ); do
        config_var="$(echo "${cfgline:1}" | cut -d'=' -f1)"
        config_value="$(echo "${cfgline:1}" | cut -d'=' -f2-)"
        case "${config_var}" in
          KEY_ALGO|OCSP_MUST_STAPLE|PRIVATE_KEY_RENEW|KEYSIZE|CHALLENGETYPE|HOOK|WELLKNOWN|HOOK_CHAIN|OPENSSL_CNF|RENEW_DAYS)
            echo "   + ${config_var} = ${config_value}"
            declare -- "${config_var}=${config_value}"
            ;;
          _) ;;
          *) echo "   ! Setting ${config_var} on a per-certificate base is not (yet) supported"
        esac
      done
      IFS="${ORIGIFS}"
    fi
    verify_config

    if [[ -e "${cert}" ]]; then
      printf " + Checking domain name(s) of existing cert..."

      certnames="$(openssl x509 -in "${cert}" -text -noout | grep DNS: | _sed 's/DNS://g' | tr -d ' ' | tr ',' '\n' | sort -u | tr '\n' ' ' | _sed 's/ $//')"
      givennames="$(echo "${domain}" "${morenames}"| tr ' ' '\n' | sort -u | tr '\n' ' ' | _sed 's/ $//' | _sed 's/^ //')"

      if [[ "${certnames}" = "${givennames}" ]]; then
        echo " unchanged."
      else
        echo " changed!"
        echo " + Domain name(s) are not matching!"
        echo " + Names in old certificate: ${certnames}"
        echo " + Configured names: ${givennames}"
        echo " + Forcing renew."
        force_renew="yes"
      fi
    fi

    if [[ -e "${cert}" ]]; then
      echo " + Checking expire date of existing cert..."
      valid="$(openssl x509 -enddate -noout -in "${cert}" | cut -d= -f2- )"

      printf " + Valid till %s " "${valid}"
      if openssl x509 -checkend $((RENEW_DAYS * 86400)) -noout -in "${cert}"; then
        printf "(Longer than %d days). " "${RENEW_DAYS}"
        if [[ "${force_renew}" = "yes" ]]; then
          echo "Ignoring because renew was forced!"
        else
          # Certificate-Names unchanged and cert is still valid
          echo "Skipping renew!"
          [[ -n "${HOOK}" ]] && "${HOOK}" "unchanged_cert" "${domain}" "${CERTDIR}/${domain}/privkey.pem" "${CERTDIR}/${domain}/cert.pem" "${CERTDIR}/${domain}/fullchain.pem" "${CERTDIR}/${domain}/chain.pem"
          continue
        fi
      else
        echo "(Less than ${RENEW_DAYS} days). Renewing!"
      fi
    fi

    # shellcheck disable=SC2086
    if [[ "${PARAM_KEEP_GOING:-}" = "yes" ]]; then
      sign_domain ${line} &
      wait $! || true
    else
      sign_domain ${line}
    fi
  done

  # remove temporary domains.txt file if used
  [[ -n "${PARAM_DOMAIN:-}" ]] && rm -f "${DOMAINS_TXT}"

  exit 0
}

# Usage: --signcsr (-s) path/to/csr.pem
# Description: Sign a given CSR, output CRT on stdout (advanced usage)
command_sign_csr() {
  # redirect stdout to stderr
  # leave stdout over at fd 3 to output the cert
  exec 3>&1 1>&2

  init_system

  csrfile="${1}"
  if [ ! -r "${csrfile}" ]; then
    _exiterr "Could not read certificate signing request ${csrfile}"
  fi

  # gen cert
  certfile="$(_mktemp)"
  sign_csr "$(< "${csrfile}" )" 3> "${certfile}"

  # print cert
  echo "# CERT #" >&3
  cat "${certfile}" >&3
  echo >&3

  # print chain
  if [ -n "${PARAM_FULL_CHAIN:-}" ]; then
    # get and convert ca cert
    chainfile="$(_mktemp)"
    tmpchain="$(_mktemp)"
    http_request get "$(openssl x509 -in "${certfile}" -noout -text | grep 'CA Issuers - URI:' | cut -d':' -f2-)" > "${tmpchain}"
    if grep -q "BEGIN CERTIFICATE" "${tmpchain}"; then
      mv "${tmpchain}" "${chainfile}"
    else
      openssl x509 -in "${tmpchain}" -inform DER -out "${chainfile}" -outform PEM
      rm "${tmpchain}"
    fi

    echo "# CHAIN #" >&3
    cat "${chainfile}" >&3

    rm "${chainfile}"
  fi

  # cleanup
  rm "${certfile}"

  exit 0
}

# Usage: --revoke (-r) path/to/cert.pem
# Description: Revoke specified certificate
command_revoke() {
  init_system

  [[ -n "${CA_REVOKE_CERT}" ]] || _exiterr "Certificate authority doesn't allow certificate revocation."

  cert="${1}"
  if [[ -L "${cert}" ]]; then
    # follow symlink and use real certificate name (so we move the real file and not the symlink at the end)
    local link_target
    link_target="$(readlink -n "${cert}")"
    if [[ "${link_target}" =~ ^/ ]]; then
      cert="${link_target}"
    else
      cert="$(dirname "${cert}")/${link_target}"
    fi
  fi
  [[ -f "${cert}" ]] || _exiterr "Could not find certificate ${cert}"

  echo "Revoking ${cert}"

  cert64="$(openssl x509 -in "${cert}" -inform PEM -outform DER | urlbase64)"
  response="$(signed_request "${CA_REVOKE_CERT}" '{"resource": "revoke-cert", "certificate": "'"${cert64}"'"}' | clean_json)"
  # if there is a problem with our revoke request _request (via signed_request) will report this and "exit 1" out
  # so if we are here, it is safe to assume the request was successful
  echo " + Done."
  echo " + Renaming certificate to ${cert}-revoked"
  mv -f "${cert}" "${cert}-revoked"
}

# Usage: --cleanup (-gc)
# Description: Move unused certificate files to archive directory
command_cleanup() {
  load_config

  # Create global archive directory if not existant
  if [[ ! -e "${BASEDIR}/archive" ]]; then
    mkdir "${BASEDIR}/archive"
  fi

  # Loop over all certificate directories
  for certdir in "${CERTDIR}/"*; do
    # Skip if entry is not a folder
    [[ -d "${certdir}" ]] || continue

    # Get certificate name
    certname="$(basename "${certdir}")"

    # Create certitifaces archive directory if not existant
    archivedir="${BASEDIR}/archive/${certname}"
    if [[ ! -e "${archivedir}" ]]; then
      mkdir "${archivedir}"
    fi

    # Loop over file-types (certificates, keys, signing-requests, ...)
    for filetype in cert.csr cert.pem chain.pem fullchain.pem privkey.pem; do
      # Skip if symlink is broken
      [[ -r "${certdir}/${filetype}" ]] || continue

      # Look up current file in use
      current="$(basename "$(readlink "${certdir}/${filetype}")")"

      # Split filetype into name and extension
      filebase="$(echo "${filetype}" | cut -d. -f1)"
      fileext="$(echo "${filetype}" | cut -d. -f2)"

      # Loop over all files of this type
      for file in "${certdir}/${filebase}-"*".${fileext}"; do
        # Handle case where no files match the wildcard
        [[ -f "${file}" ]] || break

        # Check if current file is in use, if unused move to archive directory
        filename="$(basename "${file}")"
        if [[ ! "${filename}" = "${current}" ]]; then
          echo "Moving unused file to archive directory: ${certname}/${filename}"
          mv "${certdir}/${filename}" "${archivedir}/${filename}"
        fi
      done
    done
  done

  exit 0
}

# Usage: --help (-h)
# Description: Show help text
command_help() {
  printf "Usage: %s [-h] [command [argument]] [parameter [argument]] [parameter [argument]] ...\n\n" "${0}"
  printf "Default command: help\n\n"
  echo "Commands:"
  grep -e '^[[:space:]]*# Usage:' -e '^[[:space:]]*# Description:' -e '^command_.*()[[:space:]]*{' "${0}" | while read -r usage; read -r description; read -r command; do
    if [[ ! "${usage}" =~ Usage ]] || [[ ! "${description}" =~ Description ]] || [[ ! "${command}" =~ ^command_ ]]; then
      _exiterr "Error generating help text."
    fi
    printf " %-32s %s\n" "${usage##"# Usage: "}" "${description##"# Description: "}"
  done
  printf -- "\nParameters:\n"
  grep -E -e '^[[:space:]]*# PARAM_Usage:' -e '^[[:space:]]*# PARAM_Description:' "${0}" | while read -r usage; read -r description; do
    if [[ ! "${usage}" =~ Usage ]] || [[ ! "${description}" =~ Description ]]; then
      _exiterr "Error generating help text."
    fi
    printf " %-32s %s\n" "${usage##"# PARAM_Usage: "}" "${description##"# PARAM_Description: "}"
  done
}

# Usage: --env (-e)
# Description: Output configuration variables for use in other scripts
command_env() {
  echo "# dehydrated configuration"
  load_config
  typeset -p CA LICENSE CERTDIR CHALLENGETYPE DOMAINS_D DOMAINS_TXT HOOK HOOK_CHAIN RENEW_DAYS ACCOUNT_KEY ACCOUNT_KEY_JSON KEYSIZE WELLKNOWN PRIVATE_KEY_RENEW OPENSSL_CNF CONTACT_EMAIL LOCKFILE
}

# Main method (parses script arguments and calls command_* methods)
main() {
  COMMAND=""
  set_command() {
    [[ -z "${COMMAND}" ]] || _exiterr "Only one command can be executed at a time. See help (-h) for more information."
    COMMAND="${1}"
  }

  check_parameters() {
    if [[ -z "${1:-}" ]]; then
      echo "The specified command requires additional parameters. See help:" >&2
      echo >&2
      command_help >&2
      exit 1
    elif [[ "${1:0:1}" = "-" ]]; then
      _exiterr "Invalid argument: ${1}"
    fi
  }

  [[ -z "${@}" ]] && eval set -- "--help"

  while (( ${#} )); do
    case "${1}" in
      --help|-h)
        command_help
        exit 0
        ;;

      --env|-e)
        set_command env
        ;;

      --cron|-c)
        set_command sign_domains
        ;;

      --signcsr|-s)
        shift 1
        set_command sign_csr
        check_parameters "${1:-}"
        PARAM_CSR="${1}"
        ;;

      --revoke|-r)
        shift 1
        set_command revoke
        check_parameters "${1:-}"
        PARAM_REVOKECERT="${1}"
        ;;

      --cleanup|-gc)
        set_command cleanup
        ;;

      # PARAM_Usage: --full-chain (-fc)
      # PARAM_Description: Print full chain when using --signcsr
      --full-chain|-fc)
        PARAM_FULL_CHAIN="1"
        ;;

      # PARAM_Usage: --ipv4 (-4)
      # PARAM_Description: Resolve names to IPv4 addresses only
      --ipv4|-4)
        PARAM_IP_VERSION="4"
        ;;

      # PARAM_Usage: --ipv6 (-6)
      # PARAM_Description: Resolve names to IPv6 addresses only
      --ipv6|-6)
        PARAM_IP_VERSION="6"
        ;;

      # PARAM_Usage: --domain (-d) domain.tld
      # PARAM_Description: Use specified domain name(s) instead of domains.txt entry (one certificate!)
      --domain|-d)
        shift 1
        check_parameters "${1:-}"
        if [[ -z "${PARAM_DOMAIN:-}" ]]; then
          PARAM_DOMAIN="${1}"
        else
          PARAM_DOMAIN="${PARAM_DOMAIN} ${1}"
         fi
        ;;

      # PARAM_Usage: --keep-going (-g)
      # PARAM_Description: Keep going after encountering an error while creating/renewing multiple certificates in cron mode
      --keep-going|-g)
        PARAM_KEEP_GOING="yes"
        ;;

      # PARAM_Usage: --force (-x)
      # PARAM_Description: Force renew of certificate even if it is longer valid than value in RENEW_DAYS
      --force|-x)
        PARAM_FORCE="yes"
        ;;

      # PARAM_Usage: --no-lock (-n)
      # PARAM_Description: Don't use lockfile (potentially dangerous!)
      --no-lock|-n)
        PARAM_NO_LOCK="yes"
        ;;

      # PARAM_Usage: --ocsp
      # PARAM_Description: Sets option in CSR indicating OCSP stapling to be mandatory
      --ocsp)
        PARAM_OCSP_MUST_STAPLE="yes"
        ;;

      # PARAM_Usage: --privkey (-p) path/to/key.pem
      # PARAM_Description: Use specified private key instead of account key (useful for revocation)
      --privkey|-p)
        shift 1
        check_parameters "${1:-}"
        PARAM_ACCOUNT_KEY="${1}"
        ;;

      # PARAM_Usage: --config (-f) path/to/config
      # PARAM_Description: Use specified config file
      --config|-f)
        shift 1
        check_parameters "${1:-}"
        CONFIG="${1}"
        ;;

      # PARAM_Usage: --hook (-k) path/to/hook.sh
      # PARAM_Description: Use specified script for hooks
      --hook|-k)
        shift 1
        check_parameters "${1:-}"
        PARAM_HOOK="${1}"
        ;;

      # PARAM_Usage: --out (-o) certs/directory
      # PARAM_Description: Output certificates into the specified directory
      --out|-o)
        shift 1
        check_parameters "${1:-}"
        PARAM_CERTDIR="${1}"
        ;;

      # PARAM_Usage: --challenge (-t) http-01|dns-01
      # PARAM_Description: Which challenge should be used? Currently http-01 and dns-01 are supported
      --challenge|-t)
        shift 1
        check_parameters "${1:-}"
        PARAM_CHALLENGETYPE="${1}"
        ;;

      # PARAM_Usage: --algo (-a) rsa|prime256v1|secp384r1
      # PARAM_Description: Which public key algorithm should be used? Supported: rsa, prime256v1 and secp384r1
      --algo|-a)
        shift 1
        check_parameters "${1:-}"
        PARAM_KEY_ALGO="${1}"
        ;;

      *)
        echo "Unknown parameter detected: ${1}" >&2
        echo >&2
        command_help >&2
        exit 1
        ;;
    esac

    shift 1
  done

  case "${COMMAND}" in
    env) command_env;;
    sign_domains) command_sign_domains;;
    sign_csr) command_sign_csr "${PARAM_CSR}";;
    revoke) command_revoke "${PARAM_REVOKECERT}";;
    cleanup) command_cleanup;;
    *) command_help; exit 1;;
  esac
}

# Determine OS type
OSTYPE="$(uname)"

# Check for missing dependencies
check_dependencies

# Run script
main "${@:-}"
  • chown root:wheel /home/letsencrypt/cts/dehydrated
  • chmod 750 /home/letsencrypt/cts/dehydrated

We now need to create some additional stuff for our Letsencrypt script. Remember to change IP and ourdomain.com to yours!

  • mkdir -p /home/letsencrypt/cts/conf-ip1
  • mkdir -p /usr/home/letsencrypt/cts/www/wellknown/acme-challenge
  • touch /usr/home/letsencrypt/cts/www/wellknown/acme-challenge/index.html
  • ln -s /usr/home/letsencrypt/cts/www/wellknown /usr/local/www/apache24/data/.well-known
  • echo “matrix.ourdomain.com” > /home/letsencrypt/cts/conf-ip1/domains.txt

  • create /home/letsencrypt/cts/conf-ip1/config.sh with the following content:

#!/usr/bin/env /usr/local/bin/bash
# FreeBSD special:
alias openssl='/usr/bin/openssl'
# Path to license agreement (default: https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf)
#LICENSE="https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf"
# Which challenge should be used? Currently http-01 and dns-01 are supported
CHALLENGETYPE="http-01"
#WELLKNOWN="${BASEDIR}/.acme-challenges"
WELLKNOWN="/home/letsencrypt/cts/www/wellknown/acme-challenge"
  • chown root:wheel /home/letsencrypt/cts/conf-ip1/config.sh
  • chmod 750 /home/letsencrypt/cts/conf-ip1/config.sh

  • create /home/letsencrypt/cts/conf-ip1/hook.sh with the following content:

#!/usr/bin/env /usr/local/bin/bash

function deploy_challenge {
    local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}"
}

function clean_challenge {
    local DOMAIN="${1}" TOKEN_FILENAME="${2}" TOKEN_VALUE="${3}"
}

function deploy_cert {
    local DOMAIN="${1}" KEYFILE="${2}" CERTFILE="${3}" FULLCHAINFILE="${4}" CHAINFILE="${5}" TIMESTAMP="${6}"

    ########################################################################
    # CTS-Solutions.AT cron script to create/renew certs v1.0 20160515
    # Professional-Help: http://cts-solutions.at
    # License: GNU General Public License version 3.0 (GPL-3.0)
    ########################################################################
    echo "#######################################################################################"
    echo " Handle updated certs for FreeBSD Servers"
    echo "#######################################################################################"
    echo  "DOMAIN=${1} KEYFILE=${2} CERTFILE=${3} FULLCHAINFILE=${4} CHAINFILE=${5} TIMESTAMP=${6}"
}

function unchanged_cert {
    local DOMAIN="${1}" KEYFILE="${2}" CERTFILE="${3}" FULLCHAINFILE="${4}" CHAINFILE="${5}"
    ########################################################################
    # CTS-Solutions.AT cron script to create/renew certs v1.0 20160515
    # Professional-Help: http://cts-solutions.at
    # License: GNU General Public License version 3.0 (GPL-3.0)
    ########################################################################
    echo "#######################################################################################"
    echo " No Changes for Domain ${1}"
    echo "#######################################################################################"
}

HANDLER=$1; shift; $HANDLER $@
  • chown root:wheel /home/letsencrypt/cts/conf-ip1/hook.sh
  • chmod 750 /home/letsencrypt/cts/conf-ip1/hook.sh

to receive our first cert we should start Apache and Turnserver

  • service turnserver start
  • service apache24 start

  • cd /home/letsencrypt/cts

  • ./Run_Certs.sh

if all goes well you should have placed your certs in

  • /home/letsencrypt/cts/conf-ip1/certs

and

  • /usr/local/etc/matrix-synapse/certs

Add the following to /etc/crontab:

#######################################################################
# Run letsencrypt renewals every thuesday @ 9:01
#######################################################################

5       9       *       *       2       root    /home/letsencrypt/cts/Run_Certs.sh

Now where we have the correct cert, change back

  • #Include etc/apache24/extra/httpd-ssl.conf

to

  • Include etc/apache24/extra/httpd-ssl.conf

in /usr/local/etc/apache24/httpd.conf and

  • service apache24 restart

Point your browser to https://matrix.ourdomain.com and check if you get a secure connection. Logs are in /var/log/www.

We have done most of our way. Lets finalize everything.

Finish Postgresql Setup

su to user pgsql and create synape user and database.su - pgsql

su - pgsql
createdb pgsql
createuser --pwprompt synapse_user
# check with
psql
\l
\du
\?
CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C'  template=template0  OWNER synapse_user;
\l
\q
exit

Finish Matrix Synapse setup

Add a synapse user, so we do not need to run the homeserver as root.

  • adduser synapse
adduser synapse
Username: synapse
Full name: synapse
Uid (Leave empty for default): 
Login group [synapse]: 
Login group is synapse. Invite synapse into other groups? []: 
Login class [default]: 
Shell (sh csh tcsh bash rbash nologin) [sh]: nologin
Home directory [/home/synapse]: 
Home directory permissions (Leave empty for default): 
Use password-based authentication? [yes]: 
Use an empty password? (yes/no) [no]: 
Use a random password? (yes/no) [no]: yes
Lock out the account after creation? [no]: 
Username   : synapse
Password   : <random>
Full Name  : synapse
Uid        : 1002
Class      : 
Groups     : synapse 
Home       : /nonexistent
Home Mode  : 
Shell      : /usr/sbin/nologin
Locked     : no
OK? (yes/no): yes

Now lets create a base config for our homeserver. Again, do not forget to change ourdomain.com to yours!

  • sh
  • . /home/synapse/env/bin/activate
  • cd /usr/local/etc/matrix-synapse
  • python -m synapse.app.homeserver –server-name matrix.ourdomain.com –config-path homeserver.yaml –generate-config –report-stats=no
  • Replace the content of homeserver.yaml with:
tls_certificate_path: "/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/cert.pem"
tls_certificate_path: "/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/fullchain.pem"
tls_private_key_path: "/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/privkey.pem"

# PEM dh parameters for ephemeral keys
tls_dh_params_path: "/usr/local/etc/matrix-synapse/tls.dh"

# Don't bind to the https port
no_tls: False

tls_fingerprints: []

## Server ##
server_name: "matrix.ourdomain.com"
pid_file: /var/run/matrix-synapse/homeserver.pid
# We don't want the web client
web_client: False

public_baseurl: "https://matrix.ourdomain.com:8448/"

soft_file_limit: 0

listeners:
  -
    port: 8448

    bind_addresses:
      - '1.2.3.4'

    type: http

    tls: true
    x_forwarded: false

    resources:
      -
        names:
          - client     # The client-server APIs, both v1 and v2

        compress: true

      - names: [federation]  # Federation APIs
        compress: false

  - port: 8008
    tls: false
    bind_addresses: ['127.0.0.1']
    type: http

    x_forwarded: false

    resources:
      - names: [client]
        compress: true
      - names: [federation]
        compress: false

# Database configuration
database:
  name: "psycopg2"
  args:
    database: "synapse"
    user: "synapse_user"
    password: "yourpassword"
    cp_min: 5
    cp_max: 10

event_cache_size: "10K"

verbose: 0

log_file: "/var/log/matrix-synapse/homeserver.log"
log_config: "/usr/local/etc/matrix-synapse/matrix.ourdomain.com.log.config"

rc_messages_per_second: 0.2
rc_message_burst_count: 10.0
federation_rc_window_size: 1000
federation_rc_sleep_limit: 10
federation_rc_sleep_delay: 500
federation_rc_reject_limit: 50
federation_rc_concurrent: 3

media_store_path: "/var/db/matrix-synapse/media_store"
uploads_path: "/var/db/matrix-synapse/uploads"
max_upload_size: "1M"
max_image_pixels: "32M"
dynamic_thumbnails: false

# List of thumbnail to precalculate when an image is uploaded.
thumbnail_sizes:
- width: 32
  height: 32
  method: crop
- width: 96
  height: 96
  method: crop
- width: 320
  height: 240
  method: scale
- width: 640
  height: 480
  method: scale
- width: 800
  height: 600
  method: scale

url_preview_enabled: False

max_spider_size: "1M"
recaptcha_public_key: "DISABLED"
recaptcha_private_key: "DISABLED"
enable_registration_captcha: False

recaptcha_siteverify_api: "https://www.google.com/recaptcha/api/siteverify"

## Turn ##
## CHANGE AS USED above in turnserver.conf!!!!!!!!!

# The public URIs of the TURN server to give to clients
turn_uris: ["turn:matrix.ourdomain.com:3478?transport=udp", "turn:matrix.ourdomain.com:3478?transport=tcp"]
turn_shared_secret: "1cd6c96c1f8d4f1008042d76d646691e3b0512e830d7f486d6ad6b702bfc234e"
turn_user_lifetime: "1h"
turn_allow_guests: False


## Registration ##
enable_registration: False
registration_shared_secret: "jkdshkdjshdfzv9d87v89df77v897df987v89df7v87df89vu89df7v89df7v7df897vsdfuvhfdjkhvdf89"
bcrypt_rounds: 12
allow_guest_access: False

trusted_third_party_id_servers:
    - matrix.org
    - vector.im


enable_metrics: False
report_stats: False

room_invite_state_types:
    - "m.room.join_rules"
    - "m.room.canonical_alias"
    - "m.room.avatar"
    - "m.room.name"


app_service_config_files: []
macaroon_secret_key: "hfdjkfhdjkshjbncnsuivhsdf8sduv8duv8dfuvufd8uv8fdu89"
expire_access_token: False

## Signing Keys ##

# Path to the signing key to sign messages with
signing_key_path: "/usr/local/etc/matrix-synapse/matrix.ourdomain.com.signing.key"

old_signing_keys: {}
key_refresh_interval: "1d" # 1 Day.

# The trusted servers to download signing keys from.
perspectives:
  servers:
    "matrix.org":
      verify_keys:
        "ed25519:auto":
          key: "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw"

# Enable password for login.
password_config:
   enabled: true
   # Uncomment and change to a secret random string for extra security.
   # DO NOT CHANGE THIS AFTER INITIAL SETUP!
   #pepper: ""

email:
   enable_notifs: false
   smtp_host: "localhost"
   smtp_port: 25
   require_transport_security: False
   notif_from: "Ourdomain MATRIX <noreply@ourdomain.com>"
   app_name: Matrix
   template_dir:  res/templates
   riot_base_url: "https://matrix.ourdomain.com/riot"


#server_notices:
#   system_mxid_localpart: serveralarm
#   system_mxid_display_name: "Server Infos and Alerts"
#   system_mxid_avatar_url: "https://matrix.ourdomain.com/_matrix/media/v1/thumbnail/matrix.ourdomain.com/fcpNAbnjbfjjHIegqEMoPFew"
#   room_name: "Server Infos and Alerts"

  • mkdir -p /var/run/matrix-synapse
  • chown synapse /var/run/matrix-synapse
  • mkdir -p /var/log/matrix-synapse/
  • chown synapse /var/log/matrix-synapse/
  • change log file in matrix.ourdomain.com.log.config to filename: /var/log/matrix-synapse/homeserver.log
  • mkdir -p /var/db/matrix-synapse/media_store
  • mkdir -p /var/db/matrix-synapse/uploads
  • chown -R synapse:synapse /var/db/matrix-synapse

  • create tls.h file in /usr/local/etc/matrix-synapse

  • cd /usr/local/etc/matrix-synapse/

  • openssl dhparam -out tls.dh 2048

Finally we need a startup script for Matrix Synapse. Lets create /usr/local/etc/rc.d/synapse:

#!/bin/sh
#
# Created by: Karl M. Joch <k.joch@cts.at>
#

# PROVIDE: synapse
# REQUIRE: LOGIN postgresql
# KEYWORD: shutdown

# synapse_enable="YES"

. /etc/rc.subr

#----------------------
# we run in virtual env
#----------------------
VIRTUAL_ENV="/home/synapse/env"
export VIRTUAL_ENV
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
# to check run here: env

name=synapse

rcvar=synapse_enable
load_rc_config ${name}

: ${synapse_enable:=NO}
: ${synapse_user:=synapse}
: ${synapse_conf:=/usr/local/etc/matrix-synapse/homeserver.yaml}
: ${synapse_dbdir:=/var/db/matrix-synapse}
: ${synapse_logdir:=/var/log/matrix-synapse}
: ${synapse_pidfile:=/var/run/matrix-synapse/homeserver.pid}

pidfile="${synapse_pidfile}"
procname=/usr/home/synapse/env/bin/python3.6
command=/usr/home/synapse/env/bin/python3.6
command_args="-m synapse.app.homeserver --daemonize -c ${synapse_conf}"
start_precmd=start_precmd

start_precmd()
{
        if [ ! -d ${synapse_pidfile%/*} ] ; then
                install -d -o synapse -g wheel ${synapse_pidfile%/*};
        fi

        if [ ! -d ${synapse_dbdir} ] ; then
                install -d -o synapse -g wheel ${synapse_dbdir};
        fi

        if [ ! -d ${synapse_logdir} ] ; then
                install -d -o synapse -g wheel ${synapse_logdir};
        fi

        if $(grep -q CHANGEME ${synapse_conf}) ; then
                echo "Error: Default secret values in config."
                echo "Please replace the CHANGEME values in ${synapse_conf}"
                exit 1
        fi
}

run_rc_command "$1"
  • chown root:wheel /usr/local/etc/rc.d/synapse
  • chmod 750 /usr/local/etc/rc.d/synapse

Start Matrix Synapse the first time

  • service synapse start

will hopefully end in something like this:

2019-05-11 18:02:13,846 - synapse.server - 222 - INFO - None - Setting up.
2019-05-11 18:02:13,884 - synapse.storage.event_push_actions - 471 - INFO - None - Searching for stream ordering 1 month ago
2019-05-11 18:02:13,885 - synapse.storage.event_push_actions - 477 - INFO - None - Found stream ordering 1 month ago: it's 0
2019-05-11 18:02:13,885 - synapse.storage.event_push_actions - 479 - INFO - None - Searching for stream ordering 1 day ago
2019-05-11 18:02:13,885 - synapse.storage.event_push_actions - 485 - INFO - None - Found stream ordering
2019-05-11 18:02:13,887 - synapse.server - 226 - INFO - None - Finished setting up.

You can check the running synapse with ps -xaj and netstat -an should show you listeners on 8008 and 8448. If yes, you can open the first beer. Your log is in /var/log/matrix-synapse.

Adding the admin user

Again, change ourdomain.com to your domain!!!!!

  • sh
  • . /home/synapse/env/bin/activate
  • cd /usr/local/etc/matrix-synapse
  • register_new_matrix_user -c homeserver.yaml https://matrix.ourdomain.com:8448
  • make this user the admin for you!

  • reboot your server, to restart everything

  • shutdown -r now

  • download the https://riot.im messenger for your platform and login

  • test everything

if everything works as expected:

  • create all other users the same way, but without being admin!

UPDATING

Updating FreeBSD and Packages

  • freebsd-update fetch
  • freebsd-update install
  • pkg update
  • pkg upgrade

Updating Matrix Synapse

  • service synapse stop
  • sh
  • . /home/synapse/env/bin/activate
  • pip install -U matrix-synapse[all]
  • service synapse start
  • if massive update, simply reboot the server

Join my public room

If you like this blog entry feel free to join my public room by entering

/join #kmj:matrix.ctseuro.com

anywhere in the box to send a message! Feedback welcome!

Enterprise Support

Am Android Tablet oder Telefon mit LineageOS für Privatsphäre sorgen. (Teil 3)

LineageOS, ein alternatives Android Betriebssystem für Tablet und Telefon!

LineageOS ist ein Betriebssystem für Smartphones und Tabletcomputer. Es ist eine Modifizierung des von Google entwickelten freien Betriebssystems Android und der Nachfolger des eingestellten Custom-ROMs CyanogenMod. LineageOS ist Freie Software und wird von einer Gemeinschaft Freiwilliger entwickelt, die das Betriebssystem gratis zum Herunterladen bereitstellen. Mehr Infos auf der Wikipedia Seite (https://de.wikipedia.org/wiki/LineageOS)

Vorraussetzung ist ein Geräte welches offiziell unterstützt wird (https://wiki.lineageos.org/devices/) oder ein Custom Rom, z.B. von https://forum.xda-developers.com/ existiert.

WICHTIG: Mit diesem Vorgang verlieren Sie Ihre Garantie, können Ihr Gerät zerstören und niemand wird Ihnen helfen. Ich beschreibe hier den Vorgang meiner Umstellung und ermutige Sie in keinem Fall den Vorgang an Ihrem Gerät durchzuführen. Wenn Sie es machen, dann sind Sie auf sich alleine gestellt und für den Fall dass Sie das Gerät zerstören sind einzig und alleine Sie selbst verantwortlich. Niemand und schon gar nicht ich, hafte für Dinge die Sie mit Ihrem Gerät tun!

Teil 3

Basierend auf dem ersten Tests von LineageOS auf einem Samsung SM-T585 Tablet (https://kmj.at/2018-09-12-android-lineageos-samsung-sm-t585-privacy/), sowie dem Teil 2 der Serie (https://kmj.at/2018-10-01-android-lineageos-privacy-teil2/) wurden nun die ersten Releasewechsel durchgeführt.

Kurzinfo, da vermutlich für wenige User interessant: Da ich kein Windows verwende, kam Odin nicht in Frage und es wurde auf die Heimdall Flash Software zurückgegriffen. Diese war bereits zum Flashen vom TWRP am Linux Notebook installiert. Zusätzlich wurde nun noch das Heimdall-Frontend Package installiert, welches Heimdall ROMs erzeugen kann. Danach von z.B. sammobile.com das Android 8 Stock ROM laden und in einem Verzeichnis extrahieren. Über das Heimdall-Frontend alle Dateien zuweisen und dann ein Heimdall-ROM erzeugen. Wenn alles erledigt ist, geht das Flashen ziemlich einfach. Handy in den Download Mode booten, das ROM laden und mit Start flashen. Danach das TWRP neu flashen, in den Recovery Mode booten und der Anweisung aus dem LineageOS.org Wiki zur Installation auf diesem, voll supporteten Gerät, folgen.

Es standen 2 Geräte, beides A520F (Samsung Galaxy A5 2017), zum Update an. Eines der Geräte hatte bereits die Oreo Firmware (Bootloader und Modem) mit LineageOS 15.1 und ein Gerät hatte die Nougat Firmware und LineageOS 14.1.

Als erstes wurde die Oreo Version upgedated.

Der Anleitung exakt folgend:

How to install

  1. Make sure you had Samsung’s Oreo firmware bootloader and modem before installing this
  2. Make sure you are using the latest official TWRP version.
  3. Download the lineage build and google apps
  4. Copy them to the phone (SD KARTE!!!!)
  5. In TWRP wipe dalvik/cache/system/data
  6. Flash LineageOS
  7. Flash Gapps (OPTIONAL Ich verwende keine Google Apps!)
  8. Optional: Flash root package
  9. Reboot

Danach booted das System mit LineageOS 16.0. Land und Uhrzeit, sowie WLAN einstellen und dann das Titanium apk installieren. Benutzer Apps und Daten wiederherstellen, Icons platzieren und bei Apps, bei denen die Anmeldedaten nicht wiederhergestellt werden, z.B. DavDroid, Owncloud, die Anmeldedaten eingeben und die Synchronisierung aktivieren.

Das war wirklich einfach und das erste Handy läuft mit dem auf Android 9 basierenden LineageOS 16. Am besten noch alle Einstellungen einmal durchsehen, damit neues richtig eingestellt wird und sich dann in intelligenter, selbstbestimmter Weise von der Masse abzuheben.

Update 14.1 (Nougat) auf 16.0 (Pie)

Beim 2. A520F war die Nougat Firmware installiert und es musste zuerst die Oreo Firmware von Sammobile geladen werden. Hier ist zu beachten, dass es für offene Telefone die Version Open-Austria gibt, die nicht in der Austria Liste mit den Provider Versionen enthalten ist. Das ist die Version, welche für freie Handies notwendig ist. Vorher sollte https://forum.xda-developers.com/samsung-a-series-2017/how-to/ref-modems-bootloaders-collection-t3799551 gelesen werden. Bootloader und Modem Updates sollten immer aktuell gehalten werden.

Auch hier wurde mit folgendem begonnen:

Ich folgte der Anleitung:

Instructions:

  1. Switch off the phone
  2. Use Home+Volume Down+Power to enter Download Mode and connect the device to usb
  3. Open Odin and untick autoreboot in “options” tab. Also make sure that your device is detected
  4. Put BL_*.tar.md5 file into BL tab
  5. Put CP_*.tar.md5 file into CP tab
  6. Click Start
  7. Wait 1 min and manually reboot your phone into Download mode using Home+Volume Down+Power buttons, but when the warning appears, hit volume down (Cancel-restart the device)
  8. Use Phone INFO app to check if update was succesful.
  9. If it didn`t worked, redo the steps from #1 more careful this time.

Da ich kein Odin sondern Heimdall verwende, wurden die BL und CP Zips extrahiert und die 4 beinhalteten Dateien, nach einem unlz4 (Paket lz4 für Debian) mit Heimdall geflasht. Wichtig ist es das Log zu legen, dass der Flash erfolgreich war. Sonst System und Handy so oft rebooten und neu flashen, bis alles sauber erledigt wurde.

Danach erfolgt das Update exakt wie oben angeführt:

How to install

  1. Make sure you had Samsung’s Oreo firmware bootloader and modem before installing this
  2. Make sure you are using the latest official TWRP version.
  3. Download the lineage build and google apps
  4. Copy them to the phone (SD KARTE!!!!)
  5. In TWRP wipe dalvik/cache/system/data
  6. Flash LineageOS
  7. Flash Gapps (OPTIONAL Ich verwende keine Google Apps!)
  8. Optional: Flash root package
  9. Reboot

Danach booted das System mit Android 16.0. Land und Uhrzeit, sowie WLAN einstellen und dann das Titanium apk installieren. Benutzer Apps und Daten wiederherstellen, Icons platzieren und bei Apps, bei denen die Anmeldedaten nicht wiederhergestellt werden, z.B. DavDroid, Owncloud, die Anmeldedaten eingeben und die Synchronisierung aktivieren.

Nun sind beide A520F mit der Version LineageOS 16.0 eingerichtet und können noch lange gute und die Privatsphäre schützende Dienste verrichten. Wirklich cool, sichere Systeme für kleines Geld zu betreiben, auf denen nicht ein Fremder Administrator ist.

Als nächstes werden die beiden Samsung SM-T585 Tablets upgedated.

Für mich ist es eine ziemlich perfekte Lösung, da die Privatsphäre nun wieder gesichert ist und alle Funktionen einwandfrei funktionieren. In dieser Form ist Android auch für Firmen mit smarten Mitarbeitern verwendbar.

TSSOP - Distributed Social Network and Micro Blogging Project (Open Source, FOSS, Alpha Prototype Update, Video)

All TSSOP posts are always found under

or on Tor Onion Net:

Alpha Prototype build for Linux, Raspberry (arm) and Android!

We are so proud, now TSSOP has a base to start off! See our video on this page. We was able to include Tor within the Go language binary and build an alpha prototype to show that it is possible to finalize TSSOP! See below!

The Idea (Version 0.3.0)

Slowly also the slowest ones understands the danger of huge companies collecting as much data as possible about humans using the net. The train already left in direction of more privacy, sharing data only with selected people, avoiding data miners and companies making 97% of their money out of knowing as much as possible about users. As usual the smart ones are first and already moving to Riot Messenger, Mastodon Micro Blogging, self hosted clouds with e.g. OwnCloud/NextCloud and much more. I don’t mention E-Mail servers because I assume all smart ones runs their self hosted server. It is more than stupid to let foreigners read, analyze or sell your valuable data. Tor is used as browser by more and more people to protect their privacy and avoid tracking.

I was really surprised to see the train already is kinda fast and even smart governments moving on to privacy protecting, encrypted, secure, decentralized Open Source solutions. The french government moves from a proprietary – let foreigners and people you don’t know read and analyze all – solution to Matrix: https://matrix.org/blog/2018/04/26/matrix-and-riot-confirmed-as-the-basis-for-frances-secure-instant-messenger-app/ . I am very sure there are more governments and organizations in urgent need for a change out there.

Community is missing a tool to replace their social network without the hassles of setting up servers, or registering at some other service. Meanwhile even mobile devices are strong enough to handle serving the users profile, blog and messages via the Tor network.

 

 

The idea is to make it very easy for non-techie users. Download and start the Software, enter your “Display Name” and you are on. Tor hidden service onion address and everything else must be created fully auto without user intervention. Non-techies have no idea of certificates and other stuff, they will leave in minutes if they don’t understand what to do.

Connection to others using QR codes or typing the onion address and the connection is established.

Non-techies only need to know that all of their content is hold encrypted on their device, no commercial provider is involved to store all of their sensitive data. Furthermore all communication is encrypted and information is shared peer-to-peer only between the devices communicating. Using the Tor network even their IP address is hidden to the devices they are communicating with.

Privacy as needed by people even they don’t understand the tech details.

Short Intro:

  • distributed Social Network without the need of servers, using Tor Hidden Services
  • maximum privacy because p2p connection between devices, no central server
  • visitors connects to .onion address of the device to remain as much privacy as possible
  • every user keeps his data local. Everything is encrypted with the users passphrase.
  • multi device sync and auto fail over. One device is master, others are backup. Content is synced over all devices via Tor.

Feature Ideas

  • profile with permission system who can see which parts of it
  • blog with permission system who can see which parts of it
  • friends with permission system. Allow friendship, subscription or both
  • 1:1 end-to-end encrypted Messaging
  • configurable timeline to select other blogs, profiles and their appearance
  • auto delete of older blog posts and messages. Configurable setting of purge time.

Tech

  • all communication is encrypted using the Tor network
  • messaging is furthermore end-to-end encrypted
  • local storage on device is encrypted with user passphrase
  • .onion addresses are auto generated on setup of first device
  • additional devices syncs against the primary device.
  • in case of failure of this device a backup device takes over without user intervention. If device comes up again, primary makes itself primary again.

Requirements for Decentralization/Fediverse to grow (20180528)

We definitely need a single static binary, letting non-techies run instances of TSSOP. Access and synchronisation via TOR should be included within this binary so users have to install only one file!

  • why one binary: non-techies are not in the position to setup servers. They will always overload public servers and avoid installing an own instance/server. With a single binary they can run it on their PC or mobile device without any hassles. I assume Go or Rust would be the language to use. With Go it should be possible to develop one Software for Linux, Mac, Windows, Android and IOS.

  • why Tor: Tor is able to offer hidden services, so even a mobile phone can serve public services using the youraddy.oonion address. This is not working with IP only. Tor itself is encrypted and anonymizing the users real IP. Adding self signed certs on top of it would add another layer of security.

I am 100% sure, this one binary solution is the only way we can get the masses on our new social network. A side effect is, that the network scales kinda easy without any problems.

Alpha Prototype done (20190326)!

We are so proud, now TSSOP has a base to start off! See our video on this page. We was able to include Tor within the Go language binary and build an alpha prototype to show that it is possible to finalize TSSOP! Watch the video till the end! :-)

Now, where it is clear, that TSSOP project has a huge chance, we will work hard to get financing and team building done!

And yes, will record a better video. :-)

Availablity

  • Desktop versions for Linux, Mac and Windows
  • Apps for Android, IOS, PureOS (hoping Librem5 will make it to the market)

Scalable

  • normal user only have a few visitors and a mobile device +LTE should be able to handle the traffic
  • users with high traffic requirements should run the desktop version as primary device to handle their traffic. There should be a way to fix this device as primary to not fail over to some mobile device.
  • as soon as 5G enters the market there will be no normal users exceeding their available bandwidth.

FOSS – Free Open Source Software

I really believe in Open Source Software projects and TSSOP should be Open Source too. If there is some useful code, we will publish it.

Next steps

  • finalizing the idea
  • team building to get the right people together. Software development, security, interface design and much more is to do.

Team Building

Team building to get the right people together. Software development, security, interface design and much more is to do. Actually we have problems to get people together.

PLEASE SPREAD THE WORD – TSSOP URGENTLY NEEDS COOL PEOPLE TO START ASAP

Actually I decided to setup a community and different rooms inside the Riot.IM Matrix to have all communication in one place. CTS GMBH has donated us space inside their matrix.ctseuro.com server. Riot works great on all devces and is fully free and Open Source. Check it out at Riot.IM and register a free account there if you are not on Riot till now.

I am looking to meet developers, experienced with Tor, Encryption, Go, Rust, Linux, Mac OSX, Windows and mobile devices. For sure all people with interest in helping things getting started are very welcome!

Love to hear from you on Riot.IM. Looking forward to discuss the idea!

Available via Riot.IM as @karl:matrix.ctseuro.com or via Mastodon as https://mastodon.ctseuro.com/@kmj.

Team Status:

  • Karl (Austria) - over 30 years IT experience @karl:matrix.ctseuro.com
  • Markus (Germany) - over 15 years IT experience @markus:matrix.ctseuro.com

Stage:

  • Idea / Planing
  • very detailed idea to change the world of social media!
  • Alpha prototype to show the possibility done. See video on this page!

Statusupdates

  • 20180316 added Github github.com/tssop/
  • 20180528 added ideas about Go and Single Binary for non-techies, changed some text to explain the project more in deep
  • 20190326 WE FOUND THE SOLUTION! See our video on this page. We was able to include Tor within the Go language binary and build an alpha prototype to show that it is possible to finalize TSSOP!
  • 20190326 we are thinking about combining https://EUShop.net and TSSOP to one project. Early stage of an idea!

Mehr Privatsphäre und Sicherheit mit kostenlosen Firefox Add-Ons! (Updated)

Heute ein kurzer Blog Eintrag für mehr Privatsphäre und Sicherheit beim Browsen

Ich hatte in einem früheren Blog Eintrag folgende, auch für Anfänger geeignete, Plugins für den Firefox Browser bereits vorgestellt:

Die obige Liste ist in Zeiten wie diesen ein muss für jeden Besucher des Internet. Nun stelle ich noch ein paar Plugins, welche unbedingt verwendet werden sollten, vor.

Decentraleyes

https://addons.mozilla.org/de/firefox/addon/decentraleyes/

Aus der Plugin Beschreibung:

Schützt vor Tracking durch “gratis”, zentralisiertes, Abliefern von Content. Es sorgt dafür, dass Anfragen Netzwerke wie “Google Hosted Libraries” nicht erreichen, aber imitiert sie, sodass die Seiten intakt bleiben. Ergänzt reguläre Contentsperren.

  • Unterstützte Netzwerke: Google Hosted Libraries, Microsoft Ajax CDN, CDNJS (Cloudflare), jQuery CDN (MaxCDN), jsDelivr (MaxCDN), Yandex CDN, Baidu CDN, Sina Public Resources, und UpYun Libraries.

  • Gebündelte Ressourcen: AngularJS, Backbone.js, Dojo, Ember.js, Ext Core, jQuery, jQuery UI, Modernizr, MooTools, Prototype, Scriptaculous, SWFObject, Underscore.js, und Web Font Loader.

Dieses Add-on vermeidet Anfragen an Dritte, indem es Bibliotheken lokal bereitstellt um deine Privatsphäre zu schützen.

Smart Referer

https://addons.mozilla.org/de/firefox/addon/smart-referer/

Dieses Plugin ist wirklich cool und hindert Datensammler aufzuzeichnen, woher die User kommen. Der Referer wird nur innerhalb der besuchten Seite gesendet. Bei Sprung auf eine andere Domain, wird der Referer gelöscht und für den Betreiber sieht es dann so aus, als ob Sie die Domain direkt im Browser eingegeben hätten. Auch beim Sprung von Suchmaschinen wird der Referer gelöscht.

Neat URL

https://addons.mozilla.org/de/firefox/addon/neat-url/

Dieses Plugin löscht die für Datensammler so wichtigen Parameter aus Urls heraus und verhindert damit zusätzliches Tracking der Internetaufrufe.

Beispiel:

Vorher

http://www.domain.tld/scan.php?page=news_item&px=Ioquake3-Auto-Updater&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Phoronix+(Phoronix)

Nachher:

http://www.domain.tld /scan.php?page=news_item&px=Ioquake3-Auto-Updater

Update für professionelle Anwender

Für IT Semi-Pros und Pros empfiehlt sich als Ersatz für NoScript und Smart Referer das Add-On uMatrix:

https://addons.mozilla.org/en-US/firefox/addon/umatrix/

Dieses extrem gute Add-On vom Entwickler des uBlock Plugins bietet extrem viele Einstellmöglichkeiten und Rulesets. Dieses Add-On ist definitiv nichts für User ohne dementsprechendes Wissen über Netzwerk, Computer und die Details eines Webseitenaufrufs. Für die Zielgruppe mit dem dementsprechenden Wissen über die Vorgänge im Hintergrund, ist dieses Add-On extrem empfehlenswert um die Privatsphäre zu schützen und sich zusätzlich vor Drive-By JavaScript angriffen gut abzusichern. Das eigene Profil kann man in einem Regelwerk auch speichern und exportieren. Damit ist das Profil auf jedem System, ohne Neueinstellung aus der Datei direkt zu laden. Da alle Semi-Pros und Pros mit mehreren Systemen arbeiten, eine perfekte Lösung, ohne immer wieder alle Einstellungen neu setzen zu müssen.

Hinweise

Alle Plugins sind über die Firefox Plugin Verwaltung direkt zu installieren.

Update 2019-03-23

Wie smarte Menschen das Internet, Computer, Handies und Software nutzen!

Eine Zusammenfassung

Ich wurde vielfach um eine Zusammenfassung der Schritte zu einem intelligenten, sicheren Leben im Internet mit maximaler Privatsphäre gebeten. Da mit klar ist, dass für Endanwender diese Schritte einen durchaus beachtlichen Lernaufwand erfordern gibt es hier eine Zusammenfassung der notwendigen Schritte für Endanwender. Dieser Blog Beitrag wird von Anfängern öfter gelesen werden müssen. Sie sollten die Schritte Step-by-Step durchführen. Alles auf einmal wäre wie Führerschein machen, Auto kaufen und erste Fernreise in einem Tag schaffen zu wollen.

Gehen Sie einfach davon aus, dass wenn Sie ein Auto lenken möchten, Sie zuerst den Führerschein machen müssen und danach das Lesen des Handbuches des Fahrzeuges, bzw. eine professionelle Einschulung notwendig ist. Andernfalls gefährden Sie andere, das Eigentum anderer und natürlich auch sich selbst, bzw. Ihr Eigentum. Primär zählt immer der Schaden den Sie anderen zufügen weit höher, als Schaden, den Sie selbst erleiden. Wenn Sie jemanden von einer Brücke stoßen oder zum Beispiel das Auto einer anderen Person zerstören, ist das kriminell und Sie werden sich mit Haftstrafe oder Zahlung dafür verantworten müssen. Wenn Sie selbst springen, bzw. Ihr Auto kaputt machen, ist es für Ihr Umfeld traurig, bzw. im Fall des Autos, einfach nur Ihr Problem.

Es gilt immer – UNWISSENHEIT SCHÜTZT VOR STRAFE NICHT - auch wenn einige glauben, dass – ich bin gehackt worden – eine Ausrede ist. 90% der Vorfälle sind keine Hacks, sondern Benutzer die irgendwo drauf klicken, bzw. wischen. Nur 10% sind Angriffe von außen, durch Zugriff auf den PC über das Netzwerk. D.h. 90% haben meist durch Unwissenheit, oder Selbstüberschätzung das Problem selbst ausgelöst. Das Internet ist, wie das richtige Leben auch, kein Ponyhof. Sie geben Ihre Geldbörse im richtigen Leben ja auch keinem Fremden und glauben, dieser wird darauf aufpassen?

Bei Computern ist es so, dass es den Fall, wo Sie sich nur selbst schaden, so gut wie nicht gibt! Trojaner senden Chat Protokolle, Bilder und Texte an Dritte, versenden E-Mails und vieles mehr. Dadurch schaden Sie immer auch Dritten, sei es durch Bilder, die nicht für die Öffentlichkeit bestimmt waren und durch Ihren Fehler an Unbekannte verteilt werden, durch die Veröffentlichung von Dokumenten und Protokollen. Sehr unangenehm für Serverbetreiber sind auch der Versand von 100.000enden Mails und anderem mehr, ausgelöst durch Ihren Computer.

Computersysteme, Handies und andere Gerätschaften sind mittlerweile weit komplexer als Autofahren und auch wenn die Hersteller versuchen die Anwendung einfach zu halten, sollten Sie verstehen was Sie tun. Insbesondere die meisten kostenlosen Dienste, bei denen Sie natürlich mit Ihren Daten viel mehr bezahlen, als der Dienst in Euros monatlich wert wäre, versuchen für Laien ohne Computerwissen die Einstiegshürde ganz nieder zu legen. Die so gesammelten Daten der im Computerbereich ungebildeten Masse ist das Gold der Zukunft für diese Datenssammler.

Nur weil Sie glauben zu wissen, wo Sie klicken, oder wischen, verstehen Sie noch nicht den Ablauf im Hintergrund. Lesen und lernen Sie, dann werden auch Sie aus der Masse ausbrechen und Dinge sinnvoll, bei gleichzeitigem Schutz der Privatsphäre, nutzen können.

Als Grundregel gilt, wenn Sie einem Spezialisten nicht erklären können, was durch den Klick, oder Wisch, ausgelöst wird, wissen Sie nicht wirklich, was Sie tun und sollten massive Vorsicht walten lassen.

Und hier sind wirkliche Spezialisten gemeint!

Generelle Regeln für das Leben im Netz

  • Denken Sie nach, bevor Sie klicken! Niemand schickt ihnen 1,000.000 $, braucht Ihre Hilfe bei einer Transaktion und wenn Sie eine Rechnung von jemandem erhalten, mit dem Sie nicht arbeiten, löschen Sie die Mails einfach.
  • Sind Sie nicht neugierig! Neugier und Gier haben, nicht nur bei Computern, schon viele riesige Probleme ausgelöst. Kein Mädel das Sie nicht kennen schickt ihnen ein Nacktbild, oder will mit ihnen ins Bett, weil Sie so gut und scharf sind.
  • Verfallen Sie nicht in Panik, wenn Sie wo drauf klicken und ein Fenster mit einer Frage aufgeht! Klicken Sie das Fenster nicht weg. Wenn Sie etwas nicht verstehen, dann gestehen Sie sich das ein und fragen einen Experten und damit sind nicht Wischerkönige gemeint, sondern Menschen welche die Hintergründe verstehen! In Firmennetzen kontaktieren Sie sofort Ihren Administrator oder Helpdesk! Nur wenn das Fenster noch am Bildschirm steht, kann der Experte das beurteilen. Mit – Da war etwas, ich habe es weg geklickt und weiß nicht mehr was da stand – schießen Sie sich selbst ins Aus und Ihre Anwesenheit bei der nächsten Weihnachtsfeier ist um ein paar Punkte unwahrscheinlicher. Insbesondere Trojaner, Crypto Malware und anderes zieht meist erst, nachdem Sie in der Box auf Ja, oder OK geklickt haben. Wie oben geschrieben, Gehirn einschalten, lesen, gegebenfalls fragen und dann entscheiden.
  • Reduzieren Sie alle Möglichkeiten, das sie von Ihren eigenen Geräten (TV, Sprachsteuerungen, Mobiltelefonen, Tablets, Computer, IoT Systeme, etc.) gefilmt, oder abgehört werden auf ein Minimum. Kaufen Sie nur Geräte die Daten nicht an Dritte senden und bei denen die gesamte Kommunikation in Ihrem Bereich bleibt. Leider gibt es viele Menschen, die sich freiwillig Wanzen in der Form von Sprachsteuerungen ins Haus stellen. Zusätzlich sind alle Produkte bei denen Sie sich zum Server des Herstellers zur Steuerung verbinden so aufgebaut, dass dieser alle Daten sammeln, bzw. aufzeichnen kann. Und sogar, wenn dieser seriös ist, was passiert, wenn der Server schlecht gesichert ist und Dritte Zugriff zu den Daten, oder den Steuerungen bekommen. Auch hier gilt, fragen Sie Spezialisten, keine selbsternannten Experten ohne Wissen.
  • Versuchen Sie jede Weitergabe von Daten an Dritte zu verhindern. Insbesondere GPS Positionsdaten, Surfverhalten, u.v.m. Ich behaupte, jeder hat etwas zu verbergen! Und sollten Sie die Ausnahme sein, dann müssen andere trotzdem nicht Ihr ganzes Leben kennen und die Daten frei Haus geliefert bekommen. Es besteht immer das Risiko, dass die Daten in die Hände von Kriminellen kommen.
  • Vermeiden Sie Cloud Speicherungen und sonstiges abspeichern auf fremden Computern im Internet. Cloud ist nichts anderes, als ein Rechner bei dem jemand anderer als Sie das Administrator-Passwort hat. Auf diesen Rechnern können fremde Menschen, die Sie nicht kennen, Ihre Mails, Ihre Kommunikation und Ihre Dokumente lesen und Sie wissen noch nicht einmal, wenn Dritte durch einen Hack Zugriff erhalten! Der Equifax Hack in den USA gefährdet die Lebensumstände von Millionen US Bürgern! Ähnliche Szenarien sind viele denkbar.
  • Generell gilt die Regel, dass Ihre Daten in Ihrem Haus gespeichert sein sollen und nie auf Rechnern von Dritten.

Generelle Regeln unabhängig vom Betriebssystem

  • Verwenden Sie mindesten 10-stellige, komplexe, Passwörter.
  • Arbeiten Sie nie mit dem Administrator Account. Egal welches Betriebssystem sie verwenden, verwenden Sie den Administrator nie zum Arbeiten. Dieser hat Zugriff auf das gesamte System und Schadsoftware kann das gesamtre System zerstören! Lesen Sie einen Benutzer für sich an, der nicht in der Administratorengruppe ist. Damit reduzieren Sie den Schaden zumeist auf diesen Benutzer! -Sollten mehrere Personen mit einem Gerät arbeiten müssen Sie für jeden einen eigenen Benutzer, der nicht Administrator ist, anlegen. Damit kann ihr Kind im Normalfall nicht ihre Dokumente vernichten.
  • Der Administratoraccount darf nur zur Systemeinrichtung und zur Softwareinstallation verwendet werden. Dieser Account darf nie ins Internet. Wenn Sie eine Software downloaden, laden Sie diese als Benutzer, prüfen diese als Benutzer auf Viren und danach melden sie sich zur Installation als Administrator an. Am besten richten Sie einen Download- und Prüf-Benutzer ein, damit im Fall der Fälle nur dieser betroffen ist.
  • Wenn Sie Netzwerk Datenträger verwenden, z.B. ein sogenanntes NAS, erstellen Sie jede Freigabe mit eingeschränkten Benutzerrechten. D.h. auf das Netzwerklaufwerk Franz, darf nur der Benutzer Franz zugreifen, auf das Netzwerklaufwerk Rosi, nur der Benutzer Rosi. Wenn Franz und Rosi Daten austauschen richten Sie ein weiteres Laufwerk FranzundRosi ein und schränken den Zugriff auf diese beiden Benutzer ein. NIE sollten Sie Laufwerke für alle, vielleicht auch noch ohne Passwort freigeben!
  • Bewahren Sie immer mehrere Generationen von Datensicherungen auf. Ganz wichtig, diese Datensicherungen müssen Offline (abgesteckte USB Platte, USB Stick, etc.) sein! Denn nicht nur Malware, sondern auch Blitzschlag, Überspannung, etc. vernichtet Elektronik. Wenn Sie alle Datenträger angesteckt haben, dann kann ein Blitzschlag zum Totalverlust führen. Wechseln und Abstecken ist Ihnen zu viel Aufwand? Kein Problem, es sind Ihre Daten! Aber dann bitte auch nicht jammern, sollte alles weg sein. Wenn die vernünftige Vorgangsweise zu viel Aufwand ist, dann werden die Daten nichts wert sein und man kann den Blitzschlag als Entsorgung von Lebensmüll betrachten. Lächeln und sich über die leere Festplatte freuen ist angesagt.
  • Verwenden Sie freie Software wie z.B. CloneZilla zum duplizieren von Festplatten. Damit können Sie, sollte Ihre Festplatte wegsterben, das System wieder in Betrieb setzen. Zwischenzeitlich veränderte Daten sichern Sie zurück und alles ist wieder gut.
  • Zumindest eine Version der Datensicherung sollte regelmäßig außer Haus aufbewahrt werden. Nur so haben Sie, im Falle eines Einbruches, bzw. Brandes noch einen Datenträger mit all Ihren wichtigen Daten!
  • Richten Sie auf jedem Gerät eine Firewall ein um es vor Netzwerkangriffen zu schützen.
  • Die Verwendung von Virenscannern wird sehr differenziert betrachtet. Bei Windows sollte der mitgelieferte Scanner aktiviert werden, bei anderen Systemen sollte die Verwendung gut überdacht werden.

Tor Browser und das .onion Net

  • Verwenden Sie für sensible Webseiten und Suchvorgänge immer den Tor Browser (https://torproject.org). Damit surfen Sie komplett anonym im Netz und Ihre IP Adresse wird verschleiert. Ignorieren Sie Aussage, wie Darknet, illegal, oder ähnliches. Tor ist ein legales Anonymisierungsnetzwerk. Illegal ist, wie im normalen Leben auch, wenn Sie Dinge außerhalb des Gesetzes machen. Dann werden Sie sich, wenn Sie erwischt werden, verantworten müssen. Tor ist ein unbedingt zu empfehlendes Hilfsmittel, insbesondere, wenn Sie kritische Themen, wie zum Beispiel Krankheiten, im Internet nachlesen.

Zusätzlich kann man im Tor Netz, genau wie im Internet auch, Webserver betreiben. Diese erhalten dann, analog zu z.B. .com, eine .onion Endung und sind nur mit dem Tor Browser besuchbar. Diese Webseite finden Sie auch im Tor Netz unter der Adresse:

Auch große Anbieter, wie z.B. Facebook, betreiben eine .onion Adresse.

Besuchen Sie mich im Tor Netz!

Linux, LineageOS und Open Source Softwareinstallation

Vermutlich könnten über 70% der Anwender ohne Probleme auf das kostenlose Linux umsteigen und die großen Vorteile von Open Source Software nutzen. Eine Standard-Installation von Debian Linux mit der Oberfläche KDE und dem kompatiblen und freien Office Paket LibreOffice deckt alleine schon die Masse der Arbeitsplätze ab.

Details zu Arbeitsplätzen, Servern und Software

Infos für viele Handies und Tablets finden Sie viele Infos hier

Absicherung des Browsers mit Firefox Plugins:

Revolution bei Micro Blogging (Twitter Alternative) und Messenger (Whatsapp Alternative)

Mit den dezentralen Systemen Mastodon und Matrix wurde eine sehr erfolgreiche Revolution, welche die Daten den großen Datensilos entzieht, gestartet. Sogar die französische Regierung steigt auf Matrix Messenger um.

Weitere Informationen finden Sie unter:

Sonderlösungen

Abgesehen von Sonderlösungen, sollte es für die Masse der Anwender im privaten und gewerblichen Bereich möglich sein, umzustellen. Insbesondere Firmen ersparen sich dabei zusätzlich extrem hohe Lizenzkosten.

Es finden sich auf viele Speziallösungen als Open Source Software, wie z.B.:

Ich hoffe, dieser Artikel hat Ihnen einen Start für den Weg zu mehr Privatsphäre und die Hoheit über die eigenen Daten wieder zu erhalten aufgezeigt.

Gerne können wir im Matrix Raum

#kmj:matrix.ctseuro.com diskutieren. Verwenden Sie am besten den Riot Messenger um den Raum zu betreten. Sollten Sie Probleme mit Matrix/Riot haben, senden Sie mir eine Riot-1:1-Nachricht mit Chat starten an @karl:matrix.ctseuro.com

Abschliessend noch ein paar Regeln, die man beachten sollte:

  • Lassen Sie sich von niemandem zum Installieren von Apps oder Desktop Programmen verleiten! Eine App ist ein Programm, dass genauso wie das Desktop Programm am PC mit Ihren Berechtigungen läuft und alles darf, das Sie auch dürfen!
  • Verwenden Sie von Lieferanten und Geschäftspartnern immer die Webseite und nicht die App, oder das Desktop Programm! Der Browser ist viel sicherer und App/Programm können Daten sammeln und an Dritte übermitteln, ohne dass Sie das wollen, oder merken! Fremde Software öffnet teilweise Tür und Tor und ist oft ein Hochrisiko für den Angriff auf Ihr System! Zusätzlich kann ein komplettes forensisches Profil von Ihnen erstellt werden.
  • Vergessen Sie -alle anderen haben das auch - , denn nur weil es viele verwenden, ist es nicht automatisch für Sie gut. Sie wollen aus der Masse ausbrechen und zu den Leadern gehören.
  • Prüfen Sie z.B.ob Android apps auch im F-Droid Store gelistet sind.

Dieser Artikel wird laufend upgedatet!

Professionellen Support für Unternehmen bieten weltweit viele Spezialisten. Seit 1985 bietet die https://CTS-Solutions.at Open Source Beratung, Umsetzung, Support und Fernwartung für Kunden aus vielen Ländern.

Frühere Artikel:

Wie smarte Menschen das Internet, Computer, Handies und Software nutzen!

Eine Zusammenfassung

Ich wurde vielfach um eine Zusammenfassung der Schritte zu einem intelligenten, sicheren Leben im Internet mit maximaler Privatsphäre gebeten. Da mit klar ist, dass für Endanwender diese Schritte einen durchaus beachtlichen Lernaufwand erfordern gibt es hier eine Zusammenfassung der notwendigen Schritte für Endanwender. Dieser Blog Beitrag wird von Anfängern öfter gelesen werden müssen. Sie sollten die Schritte Step-by-Step durchführen. Alles auf einmal wäre wie Führerschein machen, Auto kaufen und erste Fernreise in einem Tag schaffen zu wollen.

Gehen Sie einfach davon aus, dass wenn Sie ein Auto lenken möchten, Sie zuerst den Führerschein machen müssen und danach das Lesen des Handbuches des Fahrzeuges, bzw. eine professionelle Einschulung notwendig ist. Andernfalls gefährden Sie andere, das Eigentum anderer und natürlich auch sich selbst, bzw. Ihr Eigentum. Primär zählt immer der Schaden den Sie anderen zufügen weit höher, als Schaden, den Sie selbst erleiden. Wenn Sie jemanden von einer Brücke stoßen oder zum Beispiel das Auto einer anderen Person zerstören, ist das kriminell und Sie werden sich mit Haftstrafe oder Zahlung dafür verantworten müssen. Wenn Sie selbst springen, bzw. Ihr Auto kaputt machen, ist es für Ihr Umfeld traurig, bzw. im Fall des Autos, einfach nur Ihr Problem.

Es gilt immer – UNWISSENHEIT SCHÜTZT VOR STRAFE NICHT - auch wenn einige glauben, dass – ich bin gehackt worden – eine Ausrede ist. 90% der Vorfälle sind keine Hacks, sondern Benutzer die irgendwo drauf klicken, bzw. wischen. Nur 10% sind Angriffe von außen, durch Zugriff auf den PC über das Netzwerk. D.h. 90% haben meist durch Unwissenheit, oder Selbstüberschätzung das Problem selbst ausgelöst. Das Internet ist, wie das richtige Leben auch, kein Ponyhof. Sie geben Ihre Geldbörse im richtigen Leben ja auch keinem Fremden und glauben, dieser wird darauf aufpassen?

Bei Computern ist es so, dass es den Fall, wo Sie sich nur selbst schaden, so gut wie nicht gibt! Trojaner senden Chat Protokolle, Bilder und Texte an Dritte, versenden E-Mails und vieles mehr. Dadurch schaden Sie immer auch Dritten, sei es durch Bilder, die nicht für die Öffentlichkeit bestimmt waren und durch Ihren Fehler an Unbekannte verteilt werden, durch die Veröffentlichung von Dokumenten und Protokollen. Sehr unangenehm für Serverbetreiber sind auch der Versand von 100.000enden Mails und anderem mehr, ausgelöst durch Ihren Computer.

Computersysteme, Handies und andere Gerätschaften sind mittlerweile weit komplexer als Autofahren und auch wenn die Hersteller versuchen die Anwendung einfach zu halten, sollten Sie verstehen was Sie tun. Insbesondere die meisten kostenlosen Dienste, bei denen Sie natürlich mit Ihren Daten viel mehr bezahlen, als der Dienst in Euros monatlich wert wäre, versuchen für Laien ohne Computerwissen die Einstiegshürde ganz nieder zu legen. Die so gesammelten Daten der im Computerbereich ungebildeten Masse ist das Gold der Zukunft für diese Datenssammler.

Nur weil Sie glauben zu wissen, wo Sie klicken, oder wischen, verstehen Sie noch nicht den Ablauf im Hintergrund. Lesen und lernen Sie, dann werden auch Sie aus der Masse ausbrechen und Dinge sinnvoll, bei gleichzeitigem Schutz der Privatsphäre, nutzen können.

Als Grundregel gilt, wenn Sie einem Spezialisten nicht erklären können, was durch den Klick, oder Wisch, ausgelöst wird, wissen Sie nicht wirklich, was Sie tun und sollten massive Vorsicht walten lassen.

Und hier sind wirkliche Spezialisten gemeint!

Generelle Regeln für das Leben im Netz

  • Denken Sie nach, bevor Sie klicken! Niemand schickt ihnen 1,000.000 $, braucht Ihre Hilfe bei einer Transaktion und wenn Sie eine Rechnung von jemandem erhalten, mit dem Sie nicht arbeiten, löschen Sie die Mails einfach.
  • Sind Sie nicht neugierig! Neugier und Gier haben, nicht nur bei Computern, schon viele riesige Probleme ausgelöst. Kein Mädel das Sie nicht kennen schickt ihnen ein Nacktbild, oder will mit ihnen ins Bett, weil Sie so gut und scharf sind.
  • Verfallen Sie nicht in Panik, wenn Sie wo drauf klicken und ein Fenster mit einer Frage aufgeht! Klicken Sie das Fenster nicht weg. Wenn Sie etwas nicht verstehen, dann gestehen Sie sich das ein und fragen einen Experten und damit sind nicht Wischerkönige gemeint, sondern Menschen welche die Hintergründe verstehen! In Firmennetzen kontaktieren Sie sofort Ihren Administrator oder Helpdesk! Nur wenn das Fenster noch am Bildschirm steht, kann der Experte das beurteilen. Mit – Da war etwas, ich habe es weg geklickt und weiß nicht mehr was da stand – schießen Sie sich selbst ins Aus und Ihre Anwesenheit bei der nächsten Weihnachtsfeier ist um ein paar Punkte unwahrscheinlicher. Insbesondere Trojaner, Crypto Malware und anderes zieht meist erst, nachdem Sie in der Box auf Ja, oder OK geklickt haben. Wie oben geschrieben, Gehirn einschalten, lesen, gegebenfalls fragen und dann entscheiden.
  • Reduzieren Sie alle Möglichkeiten, das sie von Ihren eigenen Geräten (TV, Sprachsteuerungen, Mobiltelefonen, Tablets, Computer, IoT Systeme, etc.) gefilmt, oder abgehört werden auf ein Minimum. Kaufen Sie nur Geräte die Daten nicht an Dritte senden und bei denen die gesamte Kommunikation in Ihrem Bereich bleibt. Leider gibt es viele Menschen, die sich freiwillig Wanzen in der Form von Sprachsteuerungen ins Haus stellen. Zusätzlich sind alle Produkte bei denen Sie sich zum Server des Herstellers zur Steuerung verbinden so aufgebaut, dass dieser alle Daten sammeln, bzw. aufzeichnen kann. Und sogar, wenn dieser seriös ist, was passiert, wenn der Server schlecht gesichert ist und Dritte Zugriff zu den Daten, oder den Steuerungen bekommen. Auch hier gilt, fragen Sie Spezialisten, keine selbsternannten Experten ohne Wissen.
  • Versuchen Sie jede Weitergabe von Daten an Dritte zu verhindern. Insbesondere GPS Positionsdaten, Surfverhalten, u.v.m. Ich behaupte, jeder hat etwas zu verbergen! Und sollten Sie die Ausnahme sein, dann müssen andere trotzdem nicht Ihr ganzes Leben kennen und die Daten frei Haus geliefert bekommen. Es besteht immer das Risiko, dass die Daten in die Hände von Kriminellen kommen.
  • Vermeiden Sie Cloud Speicherungen und sonstiges abspeichern auf fremden Computern im Internet. Cloud ist nichts anderes, als ein Rechner bei dem jemand anderer als Sie das Administrator-Passwort hat. Auf diesen Rechnern können fremde Menschen, die Sie nicht kennen, Ihre Mails, Ihre Kommunikation und Ihre Dokumente lesen und Sie wissen noch nicht einmal, wenn Dritte durch einen Hack Zugriff erhalten! Der Equifax Hack in den USA gefährdet die Lebensumstände von Millionen US Bürgern! Ähnliche Szenarien sind viele denkbar.
  • Generell gilt die Regel, dass Ihre Daten in Ihrem Haus gespeichert sein sollen und nie auf Rechnern von Dritten.

Generelle Regeln unabhängig vom Betriebssystem

  • Verwenden Sie mindesten 10-stellige, komplexe, Passwörter.
  • Arbeiten Sie nie mit dem Administrator Account. Egal welches Betriebssystem sie verwenden, verwenden Sie den Administrator nie zum Arbeiten. Dieser hat Zugriff auf das gesamte System und Schadsoftware kann das gesamtre System zerstören! Lesen Sie einen Benutzer für sich an, der nicht in der Administratorengruppe ist. Damit reduzieren Sie den Schaden zumeist auf diesen Benutzer! -Sollten mehrere Personen mit einem Gerät arbeiten müssen Sie für jeden einen eigenen Benutzer, der nicht Administrator ist, anlegen. Damit kann ihr Kind im Normalfall nicht ihre Dokumente vernichten.
  • Der Administratoraccount darf nur zur Systemeinrichtung und zur Softwareinstallation verwendet werden. Dieser Account darf nie ins Internet. Wenn Sie eine Software downloaden, laden Sie diese als Benutzer, prüfen diese als Benutzer auf Viren und danach melden sie sich zur Installation als Administrator an. Am besten richten Sie einen Download- und Prüf-Benutzer ein, damit im Fall der Fälle nur dieser betroffen ist.
  • Wenn Sie Netzwerk Datenträger verwenden, z.B. ein sogenanntes NAS, erstellen Sie jede Freigabe mit eingeschränkten Benutzerrechten. D.h. auf das Netzwerklaufwerk Franz, darf nur der Benutzer Franz zugreifen, auf das Netzwerklaufwerk Rosi, nur der Benutzer Rosi. Wenn Franz und Rosi Daten austauschen richten Sie ein weiteres Laufwerk FranzundRosi ein und schränken den Zugriff auf diese beiden Benutzer ein. NIE sollten Sie Laufwerke für alle, vielleicht auch noch ohne Passwort freigeben!
  • Bewahren Sie immer mehrere Generationen von Datensicherungen auf. Ganz wichtig, diese Datensicherungen müssen Offline (abgesteckte USB Platte, USB Stick, etc.) sein! Denn nicht nur Malware, sondern auch Blitzschlag, Überspannung, etc. vernichtet Elektronik. Wenn Sie alle Datenträger angesteckt haben, dann kann ein Blitzschlag zum Totalverlust führen. Wechseln und Abstecken ist Ihnen zu viel Aufwand? Kein Problem, es sind Ihre Daten! Aber dann bitte auch nicht jammern, sollte alles weg sein. Wenn die vernünftige Vorgangsweise zu viel Aufwand ist, dann werden die Daten nichts wert sein und man kann den Blitzschlag als Entsorgung von Lebensmüll betrachten. Lächeln und sich über die leere Festplatte freuen ist angesagt.
  • Verwenden Sie freie Software wie z.B. CloneZilla zum duplizieren von Festplatten. Damit können Sie, sollte Ihre Festplatte wegsterben, das System wieder in Betrieb setzen. Zwischenzeitlich veränderte Daten sichern Sie zurück und alles ist wieder gut.
  • Zumindest eine Version der Datensicherung sollte regelmäßig außer Haus aufbewahrt werden. Nur so haben Sie, im Falle eines Einbruches, bzw. Brandes noch einen Datenträger mit all Ihren wichtigen Daten!
  • Richten Sie auf jedem Gerät eine Firewall ein um es vor Netzwerkangriffen zu schützen.
  • Die Verwendung von Virenscannern wird sehr differenziert betrachtet. Bei Windows sollte der mitgelieferte Scanner aktiviert werden, bei anderen Systemen sollte die Verwendung gut überdacht werden.

Tor Browser und das .onion Net

  • Verwenden Sie für sensible Webseiten und Suchvorgänge immer den Tor Browser (https://torproject.org). Damit surfen Sie komplett anonym im Netz und Ihre IP Adresse wird verschleiert. Ignorieren Sie Aussage, wie Darknet, illegal, oder ähnliches. Tor ist ein legales Anonymisierungsnetzwerk. Illegal ist, wie im normalen Leben auch, wenn Sie Dinge außerhalb des Gesetzes machen. Dann werden Sie sich, wenn Sie erwischt werden, verantworten müssen. Tor ist ein unbedingt zu empfehlendes Hilfsmittel, insbesondere, wenn Sie kritische Themen, wie zum Beispiel Krankheiten, im Internet nachlesen.

Zusätzlich kann man im Tor Netz, genau wie im Internet auch, Webserver betreiben. Diese erhalten dann, analog zu z.B. .com, eine .onion Endung und sind nur mit dem Tor Browser besuchbar. Diese Webseite finden Sie auch im Tor Netz unter der Adresse:

Auch große Anbieter, wie z.B. Facebook, betreiben eine .onion Adresse.

Besuchen Sie mich im Tor Netz!

Linux, LineageOS und Open Source Softwareinstallation

Vermutlich könnten über 70% der Anwender ohne Probleme auf das kostenlose Linux umsteigen und die großen Vorteile von Open Source Software nutzen. Eine Standard-Installation von Debian Linux mit der Oberfläche KDE und dem kompatiblen und freien Office Paket LibreOffice deckt alleine schon die Masse der Arbeitsplätze ab.

Details zu Arbeitsplätzen, Servern und Software

Infos für viele Handies und Tablets finden Sie viele Infos hier

Absicherung des Browsers mit Firefox Plugins:

Revolution bei Micro Blogging (Twitter Alternative) und Messenger (Whatsapp Alternative)

Mit den dezentralen Systemen Mastodon und Matrix wurde eine sehr erfolgreiche Revolution, welche die Daten den großen Datensilos entzieht, gestartet. Sogar die französische Regierung steigt auf Matrix Messenger um.

Weitere Informationen finden Sie unter:

Sonderlösungen

Abgesehen von Sonderlösungen, sollte es für die Masse der Anwender im privaten und gewerblichen Bereich möglich sein, umzustellen. Insbesondere Firmen ersparen sich dabei zusätzlich extrem hohe Lizenzkosten.

Es finden sich auf viele Speziallösungen als Open Source Software, wie z.B.:

Ich hoffe, dieser Artikel hat Ihnen einen Start für den Weg zu mehr Privatsphäre und die Hoheit über die eigenen Daten wieder zu erhalten aufgezeigt.

Gerne können wir im Matrix Raum

#kmj:matrix.ctseuro.com diskutieren. Verwenden Sie am besten den Riot Messenger um den Raum zu betreten. Sollten Sie Probleme mit Matrix/Riot haben, senden Sie mir eine Riot-1:1-Nachricht mit Chat starten an @karl:matrix.ctseuro.com

Abschliessend noch ein paar Regeln, die man beachten sollte:

  • Lassen Sie sich von niemandem zum Installieren von Apps oder Desktop Programmen verleiten! Eine App ist ein Programm, dass genauso wie das Desktop Programm am PC mit Ihren Berechtigungen läuft und alles darf, das Sie auch dürfen!
  • Verwenden Sie von Lieferanten und Geschäftspartnern immer die Webseite und nicht die App, oder das Desktop Programm! Der Browser ist viel sicherer und App/Programm können Daten sammeln und an Dritte übermitteln, ohne dass Sie das wollen, oder merken! Fremde Software öffnet teilweise Tür und Tor und ist oft ein Hochrisiko für den Angriff auf Ihr System! Zusätzlich kann ein komplettes forensisches Profil von Ihnen erstellt werden.
  • Vergessen Sie -alle anderen haben das auch - , denn nur weil es viele verwenden, ist es nicht automatisch für Sie gut. Sie wollen aus der Masse ausbrechen und zu den Leadern gehören.
  • Prüfen Sie z.B.ob Android apps auch im F-Droid Store gelistet sind.

Dieser Artikel wird laufend upgedatet!

Professionellen Support für Unternehmen bieten weltweit viele Spezialisten. Seit 1985 bietet die https://CTS-Solutions.at Open Source Beratung, Umsetzung, Support und Fernwartung für Kunden aus vielen Ländern.

Frühere Artikel:

Riot.IM Messenger: Kurzanleitung für Benutzer mit Videos (Stand 01/2019)

neue Version der Anleitung verfügbar:



UPDATE / HINWEIS / WICHTIG 2019-05-16:

Aufgrund der Überlastung des größten öffentlichen Servers matrix.org empfehle ich einen anderen öffentlichen Server aus dieser Liste zu wählen: https://www.hello-matrix.net/public_servers.php . Ich empfehle Freunden den Server: https://www.privacytools.io/ . Der Homeserver zur Registrierung findet sich hier: https://riot.privacytools.io/#/welcome . Für die Riot Windows, Linux, MAC,, Android oder IOS App, verfügbar von https://riot.im sind folgende Einstellungen zu verwenden: Heimserver: https://chat.privacytools.io . Deine Adresse wird dann: benutzername:privacytools.io

Erfreuliche News

Es ist sehr erfreulich, dass immer mehr Menschen auf Ihre Privatsphäre und Daten achten. Langsam bildet sich auch bei breiteren Bevölkerungsschichten ein Bewusstsein für mehr Kontrolle über die eigenen Daten aus. Riot.im/Matrix.org ist mehr als ein Messenger, es ist ein Tool für dezentralisierte Zusammenarbeit, Internettelefonie, Videotelefonie und Messaging. Durch den dezentralen Aufbau wird nur eine minimale Menge an Metadaten erzeugt und bei aktivierter End-to-End Verschlüsselung ist Mitlesen auch am Server unmöglich. Da so viele Menschen in die Matrix wechseln und dieser Beitrag extrem oft abgerufen wird, erfolgte nun ein Update der Anleitung.

Da keiner etwas liest → NEUE KURZANLEITUNG

Matrix.org (für Administratoren)

Unter https://matrix.org findet sich der serverseitige Teil. Alle die einen eigenen Server für sich, Freunde oder die Firma an die Matrix anschließen wollen, finden sich hier alle Informationen für das sehr einfache Setup. Ziemlich cool Administrator eines Teils der Matrix zu sein. Guides finden sich hier: https://matrix.org/docs/guides/

Riot.im (für Benutzer)

Riot.im ist die App zum Einstieg in die Matrix für alle die einfach und sicher kommunizieren wollen!. Das wirklich genial daran ist, dass es die Riot App für IOS (Apple), Android, Windows, MAC und Linux gibt und man mit allen Geräten gleichzeitig online sein kann. Alle Geräte sind immer synchron und es ist egal, wo man gerade liest oder kommuniziert.

Wichtig:

Aufbau:

Es gibt im Messenger folgende Bereiche:

Musterbild zeigt die Android App, die Symbole sind aber auf allen Systemen gleich.

Im Hauptbereich sieht man:

  • Favoriten (über die Raumeinstellungen)
  • Personen (1:1 Kommunikation)
  • Räume (Gruppenkommunikation)
  • Niedrige Priorität (Nur Sortierung, sonst, keine Auswirkung)

In der Auswahlleiste unten:

  • Zurück zum Home Schirm
  • Favoriten anzeigen
  • Personen anzeigen
  • Räume anzeigen
  • Communities anzeigen

Communities:

Du kannst Communities (bestehen aus Personen und Räumen) erstellen, beitreten, oder eingeladen werden. Communities machen die Kommunikation, bzw. die Organisation von Projekten einfacher, da man in einer Ansicht alle Personen und Räume sieht. In der PC App und am Tablet werden die Communitysymbole für eine einfachere Navigation auch links angezeigt.

Räume:

Riot besteht aus Räumen, auch 1:1 Chats sind Räume, jedoch mit nur 2 Personen. Gruppenräume sind für mehrere Personen offen. Der Eröffner des Raumes ist Administrator und kann über das Zahnrad, bzw. über das Menü des Raum verwalten. Nur bei 1:1 Räumen sind beide Gesprächspartner Raumadministrator. Räume können manuell den Favoriten, bzw. der niedrigen Priorität zugeordnet werden. Damit bleibt die Übersicht gewahrt.

Räume haben vielfältige Einstellungsmöglichkeiten für Berechtigungen, Bild, Beschreibung und vieles mehr. Alle Einstellungen finden sich im Zahnrad, bzw. über die Raumeinstellungen. Die wichtigste Einstellung ist, egal ob 1:1 oder Gruppe, die Verschlüsselung zu aktivieren. Damit ist alles sicher End-to-End verschlüsselt.

Adressen in der Matrix:

Ähnlich wie bei E-Mails werden die Adressen in der Matrix aufgebaut und bestehen auch aus Benutzer und Domain. Eine Persönliche Adresse sieht so aus:

@benutzername:server.com

Anders als bei E-Mails ist die erste Stelle speziell:

@ - steht für eine Person
# - steht für einen Gruppenraum
+ - steht für eine Community

Danach folgt der Benutzername und durch : getrennt der Server auf der der Benutzer registriert ist. Da sich aktuell sehr viele am öffentlichen Matrix Server registrieren sehen viele Adressen so aus:

@meinname:matrix.org

Wenn jemand auf einem anderen Server registriert ist, wie z.B. ich, dann sieht die Adresse z.B. so aus:

@karl:matrix.ctseuro.com

Mit dieser Adresse kann man einen 1:1 Chat mit dieser Person starten. Wenn Sie die Adresse eines Raumes kennen, können Sie durch Eingabe von:

- /j #msg:matrix.ctseuro.com

einen Raum betreten.

Sicher einer der gewöhnungsbedürftigsten Punkte beim Umstieg ist die Verschlüsselung. Um es für Benutzer ohne Kenntnisse über Verschlüsselung und Kryptografie verständlich zu machen:

- Nachdem die Verschlüsselung aktiviert wird, erscheinen bei anderen Benutzern orange Warndreiecke. Nun müssen die Schlüssel (einer oder mehrere pro Benutzer) verifiziert werden. Danach erscheint beim Schreiben ein grünes Schloss. 
- Bei Gruppenräumen kann es sinnvoller sein, die Warnmeldung mit „Trotzdem senden“ zu quittieren und nicht alle Benutzer des Raumes zu verifizieren.

WICHTIG: Registrieren Sie, sofern Sie keinen eigenen Server betreiben, Ihren kostenlosen Account unter Riot.IM. Zur Registrierung ist nur Benutzername und Passwort notwendig. Es wird keine E-Mail abgefragt. Danach sollte unbedingt die Desktop Version, bzw. die App installiert werden um alle Vorteile bei der End-to-End-Verschlüsselung nutzen zu können. Die Web-Version ist nur zum ersten Schnuppern gedacht.

Meine Kontakte auf Riot/Matrix sind zu 80% EDV Laien und alle haben es in kürzester Zeit geschafft, sich in dieser sicheren Lösung zu bewegen und zu kommunizieren. Wer E-Mails senden kann, kann Riot auch bedienen.

Update 11.2.2019

Keys sichern:

Ab Riot (Android und LineageOS 0.8.22) können nun die zur Verschlüsselung notwendigen Keys, verschlüsselt und mit Passwort gesichert, auch am Server gespeichert werden. Damit werden nie mehr verschlüsselte Nachrichten verloren.

Sprachnachrichten

Multi Account auf Android und LineageOS

  • Riot.IM für Account 1 installieren
  • miniVector (Riot Version ohne Telefonie) für Account 2 installieren

Der frühere Artikel - für Leser

findet sich hier:

https://kmj.at/2018-03-12-riot-im-messenger-kurzanleitung-fuer-benutze-updated/