Baikal – Datenschutz für Kontakte und Kalender

1. DatenkrakenBaikal

Kaum ist das neue Smartphone ausgepackt und eingeschaltet, drängen einen Hersteller wie Apple, Google oder Microsoft ein neues Konto in der unternehmenseigenen Cloud anzulegen. Nach etwas Fingerakrobatik gefolgt von Wischgesten ist der Account eingerichtet und synchronisiert fortan Kalender sowie Adressdaten mit dem Gerät. Wer über weitere Geräte verfügt oder seinen Desktop-PC ebenfalls mit dem Konto synchronisieren möchte, findet bei den Cloud-Diensten der »großen« Hersteller eine bequeme Lösung.

Noch vor der NSA-Affäre sollte es allgemein bekannt gewesen sein, dass es  amerikanische Unternehmen mit dem Datenschutz nicht allzu genau nehmen. Im Grunde weiss niemand zu welchem Zweck die dort gespeicherten Adress- und Kalenderdaten genutzt werden. Datenschutzbewusste Anwender suchen folglich nach Alternativen, da viele den großen Anbietern kein Vertrauen mehr schenken.

Mit Baikal möchte ich heute eine OpenSource Lösung vorstellen, die sich durch seine Einfachheit und Stabilität auszeichnet. Für Privatanwender und kleine Büros, mit eigenem Webserver oder entsprechendem Hosting-Paket, mag dies eine Alternative darstellen.

2. Baikal

Seit gut einem halben Jahr (Februar 2013) wird Baikal von Jérôme Schneider entwickelt. Aktuell liegt das Projekt in der Version 0.2.6 vor und wird kontinuierlich verbessert. Von der niedrigen Versionsnummer sollten sich zukünftige Anwender nicht abschrecken lassen – bereits seit Version 0.2.0 läuft Baikal ohne Ausfälle oder Probleme auf mehreren Systemen.

Kurz zusammengefasst bietet es folgende Funktionen und Vorteile:

  • Synchronisation von Kalender und Adressbüchern über die IETF Standard-Protokolle CardDAV, sowie CalDAV. Dies gewährleistet eine hohe Flexibilität und der Anwender begibt sich in keine Abhängigkeit zu proprietären Herstellerlösungen.
  • Baikal arbeitet folglich mit jeder Anwendung zusammen, die das CardDAV bzw. CalDAV Protokoll unterstützt. Beide Protokolle sind bereits nativ in iOS, sowie Mac OS X integriert. Für Android existieren entsprechende Apps, welche die Protokoll-Funktionalität nachrüstet (DAVx⁵). Des Weiteren stehen für Linux (Mozilla Thunderbird mit Lightning Addon) und auch Windows (eM Client) entsprechende Anwendungen zur Verfügung.
  • Über eine übersichtliche Web-Oberfläche lassen sich neue Benutzer, Kalender und Adressbücher anlegen. Weiterhin lassen sich in den Systemeinstellungen unter anderem die Datenbank Parameter modifizieren.
  • Baikal basiert auf SabreDAV, Twig, und Bootstrap. Der komplette Quelltext ist einsehbar.

Dashboard

3. Inbetriebnahme

Baikal basiert auf PHP 5.3.1+ und nutzt SQLite3 oder eine MySQL Datenbank für die Verwaltung von Kalender und Kontakten. Je nach Hosting-Umgebung und Anspruch sind drei unterschiedliche Varianten von Baikal erhältlich:

  • Flat-Package: Das Paket eignet sich für Anwender mit begrenztem Zugriff auf den Server und seine Ressourcen. Mittels FTP (besser SFTP!) werden die Installationsdateien kopiert und anschließend eine Installation über das Webinterface gestartet. Einfach und schnell.
  • Regular-Package: Für alle mit Shell-Access über SSH eignet sich die zweite Variante von Baikal. Konfigurationsbeispiele für Apache und nginx werden bereits mitgeliefert und erleichtern die Inbetriebnahme. Zu finden unter »baikal-regular/Specific/virtualhosts/«.
  • Bleeding-Edge: Als letzte Option bietet Baikal eine Entwickler-Variante. Direkt aus der Entwicklerumgebung werden die aktuellsten Quellen bezogen. Diese Variante eignet sich nicht für den Produktivbetrieb.

Abhängig von der gewählten Variante unterscheiden sich die Anforderungen an die Systemumgebung und die anschließende Installation.

3.1 Voraussetzungen

Als Grundvoraussetzung sind für jede Umgebung folgende Bestandteile erforderlich:

  • PHP 5.3.1 oder neuer.
  • Die PHP-Erweiterungen PHP Data Objects (PDO), DOM (php-xml) SQLite3 oder MySQL – je nachdem ob eine SQLite- oder MySQL-Datenbank eingesetzt werden soll. Ob diese Voraussetzungen bereits erfüllt sind kann einfach über die phpinfo() Funktion geprüft werden.
  • 30 MB Festplattenspeicher.
  • Hinweis: Baikal ist für den Betrieb in einer Subdomain konzipiert. Also beispielsweise »baikal.meinserver.de«.

3.2 Installation

Werden alle Voraussetzungen erfüllt, ist die Installation von Baikal binnen wenigen Minuten erledigt. Jérôme hat die Installation in seinem GitHub Repository beschrieben. Die FTP-Variante ist hier kurz zusammengefasst:

  • Zunächst wird das Baikal Flat-Package von der Webseite heruntergeladen.
  • Die entpackten Dateien werden anschließend mittels SFTP in das Subdomain-Verzeichnis des Servers geladen.
  • Anschließend wird im Browser die Installation von Baikal angestoßen. Je nach Subdomain wird also aufgerufen: »http://baikal.meinserver.de
  • Hinweis: Für die MySQL-Variante muss zunächst eine entsprechende Datenbank erstellt werden.

3.3 Einrichtung Kalender und Kontakte

Nach Abschluss der Installation können neue User und dazugehörige Kalender bzw. Adressbücher angelegt werden. Das lässt sich über das Web-Interface von Baikal erledigen: »https://baikal.meinserver.de/admin/«
User
Kalender
Kontakte
Anschließend lassen sich die angelegten Kalender und Adressbücher über die Endgeräte synchronisieren. Je nach Gerät variiert die Konfiguration – im Grunde ist der Vorgang allerdings immer ähnlich:

  • Zieladresse definieren:
    • »https://baikal.meinserver.de/cal.php/principals/user« (iOS)
    • »https://baikal.meinserver.de/cal.php/calendars/username/default« (Thunderbird)
  • Benutzername eingeben
  • Passwort eingeben

Sollten Probleme auftreten ist die Baikal GitHub Seite die erste Anlaufstelle.

4. iOS Fallstrick

Alle iOS-Varianten haben einen Bug und ignorieren den angegebenen Account-Pfad unter Erweiterte Einstellungen. iOS erwartet sowohl den Kalender, als auch das Adressbuch unter »/.well-known/caldav« bzw. »/.well-known/carddav«. Das ist natürlich Quatsch und wurde selbst in iOS 7 nicht gefixt. Abhilfe schaffen entsprechende Rewrite-Regeln für Apache und nginx.

4.1 Apache

RedirectMatch 301 ^/.well-known/caldav /cal.php
RedirectMatch 301 ^/.well-known/carddav /card.php

4.2 nginx

rewrite ^/.well-known/caldav /cal.php redirect;
rewrite ^/.well-known/carddav /card.php redirect;

5. Zugriff nur für bestimmte Geräte erlauben

Prinzipiell ist der Zugriff auf die Kontakte bzw. Kalender über eine Kombination aus Benutzername und Passwort abgesichert. Dennoch kann ein kleiner Trick für etwas mehr Sicherheit sorgen und Bruteforce-Angreifer in die Verzweiflung treiben. Allerdings macht die Modifikation nur dann Sinn, wenn die komplette Kommunikation zwischen Client und Baikal-Server mittels SSL abgesichert wird.

Unterstütze den Blog mit einem Dauerauftrag!

Unabhängig. Kritisch. Informativ. Praxisnah. Verständlich.

Die Arbeit von kuketz-blog.de wird vollständig durch Spenden unserer Leserschaft finanziert. Sei Teil unserer Community und unterstütze unsere Arbeit mit einer Spende.

Mitmachen ➡

5.1 User-Agents

Im Normalfall übertragen Browser bei der HTTP-Anfrage auf eine Webseite ihren User-Agent. Darin enthalten sind Informationen zur aktuellen Browser-Version und des verwendeten Betriebssystems. Generell ist die Übertragung des User-Agents optional und kann vor der Übertragung (via Browser-Add-on) auch beliebig manipuliert werden.

Nicht nur Browser übertragen User-Agents beim Zugriff auf bestimmte Ziele, sondern auch Endgeräte beim Aufruf ihrer Kontakte und Kalender. So schickt Beispielsweise ein iOS 6 Gerät einen User-Agent der iOS/6.1 beinhaltet. Mac OS X in der Version 10.8.5 schickt hingegen einen User-Agent der aus »12F37« (Buildnummer von 10.8.5) besteht. Soll der Zugriff also nur für jene Geräte erlaubt werden, kann die nginx Konfiguration entsprechend erweitert werden:

location ^~ /cal.php {
## Only allow iOS user agents
   if ($http_user_agent !~ (iOS/6.1|(12F37))) {
   return 444;
   [...]
}

location ^~ /card.php {
## Only allow iOS user agents
   if ($http_user_agent !~ (iOS/6.1|(12F37))) {
   return 444;
   [...]
}

Clients deren Anfrage kein iOS/6.1 oder 12F37 beinhaltet wird die Verbindung direkt gekappt und keine Informationen zurückgesendet. Selbstverständlich lassen sich User-Agents beliebig fälschen. Woher soll ein Angreifer allerdings wissen, mit welchem User-Agent der Baikal-Server abgefragt wird? Ungebetene Gäste werden somit direkt am Gartenzaun abgewiesen, bevor sie die Haustür überhaupt erreichen können.

Hinweis: Die User-Agents sind dem access.log von Apache bzw. nginx zu entnehmen.

6. Fazit

Wer dem Gefängnis von Apple, Google, Microsoft und Co. entkommen möchte, findet in Baikal eine brauchbare und leicht zu bedienende Alternative. Der Lohn ist neben Freiheit, Flexibilität und Datenschutz vor allem eines: Eine Lösung mit der sich Kontakte und Kalender über (fast) alle Geräte hinweg synchronisieren lassen. Bereits ein einfaches Hosting-Paket für wenige Euro im Monat genügt, um dem Datenschutz-Nirvana zu entgehen.

Der Funktionsumfang von Baikal ist auf das Notwendigste reduziert – was aber der Nützlichkeit keinen Abbruch tut. Einmal eingerichtet verrichtet es zuverlässig seinen Dienst. Kennt ihr weitere Alternativen und Lösungen zur Verwaltung von Kontakten und Kalendern? Dann schreibt mir eine Nachricht oder hinterlasst einen Kommentar!

Über den Autor | Kuketz

Mike Kuketz

In meiner freiberuflichen Tätigkeit als Pentester / Sicherheitsforscher (Kuketz IT-Security) schlüpfe ich in die Rolle eines »Hackers« und suche nach Schwachstellen in IT-Systemen, Webanwendungen und Apps (Android, iOS). Des Weiteren bin ich Lehrbeauftragter für IT-Sicherheit an der Dualen Hochschule Karlsruhe, sensibilisiere Menschen in Workshops und Schulungen für Sicherheit und Datenschutz und bin unter anderem auch als Autor für die Computerzeitschrift c’t tätig.

Der Kuketz-Blog bzw. meine Person ist regelmäßig in den Medien (heise online, Spiegel Online, Süddeutsche Zeitung etc.) präsent.

Mehr Erfahren ➡

SpendeUnterstützen

Die Arbeit von kuketz-blog.de wird zu 100% durch Spenden unserer Leserinnen und Leser finanziert. Werde Teil dieser Community und unterstütze auch du unsere Arbeit mit deiner Spende.

Folge dem Blog

Wenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:

Bleib aktuell ➡


Diskussion

31 Ergänzungen zu “Baikal – Datenschutz für Kontakte und Kalender”

  1. Comment Avatar icke sagt:

    Klingt interessant.
    Ich nutze Owncloud – auch ohne Probleme.

  2. Comment Avatar Matthias Pabst sagt:

    Oh, das klingt interessant. Werde ich auf jeden Fall mal testen.

  3. Comment Avatar Matthias Pabst sagt:

    Du kennst nicht zufällig einen guten CalDAV Web Client? Hin und wieder wäre auch der Zugriff auf den Baikal-Kalender über einen Browser interessant.

  4. Comment Avatar Steffen sagt:

    Ich benutze auf meinem Synology NAS daheim problemlos ownCloud und syncronisiere sowohl zu Android als auch zu Windows (Outlook mit Web$AV Collaborator)

    Kann ich nur empfehlen!

    • Comment Avatar Christian sagt:

      VIELEN DANK, dass du mich auf das ownCloud Paket für Synology aufmerksam gemacht hast.
      Ich war schon ganz enttäuscht, dass es für Synology kein CardDav package gibt. Das ist der Grund, warum ich Baikal ausprobiert habe (hab extra nen Raspberry Pi dafür gekauft), aber ownCloud mit Synology ist zwar langsam (zumindest bei meinem NAS), aber super komfortabel.
      DANKE!

  5. Comment Avatar dowel sagt:

    Der oben referenziert webcalendar (k5n) hat meiner Erfahrung nach heftige Probleme mit Umlauten. Das sollte man zuerst testen …

  6. Comment Avatar René sagt:

    Ich kann Zarafa empfehlen. Wer eine Synology Box sein Eigen nennt kann Zarafa für bis zu 5 User kostenslos nutzen (für alle anderen ist es glaube ich nicht kostenlos). Vorteil ist, dass es eine komplette Exchange Implementierung ist und man keine Sondereinstellungen auf den Clients machen muss. Einfach Exchange-Konto einbinden, fertig. Mail, Kontakte, Kalendar alles synchronisiert perfekt miteinander.

  7. Comment Avatar Laszlo Mitsch sagt:

    Hallo, Super Beitrag – aber wie sieht es mit Aktualisierungen aus? Kann man neu Versionen einfach drüberbügeln? Hat jemand schon mal von einer älteren auf eine neuere Version aktualisiert?

    Grüße Lamitsch!

  8. Comment Avatar Thomas sagt:

    Hallo,
    ich bin durch Zufall auf diese Seite gestoßen, Super Thema, danach habe ich schon lange gesucht.
    Ich habe einen freien Web Account bei Cwusrf.
    Dort habe ich baikal per ftp installieren können.
    Über http://www.baikal.cwsurf.de/baikal/admin kann ich das baikal webadmin administrieren, also user und Kalender und Kontake ankelegen.
    Allerdings komme ich mit Thunderbird nicht auf den Kalender.
    Wahrscheinlich liegt es an der Schreibweise der Adresse.
    Hier bräuchte ich Hilfe.
    Ein Aufruf wie : https://baikal.meinserver.de/cal.php/calendars/username/default funktioniert nicht.
    Ich habe es mit versucht, geht aber auch nicht.
    Eine Eingabe im Browser ergab folgendes Fehlerbild :
    d:error>
    SabreDAVExceptionForbidden
    Requested uri (/baikal/cal.php/calendars/username/default) is out of base uri (/sting/o/m/xxxxxx/htdocs/baikal/cal.php/)

    1.8.6
    vielen Dank für Eure Hilfe, villeicht hat jemand ein Tipp für mich.
    Thomas

  9. Comment Avatar Andy sagt:

    Wie ist das denn mit der Sicherheit wenn ich Baikal auf meinem Webserver installiere? Ohne https werden doch dann alle Daten unverschlüsselt durchs Netz geschickt, oder? Dann wäre iCloud wohl die bessere Wahl. Wie ist Baikal gegen Angriffe (zB. brute force) abgesichert. Oder ist Baikal eigentlich nur für’s LAN gedacht?

  10. Comment Avatar LastBoyScout sagt:

    Versuche Baikal auf meinem WHS unter IIS zum laufen zu bewegen…
    Installation lief auch problemlos ab und ich kann auf den Adminbereich zugreifen, nur die Synchronisation will nicht klappen.
    Wenn ich mit Thunderbird auf den Kalenderzugreifen möchte, erhalte ich ein 403 vom Server zurück (HTTP-Fehler 403.1 – Verboten: Ausführungszugriff verweigert.).
    Wie es scheint interpretiert der Server die URL als Pfad (denn es so ja nicht gibt), anstatt die cal.php mit den weiteren Variablen (Username, Kalender-ID) aufzurufen!?
    Wenn ich jedoch die selbe URL mit Firefox aufrufe, wird es hingegen korrekt aufgelöst und ich erhalte eine XML als Antwort (Natürlich mit dem Hinweis das GET bei CalDAV nicht implementiert ist).
    Woran kann das Liegen?
    Hat jemand eine Idee wo ich beim IIS was einstellen muss damit es klappt?

  11. Comment Avatar Jabberwalky sagt:

    Geht das ganze nur über das Internet? Ich habe eine Synology und möchte das Adressen und Kalender nur über das Wlan zuhause syncronisieren.
    Dafür habe ich ja meine eigene Cloud ohne Internet :)

  12. Comment Avatar Blofi sagt:

    Bis jetzt nutze ich zuhause ein Synology NAS mit owncloud. Trotz bemühungen beim einrichten funktionierte der Sync mit Android/Cyanogenmod und eM Clinet (Windows) nicht wirklich.

    werde diese Alternative mal anschauen.

  13. Comment Avatar Hendrik sagt:

    Danke für die Empfehlung.
    Ich bin nach einer Lösung, mit der drei Nutzer auf einen Familienkalender lesend und schreibend zugreifen können. Kann ich das hiermit realisieren?
    Grüße!

  14. Comment Avatar Gerhard Adler sagt:

    Hallo,

    ich versuche laufend Baikal zu installieren, aber es funktioniert nicht, ich bekomme laufend folgende Fehlermeldung:

    Baïkal Install Tool is locked.
    To unlock it, create (or re-create if it exists already) an empty file named ENABLE_INSTALL (uppercase, no file extension) in the Specific/ folder of Baïkal.

    Ich habe vor dem Installationsversuch extra geschaut ob die ENABLE_INSTALL vorhanden ist und sie war da, dann rufe ich die URL zur Instal. auf, da kommt wieder die Meldung und die ENABLE_INSTALL ist verschwunden, hab sie wieder rein kopiert und wieder das selbe Spiel.
    Was soll ich nun machen???

    Gruß.
    Gerhard

  15. Comment Avatar Constantin sagt:

    Hallo Mike,
    eine tolle Übersicht über Baikal. Ich bin gerade dabei mich zwischen Baikal und Radicale für meinen RaspberryPi zu entscheiden. Wie siehst Du die beiden im Vergleich?
    Beste Grüße, Constantin

    • Comment Avatar Mike Kuketz sagt:

      Hallo Constantin,

      ich hatte mich damals gegen Radicale entschieden, da der Konfigurationsaufwand für den nginx Webserver höher war. Da ich es einfach und überschaubar mag, habe ich mich damals für Baikal entschieden.

  16. Comment Avatar Mike sagt:

    Hallo Mike,
    ich bin fast am verzweifeln und möchte das Thema hier noch einmal aufgreifen.

    Ich habe Baikal auf meiner Synology DiskStation mit DSM 5.2-5592 Update 4 laufen.
    Mit dem iPhone iOS 9.0.1 läuft der Sync mit Baikal auch einwandfrei. Nur auf dem Mac (El Capitan) habe ich seit dem neuen Update keine Möglichkeit mehr, meine Kalender und Kontakte mit Baikal zu synchronisieren.

    Hier greift wohl der von dir beschriebene Bug!
    Vor dem Update lief auch auf dem Mac alles ohne Probleme.

    Kannst du mir das mit den rewrite Regeln etwas genauer erklären?!

    Wo ich was ändern muss, damit Mac OS die Daten richtig verarbeitet.
    Ich wäre dir sehr dankbar.

    Gruß Mike

    • Comment Avatar Mike Kuketz sagt:

      Wird wohl wieder ein »Problem« des neuen Mac OS X sein. Kann ich dir leider aber nicht weiterhelfen, da ich es nicht testen kann.

      Eventuell kannst du aus den Log-Files erkennen, auf was El Capitan zugreift. Da muss der Fehler liegen. Anschließend muss dann die Rewrite-Regel angepasst werden.

  17. Comment Avatar Erri sagt:

    Hallo Mike,
    hallo Baikal-Gemeinde,

    vielen Dank für die gute Anleitung, mit der Baikal gut installiert werden konnte. In den Fragen oben habe ich mein Problem leider nicht gefunden. Beim Aufrufen des Kalenders bzw. Users findet Baikal den User nicht und gibt die folgende Fehlermeldung aus (xyz steht für den angelegten user):

    Sabre\DAV\Exception\NotFound Principal with name xyz not found 1.8.7

    Der Kalender lässt sich somit weder in IOS einpflegen noch über einen Webbrowser aufrufen. Ist hierzu schon eine Lösung bekannt, wie der User erfolgreich gefunden werden kann?

    Aufgerufen wurde wahlweise über:
    http://servername/kalender/cal.php/principals/xyz
    oder
    http://servername/kalender/cal.php/calendars/xyz

    Es lässt sich lediglich der Admin ansprechen:
    http://servername/kalender/admin/

    Der User wurde über den eingeloggten Admin angelegt. Über einen Tip, wie Baikal den User und seine Kalender finden und einbinden kann wäre ich dankbar.

    Die gleiche Fehlermeldung kommt übrigens auch, wenn man direkt mit den z.B. „Default“ genannten Kalender aufrufen will.

    http://servername/kalender/cal.php/calendars/xyz/default

    Vielen Dank schon einmal im Voraus
    Erri

  18. Comment Avatar Ralf sagt:

    Hallo zusammen,

    wenn ich versehentlich einen Kalender gelöscht habe, gibt es eine Möglichkeit diesen wieder zu reaktivieren? Legt Baikal Backups in einem Verzeichnis auf dem rasberry ab? Und wenn ja, wo?

    Vielen Dank.

    Ralf

HilfeWenn du konkrete Fragen hast oder Hilfe benötigst, sind das offizielle Forum oder der Chat geeignete Anlaufstellen, um dein Anliegen zu diskutieren. Per E-Mail beantworte ich grundsätzlich keine (Support-)Anfragen – dazu fehlt mir einfach die Zeit. Kuketz-Forum

Abschließender Hinweis

Blog-Beiträge erheben nicht den Anspruch auf ständige Aktualität und Richtigkeit wie Lexikoneinträge (z.B. Wikipedia), sondern beziehen sich wie Zeitungsartikel auf den Informationsstand zum Zeitpunkt des Redaktionsschlusses.

Kritik, Anregungen oder Korrekturvorschläge zu den Beiträgen nehme ich gerne per E-Mail entgegen.