Seite wählen

NETWAYS Blog

Eine aktuelle Fassung des logstash Quickstarts

Viele Open Source Projekte kommen so in Fahrt, dass man mit dem Verfolgen der Entwicklung kaum noch hinterherkommt. Auch wenn das zusätzliche Arbeit verursacht, so ist das dennoch ein Grund zur Freude. Dem entsprechend gibt es heute eine Aktualisierung des logstash Quickstart Tutorials, das ich vor einiger Zeit gepostet habe.logstash_01
Vieles hat sich beim Wechsel von Version 1.3 auf 1.4 geändert, dennoch sollten Migrationen (grossteils) reibungslos vonstatten gehen. Dieses Tutorial soll möglichst schlank und aufs Wesentliche beschränkt bleiben, weshalb ich hier nicht gross auf die Unterschiede eingehen möchte. Dennoch ist es etwas aufwändiger als die vorherige Version, dafür hat man danach eine Teststellung, die nicht nur zum Rumspielen taugt, sondern gleich der Grundstock einer Testumgebung werden kann. Genug der Vorrede, jetzt geht’s ans Eingemachte.
Inzwischen ist es auf jeden Fall empfehlenswert, logstash aus den zur Verfügung gestellten Paketen zu installieren, die praktischerweise auch noch in Repositories organisiert sind. Als Voraussetzung muss Java installiert sein. OpenJDK funktioniert für einfache Beispiele, auch wenn das Projekt inzwischen Sun, äh, Oracle Java empfiehlt.
Für die Installation werden die Repositories konfiguriert. Die nötigen Repofiles und eine Anleitung, wie man sie inkludiert, findet man hier für logstash und hier für elasticsearch.

yum install logstash elasticsearch

(Der aufmerksame Leser erkennt jetzt, dass dieses Tutorial für CentOS/RHEL/Fedora ausgelegt ist, es funktioniert aber ganz ähnlich mit Debian, SLES und diversen anderen Linuxdistributionen oder auch anderen Betriebssystemen) Etwas unüblich ist, dass sich logstash nach der Installation nicht sofort starten lässt, sondern erst eine Konfigurationsdatei angelegt werden muss. Ein Beispiel könnte folgendermassen aussehen:

input {
  file {
    path => "/var/log/messages"
  }
}
output {
  elasticsearch {
    cluster => "elasticsearch"
    protocol => "http"
  }
}

Die legt man nach /etc/logstash/conf.d/logstash.conf . Es ginge noch etwas einfacher mit einer embedded Variante von elasticsearch, aber so kann man den Testhost auch gleich für etwas grössere Tests verwenden und die zusätzliche Installation ist nicht wirklich aufwändig, wie man gesehen hat.
Da im Beispiel der logstash Prozess auf ein File zugreifen will, das eigentlich nur für root lesbar ist, sollte der Prozess nicht als User logstash, sondern als User root gestartet werden. Dazu in /etc/sysconfig/logstash (auf Debian /etc/default/logstash) folgenden Eintrag vornehmen: LS_USER=root. Für Tests schadet es übrigens auch nicht, erstmal SELinux auf permissive zu setzen.
Jetzt noch

service elasticsearch start
service logstash start
service logstash-web start

und mit dem Browser http://localhost:9292/index.html#/dashboard/file/logstash.json (oder statt localhost den Namen / die IP der Maschine mit logstash, falls man nicht lokal testet) aufrufen. Fertig. Ja, ehrlich, das wars. Logstash sammelt lokale Logfiles ein, speichert sie in Elasticsearch und dort kann man sie mit Kibana durchsuchen.
Wer jetzt ein wenig weiter experimentieren möchte, kann noch ein paar Filter mit einbauen, die die Lognachrichten weiter aufbereiten. Da auf jedem System andere Dienste in die Logs schreiben und oft auch andere Logformate eingesetzt werden, kann es sein, dass das folgende Beispiel nicht überall funktioniert.

input {
  file {
    path => "/var/log/messages"
  }
}
filter {
  grok {
    match => [ "message", "%{SYSLOGLINE}" ]
  }
}
output {
  elasticsearch {
    cluster => "elasticsearch"
    protocol => "http"
  }
}

Dieses Beispiel setzt den grok Filter ein, um Syslognachrichten mit einem mitgelieferten Muster in ihre Einzelteile zu zerlegen. Sieht man im Kibana (das vorhin aufgerufene Webinterface) nach, erscheinen am linken Rand plötzlich neue Felder, nach denen man Filtern kann. So wird beispielsweise das program Feld erkannt, das Teil des Syslog headers ist.
kibana_fields
Ein Beispiel, das auf allen Linux Systemen funktionieren sollte, ist das folgende.

input {
  file {
    path => "/var/log/messages"
    type => "syslog"
  }
  exec {
    type => "system-load-average"
    command => "cat /proc/loadavg | awk '{print $1,$2,$3}'"
    interval => 30
    tags => "sysstat"
  }
}
filter {
  if [type] == "syslog" {
    grok {
      match => [ "message", "%{SYSLOGLINE}" ]
    }
  }
  if [type] == "system-load-average" {
    grok {
      match => [ "message" , "%{NUMBER:load_avg_1m} %{NUMBER:load_avg_5m} %{NUMBER:load_avg_15m}" ]
      named_captures_only => true
      add_tag => "groked"
    }
  }
}
output {
  elasticsearch {
    cluster => "elasticsearch"
    protocol => "http"
  }
}

Hier wird in regelmässigen Abständen ein Shellcommand ausgeführt, das aus /proc die aktuelle Load ausliest und als Logevent verschickt. Die wird durch den grok Filter in Felder zerlegt, wo sie dann z.B. zum Zeichnen von Graphen in Kibana oder Graphite verwendet werden kann. Man könnte auch beim Überschreiten einer bestimmten Load ein passives Checkergebnis an Icinga schicken, um darüber zu alarmieren. Klar macht das letzte Beispiel in der Praxis wenig Sinn, wenn es die hervorragenden Monitoringplugins gibt, aber es zeigt, wie vielseitig logstash sein kann. Man könnte Icinga dabei sogar umgehen und beim Überschreiten einer Grenze der load gleich per Mail, IRC, oder Jabber einen Alarm an den zuständigen Admin schicken.
schulung_logstashIch kann nur jedem empfehlen, zumindest den Anfang des Quickstarts durchzuspielen. Das Experimentieren mit logstash und dem Rest vom ELK Stack macht einfach Spass. Wenn es dann daran geht, die Erkenntnisse so zu vertiefen, dass sie in einer Produktivumgebung eingesetzt werden sollen, geht’s hier zu Schulung und Consulting. Die beiden machen übrigens auch Spass.
Für Experimentierfreudige gibt’s als Dreingabe noch ein paar Stichworte zum Erweitern des Kibana Dashboards:

  • Rechts unten auf „Add row“, damit eine neue Zeile in hinzufügen.
  • In der neuen Zeile auf „Add panel to empty row“
  • Panel type: „terms“
  • Alle Felder so lassen, wie sie sind, nur die folgenden ändern: title: „Programme“, field: „program“, style: „pie“

 

Thomas Widhalm
Thomas Widhalm
Manager Operations

Pronomina: er/ihm. Anrede: "Hey, Du" oder wenn's ganz förmlich sein muss "Herr". Thomas war Systemadministrator an einer österreichischen Universität und da besonders für Linux und Unix zuständig. Seit 2013 ist er bei der NETWAYS. Zuerst als Consultant, jetzt als Leiter vom Operations Team der NETWAYS Professional Services, das unter anderem zuständig ist für Support und Betriebsunterstützung. Nebenbei hat er sich noch auf alles mögliche rund um den Elastic Stack spezialisiert, schreibt und hält Schulungen und macht auch noch das eine oder andere Consulting zum Thema. Privat begeistert er sich für Outdoorausrüstung und Tarnmuster, was ihm schon mal schiefe Blicke einbringt...

OSBConf 2014 – Ein Rückblick

Trotz der gelungenen Abendveranstaltung fanden sich die Teilnehmer der Open Source Backup Conference in Köln früh am Morgen wieder ein, um an den Vorträgen teilzuhaben.
Nachdem am Vortag jeder die Gelegenheit hatte, sich durch den Bareos Introduction Workshop über Bareos informieren zu lassen oder (entsprechendes Vorwissen vorausgesetzt) im Hacking Bareos Workshop tiefer in die Marterie einzutauchen, startete Philipp Storz von der Bareos GmbH & Co KG die Vorträge mit einem Überblick über Bareos mit Details zur gerade eben veröffentlichten Version 14.2.1 Beta und deren neuen Features. Die reichen von so kleinen aber wichtigen Änderungen wie der Möglichkeit, Warnungen über das Tray Icon auf Windows Hosts anzuzeigen, über eine Reihe neuer unterstützter Betriebssystemversionen bis zu der Enthüllung, dass nun alle Bareos daemons auch auf Windows ausgeführt werden können. Des weiteren werden jetzt auch diverse Cloudstorages als Ziel für Backups unterstützt. Für bestehende und angehende User enthielt der Vortrag auch Informationen über den Einfluss von blocksize und filesize auf die Schreibgeschwindkeit beim Sichern auf Bänder.


Nach der obligatorischen Fragerunde wurde das Mikrofon an Dave Simons übergeben, der eine Einführung in Puppet gab und dabei besonders auf die Konfiguration von Bacula und Bareos Backup Clients einging. So können exported resources genutzt werden, um Informationen der zu sichernden Systeme in die zentrale Backup Konfiguration zu übernehmen. Die Slides zum Vortrag gibt es schon vorab auf Slideshare, mehr zu Puppet u.a. bei uns.
Nachdem sich Redner und Hörer in der Kaffeepause stärken konnten, gab es einen Doppelvortrag von Jan Behrend und Dr. Stefan Vollmar von zwei Max Planck Instituten über die Herausforderungen für ein Backup im wissenschaftlichen Umfeld. Als Herausforderungen wurden hier besonders die grossen Datenmengen, der besondere Wert der Daten und die durchaus ausgefallenen Anforderungen der User herausgehoben. Die grossen Datenmengen zwingen bei solchen Installationen dazu, mit virtual full backups zu arbeiten, einer Technologie, die aus einem full backup und den Sicherungen, die seit seiner Erstellung ein full backup zusammensetzen, das dem aktuellen Stand entspricht, aber völlig ohne Kontakt mit dem zu sichernden Client auskommt. Ausserdem wurde ein Weg vorgestellt, wie Hochverfügbarkeitscluster konsistent gesichert werden können. Dabei werden für 2 Knoten 3 Clients in Bareos angelegt, je einer pro Knoten und einer für den hochverfügbaren Teil, der über die virtuelle IP Adresse des Clusters gesichert wird. Wenn die Verwendung eines HFS wie Grau OpenArchive nicht dem entspricht, was sich die User erhoffen, die Datenmengen aber ein HFS verlangen, wurde in diesem Vortrag ein Weg vorgeschlagen, mit dem Backups im HFS abgelegt werden, anstatt alle Daten. Besonders ungewöhnlich war hier die Verwendung eines eigenen Netzwerkes, das nur für die Dauer eines Backups erstellt und nach Abschluss des Backups wieder deaktiviert wird.
Bevor die Mittagspause eingeläutet wurde, stellte Daniel Holtkamp noch seine Erfahrungen mit der Migration von Bacula zu Bareos vor, wobei er besonderen Wert darauf legte, dass die Bacula Backups weiterhin verfügbar sind. Gesondert hervorzuheben ist hier, dass für Wiederherstellung der Bacula Sicherungen kein Bacula mehr benötigt wird, sondern Bareos mit der bisherigen Bacula Konfiguration und Datenbank gestartet wird. Da die Migration auch für eine Bereinigung der Konfiguration benutzt wurde, finden sich in dem Vortrag einige schöne Beispiele, wie man die Bareos Konfiguration übersichtlicher und leichter handhabbar machen kann. Dabei wurde auch viel Gebrauch davon gemacht, dass Bareos statt Pfadangaben oft auch den Output von Scripts, SQL Queries oder Shellcommands verwenden kann, die Bareos selbst bei Bedarf ausführt.
Nach einem hervorragenden Mittagsbuffet gab Martin Loschwitz eine ausführliche Vorstellung von Ceph, das von Haus aus in sich redundant und mit Selbstheilungsfunktionen ausgestattet ist, weshalb in einigen Setups Snapshots als Backup ausreichend sein sollten. Dabei wurden neben weniger bekannten aber sehr vielversprechenden Features wie Qemu-rdp, mit dem KVM virtuelle Festplatten von Guests direkt in Ceph ausbringen kann, auch noch unbekanntere aber deshalb nicht unbedingt weniger vielversprechende Features wie php bindings, mit denen Webapplikationen Daten wie Bilder direkt in Ceph ablegen können, vorgestellt.
Thematisch passend handelte der nächste Vortrag vom Backup in und von einer Cloud, gehalten von Marco van Wieringen. Hier gab es einen Überblick über verschiedene verteilte Dateisysteme wie GlusterFS und eben Ceph. Dabei wurden besonders Unterschiede und die Wege, wie man als Applikation Daten in diese Services schreiben oder deren Inhalt sichern kann, hervorgehoben und jeweils eine kurze Übersicht über den Entwicklungsstand der Anbindung des jeweiligen Service an Bareos gegeben.

Da der nächste Vortrag leider ausfallen musste, sprangen dankenswerterweise Frank Bergkemper und Daniel Neuberger mit einer schnellen Vorschau auf das kommende Bareos Webinterface ein. Selbst Vorschaupakete sind in den contrib Repositories von Bareos verfügbar und müssen nur mehr getestet werden. Feedback sehr willkommen! Das Webinterface ist schon weit gediehen und wird nicht nur alle in der bconsole verfügbaren Daten anzeigen, sondern auch Daten ableiten, wie eine Übersicht, welche Medien in wie vielen Tagen auslaufen werden. Auch Graphen und andere Daten für einfaches Reporting sind verfügbar. Das auf dem Zend Framework basierende Interface soll Administratoren von spezialisierten Clients für einzelne Betriebssysteme loslösen und die Bedienung von Bareos mit jedem Gerät ermöglichen, das einen Webbrowser hat.
Zum Abschluss zeigte Ralf Dannert noch ReaR, mit dem Medien erstellt werden können, um in Kombination mit einem Backuptool wie Bareos, Bacula oder sogar rsnapshot ein bare metal disaster recovery von Linux Servern zu ermöglichen. Dabei müssen die Medien für jeden Host einzeln erstellt werden, müssen aber nicht ein ISO oder USB Stick sein, sondern können auch in eine PXE Boot Infrastruktur eingebunden werden. Für SuSE User ist dabei besonders interessant, dass es einige Erweiterungen gibt, mit denen insbesondere OpenSuSE und SLES Hosts so wieder hergestellt oder vom physischen zum virtuellen System umgebaut werden können.
Damit war es wieder eine abwechslungsreiche und interessante OSBConf, bei der sich wohl jeder, vom alten Hasen bis zum Frischling in Sachen Open Source Backup etwas Neues mitnehmen konnte. Zumindest war die Beteiligung an den Fragerunden geradezu ungewöhnlich groß. Wer sich schon auf die nächste OSBConf einstellen möchte, kann sich schon mal das Datum 29.&30. September 2015 vormerken und eine Suche nach dem Hashtag #OSBConf speichern. Die Mitschnitte und Folien der Vorträge werden online zur Verfügung gestellt, wir werden hier über das Blog Bescheid geben, wann und wo das der Fall sein wird.
OSBC_Facebook Header_DANKE
 

Thomas Widhalm
Thomas Widhalm
Manager Operations

Pronomina: er/ihm. Anrede: "Hey, Du" oder wenn's ganz förmlich sein muss "Herr". Thomas war Systemadministrator an einer österreichischen Universität und da besonders für Linux und Unix zuständig. Seit 2013 ist er bei der NETWAYS. Zuerst als Consultant, jetzt als Leiter vom Operations Team der NETWAYS Professional Services, das unter anderem zuständig ist für Support und Betriebsunterstützung. Nebenbei hat er sich noch auf alles mögliche rund um den Elastic Stack spezialisiert, schreibt und hält Schulungen und macht auch noch das eine oder andere Consulting zum Thema. Privat begeistert er sich für Outdoorausrüstung und Tarnmuster, was ihm schon mal schiefe Blicke einbringt...

Flugreisen mit Multitools? Ja, geht. Aber.

Ich gehöre zu den Leuten, die gerne ein Multitool mit sich herum schleppen. Auf die Frage „Wozu brauchst Du das Ding denn?“ kann ich nur antworten, dass sich immer mehr Anwendungsmöglichkeiten ergeben, je öfter man es mit hat.
Erst denkt man vielleicht nicht dran, wenn man es schon mal gut brauchen könnte, aber mit der Zeit möchte man es nicht mehr missen. Solange man sich nicht aus Zentraleuropa hinaus bewegt, wird es zugegebenermassen wahrscheinlich wenig Situationen geben, in denen man wirklich darauf angewiesen ist. Dennoch war ich schon oft frohID-10037800 drum, mal eine Schraube anziehen, Zeug, das sich in den Rädern meines Koffers verfangen hat, mit einer Zange entfernen, oder einfach mal einen eingerissenen Nagel abfeilen zu können (ja, auch Männern passiert sowas 🙂 ) . Natürlich gibt es noch viele weitere Anwendungen, aber die fallen einem natürlich nie dann ein, wenn man sie gerade in einen Blogartikel schreiben will. Einen Klassiker aber hab‘ ich noch: Nicht nur Kabel werden gerne mit Kabelbindern verbunden, auch Kleinigkeiten, die man unterwegs kauft, werden oft damit an Kartonrücken gehalten. Sowas zu öffnen geht gut mit einem Schraubenzieher oder einer Zange. Und natürlich lassen sich Blisterverpackungen auch einfacher mit einer kleinen Schere öffnen, als ohne.
Im Leben eines Consultants stellt sich aber immer die Frage, was man mitnimmt, wenn man auf Reisen geht, besonders im Flugzeug. Ich hab‘ einige Zeit gesucht, aber wenige Multitools gefunden, die einem gewissen Qualitätsanspruch genügen und dennoch kein Problem beim Security Check am Flughafen aufwerfen. Zwei Lösungen habe ich gefunden, die einem ausgewachsenen Multitool am nächsten kommen: Den Leatherman Style PS (den ich auch persönlich mit habe und der speziell für diesen Zweck entwickelt wurde) oder eine Swisscard, aus der man vor der Abreise die Klinge entfernt.
Beide Lösungen sind halt leider auch abseits der fehlenden Klinge mehr als „Backup“ Lösung brauchbar und sind einfach zu klein dimensioniert um ein vollwertiges Tool zu ersetzen. In Foren wird teilweise empfohlen, ein „richtiges“ Tool mit zu nehmen und davor die Klinge abzuschrauben. Allerdings sollten dann auch alle anderen Werkzeuge geprüft werden, ob sie nicht auch ein Problem darstellen könnten. Feile, Schere, Säge, etc. sind auch an Bord von Flugzeugen nicht gern gesehen.
Es heisst zwar immer wieder, dass irgendwann wieder sehr kleine Klingen, wie eben in der SwissCard erlaubt werden sollen, aber ob das passiert und für welche Flüge das gilt (weil wir ja nicht nur innerhalb Deutschlands reisen) ist zumindest für mich persönlich zu unsicher, um unnötige Probleme zu riskieren.
Abschliessend möchte ich natürlich noch erwähnen, dass es sich bei diesem Artikel um meine persönliche Meinung und Erfahrung handelt. Ich bin weder Jurist noch sonst irgendwie befugt, eine Auskunft zu dem Thema zu geben, weshalb sich bitte vor Antritt einer Reise jeder selber informieren möge. Ich jedenfalls wurde schon gebeten, meinen Style PS aus der Tasche zu nehmen, damit er nachkontrolliert werden kann und er wurde nicht beanstandet.

Thomas Widhalm
Thomas Widhalm
Manager Operations

Pronomina: er/ihm. Anrede: "Hey, Du" oder wenn's ganz förmlich sein muss "Herr". Thomas war Systemadministrator an einer österreichischen Universität und da besonders für Linux und Unix zuständig. Seit 2013 ist er bei der NETWAYS. Zuerst als Consultant, jetzt als Leiter vom Operations Team der NETWAYS Professional Services, das unter anderem zuständig ist für Support und Betriebsunterstützung. Nebenbei hat er sich noch auf alles mögliche rund um den Elastic Stack spezialisiert, schreibt und hält Schulungen und macht auch noch das eine oder andere Consulting zum Thema. Privat begeistert er sich für Outdoorausrüstung und Tarnmuster, was ihm schon mal schiefe Blicke einbringt...

Eine weitere logstash Schulung ist abgeschlossen

Schulungen
Letzte Woche hat wieder eine logstash Schulung stattgefunden. Es freut mich sehr, dass die Schulung so grossen Anklang findet und neben unseren regulären Schulungsterminen auch Inhouse Termine bei Kunden im geschlossenen Rahmen gebucht werden. Das bedeutet bei Tools wie logstash und dem Rest des ELK Stacks (Elasticsearch – logstash – Kibana) aber auch ein ständiges Überarbeiten der Unterlagen. Die Entwicklung bei den in den Schulungen durchgenommenen Komponenten geht so rasch voran, dass bisher keine zwei Schulungen die selben Unterlagen hatten.
Wurde die erste Schulung noch mit logstash 1.3.3 durchgeführt, waren die letzten Unterlagen schon bei 1.4.0 (1.4.1 war dann doch zu kurzfristig released worden, um noch mit aufgenommen zu werden.) Genauso wurde Elasticsearch ab Version 1.0 behandelt. In der Zwischenzeit sind die Unterlagen schon wieder auf einem neueren Stand und dabei hat die letzte Schulung erst vor einer Woche stattgefunden! Elasticsearch wird in der nächsten Schulung mindestens ab Version 1.2 vertreten sein.
Dass dabei nicht einfach nur Downloadlinks ausgetauscht werden können erkennt man, sobald man die Changelogs der einzelnen Komponenten durchliest. So hat sich nicht nur die Installation von logstash mit Version 1.4 ziemlich geändert, sondern auch die Pakete sind brauchbarer geworden und werden nun für die Schulung verwendet. Elasticsearch braucht nun auch kein Plugin wie knapsack mehr, um es backupen zu können, sondern kann das ganz alleine. Dabei enthalten die Unterlagen aber auch noch die alten Vorgehensweisen für den Fall, dass jemand bereits den ELK Stack in einer alten Version einsetzt. Bei dieser rasanten Entwicklung werden alte Versionen aber nicht allzu lange weitergeführt werden, sonst bestehen die Unterlagen bald nur mehr aus Sonderfällen für ältere Software. logstash_01
Erweitert wurden die Unterlagen unter anderem um eine Anbindung an Graphite und ein Konzept, mit dem besonders zeitintensive Filter wie DNS Abfragen ausgelagert werden können.
Aber nicht nur Updates und neue Ideen fliessen in die Unterlagen ein. Auch das Feedback der bisherigen Teilnehmer hat einen Einfluss auf die weitere Entwicklung. So waren diesmal mehr Beispieldaten vorhanden, falls die Teilnehmer allzu rasch mit dem Stoff weiterkommen. Dass die nicht genutzt wurden, lag aber nicht daran, dass die Teilnehmer langsam gewesen wären, sondern weil sie selbst ganz konkrete Vorstellung für Beispiele hatten, die wir besprechen konnten. Ebenfalls dem Feedback ist es zu verdanken, dass es demnächst mehr zum Thema Monitoring des ELK Stacks geben wird. Sowohl in den Unterlagen, als auch hier im Blog.
Die neuen Unterlagen benötigen sogar deutlich weniger Toner beim Druck, da Screenshots durch Varianten mit einem hellen Kibana Farbschema ersetzt wurden.
Alle Änderungen hier aufzuzählen würde wohl wenig Sinn machen, aber hoffentlich konnte ich vermitteln, dass es voran geht mit den logstash Schulungen und dass wir versuchen, den Teilnehmern wirklich aktuelle und damit brauchbare Information zu bieten.
Wer also noch keine Schulung gebucht hat, sollte das jetzt bald machen und wer schon eine hatte, kann gerne nochmal teilnehmen und sich die Unterschiede ansehen. 😉

Thomas Widhalm
Thomas Widhalm
Manager Operations

Pronomina: er/ihm. Anrede: "Hey, Du" oder wenn's ganz förmlich sein muss "Herr". Thomas war Systemadministrator an einer österreichischen Universität und da besonders für Linux und Unix zuständig. Seit 2013 ist er bei der NETWAYS. Zuerst als Consultant, jetzt als Leiter vom Operations Team der NETWAYS Professional Services, das unter anderem zuständig ist für Support und Betriebsunterstützung. Nebenbei hat er sich noch auf alles mögliche rund um den Elastic Stack spezialisiert, schreibt und hält Schulungen und macht auch noch das eine oder andere Consulting zum Thema. Privat begeistert er sich für Outdoorausrüstung und Tarnmuster, was ihm schon mal schiefe Blicke einbringt...

GnuPG / GPG Best Practices

Dieser Artikel richtet sich an User, die bereits etwas Erfahrung mit GnuPG / GPG / OpenPGP haben. GnuPG liefert bereits sehr brauchbare Standardeinstellungen mit und es kann ohne Probleme ohne grossen Zusatzaufwand verwendet werden. Wer aber etwas tiefer eintauchen, höhere Sicherheit und mehr Komfort möchte, findet im Folgenden einige Vorschläge.
Die Konfiguration
Normalerweise konfiguriert man GnuPG durch ein Konfigfile, meist ~/.gnupg/gpg.conf. Einige graphische Frontends sollten einige dieser Optionen auch anbieten und sie gegebenenfalls in eine Konfigurationsdatei schreiben.
Bei mir sieht das so aus:

default-key 91B8ECDC6265BAE6
default-recipient-self
keyserver hkp://keys.gnupg.net
keyserver-options auto-key-retrieve
personal-digest-preferences SHA512 SHA384 SHA256 SHA224
personal-cipher-preferences AES256 AES192 AES
personal-compress-preferences SHA512 SHA384 SHA256 SHA224
cert-digest-algo SHA512
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
use-agent
verify-options show-uid-validity

Nicht alle Optionen sind für die Verwendung des Schlüssels für sichere E-Mail wichtig, sondern werden mehr beim Verschlüsseln und Signieren von Dateien auf der Kommandozeile verwendet. Die Optionen können auch beim Aufruf von gpg auf der Kommandozeile angegeben werde. Eine Liste findet sich auf der GnuPG Homepage.
Der default-key gibt einfach an, welcher Schlüssel als eigener Schlüssel für Signaturen oder Verschlüsselung an sich selbst verwendet wird. Dabei wird eine längere Fassung der ID verwendet, da es bei der 8 stelligen Kurzfassung, die man oft sieht, zu leicht zu Kollisionen kommen kann. Wer meinen Schlüssel betrachtet, wird sehen, dass ich auch noch nicht alle dieser Ratschläge mit diesem Key umgesetzt habe. Ein neuer Schlüssel ist generiert, hat aber noch zu wenig Signaturen, um ihn sinnvoll zu verwenden. Es ist also nur mehr eine Frage der Zeit, bis ich mich an meine eigenen Empfehlungen halte. 🙂
Die Option default-recipient-self gibt an, dass man beim Verschlüsseln auf der Kommandozeile keinen Empfänger angeben muss, sondern immer mit dem eigenen Key verschlüsselt wird, wenn keine ID angegeben wird.
Mit keyserver wird der Standardkeyserver angegeben, der genutzt wird, wenn kein anderer Schlüsselserver auf der Kommandozeile genannt wird. Dabei wird immer wieder davor gewarnt, pgp.mit.edu als Keyserver zu verwenden, da dieser berüchtigt dafür ist, Daten nicht sauber mit anderen Servern zu synchronisieren. Welcher andere Keyserver genannt wird, ist meist nebensächlich, da sich eigentlich alle Keyserver miteinander abgleichen sollen.
Durch keyserver-options auto-key-retrieve werden Schlüssel, die im Keyring fehlen, aber zum Verifizieren von Signaturen benötigt werden, automatisch geholt.
Die personal-digest-preferences, personal-cipher-preferences und personal-compress-preferences Listen geben an, welche dieser Algorithmen man bevorzugt, in absteigender Reihenfolge. Beim Versand einer Nachricht wird damit jeweils von links an nach dem ersten Algorithmus gesucht, den alle Empfänger unterstützen. So ist sichergestellt, dass möglichst starke Standards verwendet werden, aber auch an ältere oder suboptimal konfigurierte Clients versandt werden kann. Gibt man z.B. keinen Digest (Hashing) Algorithmus aus der SHA-2 Familie an, nutzt GnuPG Standardmässig SHA-1 für Hashing, was nicht mehr empfohlen werden kann. Es sollte unbedingt ein Algorithmus aus der SHA-2 Familie vor SHA-1 und MD5 in der Liste stehen. Welche Algorithmen in der eigenen Installation zur Verfügung stehen, sieht man übrigens bei einem Aufruf von gpg --version. Bei diesen Optionen eine Liste anzugeben, verhindert den Versand nicht, da immer ein Algorithmus gewählt wird, den alle Empfänger verstehen. Das bedeutet aber auch, dass unter Umständen dennoch unsichere Algorithmen verwendet werden.
Die Option cert-digest-algo ist etwas tückisch. Sie gibt an, welcher Hash Algorithmus beim Signieren von fremden Schlüsseln verwendet wird. Wird der nicht von anderen Usern unterstützt, können Signaturen nicht überprüft werden. Gilt das auch für die Selbstsignatur eines Schlüssels, kann er gar nicht vom Kommunikationspartner verwendet werden. Standard ist eigentlich MD5 für PGP2 Schlüssel und SHA-1 für alle anderen Schlüssel. Da diese aber nicht mehr verwendet werden sollten, steht man vor der Wahl: Unsicherer Algorithmus oder unter Umständen Inkompatibilität zu anderen Usern. Ich habe mich bei neuen Schlüsseln für die mögliche Inkompatibilität entschieden. Vielleicht kann ich damit ja auch den einen oder anderen User zum Upgrade auf eine sichere Version bewegen. Da Signaturen normalerweise nur einmal erstellt werden, sollte man diese Option unbedingt setzen, bevor man einen neuen Schlüssel erstellt. Aus den genannten Gründen führen auch manche Seiten diese Option als „esoteric option“ auf. 🙂
Mit default-preference-list gibt man an, welche Algorithmen man selbst unterstützen möchte. Diese Liste wird beim Erstellen eines neuen Schlüssels verwendet, sie sollte also unbedingt gesetzt werden, bevor man einen Schlüssel erstellt. Diese Liste wird auch im Schlüssel verankert und daraus und aus den oben genannten personal-...-preferences wird dann die beste bevorzugte Version ausgesucht, die von allen Beteiligten unterstützt wird. Diese Einstellung kann auch nachträglich am Schlüssel geändert werden. Allerdings muss dann der Absender wieder den aktuellen Schlüssel haben, um die aktuelle Liste zu verwenden. Also auch gleich lieber vor Erstellung eines neuen Schlüssels richtig setzen.
use-agent gibt lediglich an, dass der GnuPG Agent verwendet wird, sofern verfügbar. Damit wird eine eingegebene Passphrase für einige Zeit gespeichert und man muss sie nicht gleich erneut eingeben.
Zu guter letzt sorgt verify-options show-uid-validity dafür, dass beim Anzeigen von UIDs auch gleich deren Gültigkeit angezeigt wird.
Beim Erstellen neuer Schlüssel zu beachten
Wie erwähnt, macht es Sinn, die Optionen in der Konfigurationsdatei zu setzen, bevor man einen Schlüssel erstellt.
Mit gpg --gen-key wird die Erstellung eines neuen Schlüssels gestartet. Ausnahmsweise sei es auch erlaubt, eine GUI dafür zu verwenden. 😉 Dieser Artikel richtet sich an Fortgeschrittene, weshalb auf die Erstellung an sich nicht weiter eingegangen wird.
Als Schlüsselpaar wird bei aktuelleren GnuPG Installationen bereits RSA/RSA vorgeschlagen, was auch übernommen werden sollte.
Dann kommt das leidige Thema der Schlüssellänge. Hier gilt fast noch mehr, als bei den Algorithmen, dass davon die Kompatibilität zu Kommunikationspartnern abhängt. Die meisten sollten inzwischen 4096bit unterstützen. Weniger sollte man alleine schon deshalb nicht mehr wählen, weil man den Schlüssel ja einige Zeit behalten möchte und 4096bit noch länger aktuell bleiben wird, als kürzere Schlüssel. Längere Schlüssel werden noch immer von zu wenig Clients unterstützt. Wobei man bedenken sollte, dass viele Clients zwar keine Erstellung von Schlüsseln über einer bestimmten Länge anbieten, aber sehr wohl mit solchen umgehen können. Es gibt noch weitere Gründe, warum es nicht unbedingt sinnvoll ist, längere Schlüssel als 4096bit zu erstellen, aber dazu vielleicht später mehr.
Es gibt einige Artikel, die darauf eingehen, ob es Sinn macht, ein Kommentar zum Schlüssel hinzuzufügen. Wobei die meisten entweder sehr dafür oder sehr dagegen sind. Ich selbst füge nur mehr Kommentare hinzu, wenn es für mich Sinn macht. Ein Beispiel wäre „package signing key“ für Schlüssel, über die ich eigentlich nicht kommunizieren möchte. Kommentare, die nur Informationen enthalten, die man auch aus der zu der uid gehörigen E-Mail Adresse entnehmen kann, kann man getrost weglassen.
Wichtig ist, ein Ablaufdatum festzulegen. Einige Seiten empfehlen, es nicht weiter als 5 Jahre in die Zukunft zu setzen. Es kann jederzeit, auch nach Ablauf des Schlüssels, verändert werden. Nach einer Änderung sollte der Schlüssel wieder auf einen Keyserver hochgeladen werden. Auch wenn man noch so darauf achtet, kann es passieren, dass man den privaten Teil des Schlüssels verliert oder die Passphrase vergisst. Dann sollte der Schlüssel nicht ewig über die Keyserver geistern, sondern irgendwann entfernt werden. Dabei geht es weniger darum, dass Ressourcen gespart werden, sondern mehr darum, dass ein Kommunikationspartner auch wirklich nur Schlüssel von den Keyservern holt, die auch noch zum Entschlüsseln genutzt werden können. Ähnliches gilt, wenn der Besitzer des Schlüssels ihn aus anderen Gründen nicht mehr nutzen kann (z.B. weil er verstorben ist)
Nach dem Erstellen des Schlüssels
Als erstes sollte ein Revocation Certificate erstellt werden. gpg --output revoke.asc --gen-revoke [keyid] Dieses sollte an einem sicheren Platz (USB Stick in einem Tresor, Truecrypt Container, oder vergleichbares) abgespeichert und evtl. sogar ausgedruckt (dazu beim Erstellen die Option --armor verwenden, um das Zertifikat als ASCII zu erhalten) werden, um sie im schlimmsten Fall abzutippen. Mit diesem Zertifikat kann der Schlüssel ungültig gemacht werden, ohne, dass man den privaten Teil oder die Passphrase braucht. Das ist einerseits gut, wenn man einen oder beide dieser Teile verloren hat, aber andererseits sehr gefährlich, weil jeder damit den Schlüssel ungültig machen kann. Um es zu verwenden, importiert man es einfach in seinen Schlüsselbund und lädt den Schlüssel auf einen Keyserver hoch. Ab da scheint er bei jedem als ungültig auf, der die aktuelle Version des Schlüssels hat.
Dann können weitere IDs zu dem Schlüssel hinzugefügt werden. Eine für jede E-Mail Adresse, mit der man den Schlüssel verwenden will. Einige Anleitungen empfehlen auch, eine ID ohne E-Mail Adresse hinzuzufügen, da sich der Name seltener ändert als E-Mail Adressen. Ich bin ein Freund davon, sich zumindest eine Adresse mit einer eigenen Domain zuzulegen, die sich möglichst nie ändert, was diesen Grund wieder relativiert. Ausserdem signieren manche automatisierte Tools nur „aktive“ IDs, also solche, von deren E-Mail Adressen man auch Nachrichten empfangen kann, was hier ebenfalls nicht funktionieren würde. Es spricht aber auch nicht wirklich etwas gegen das Erstellen einer solchen ID.
Eine Photo ID finde ich persönlich sinnvoll, vor allem wenn man Schlüssel nur bei persönlichem Kontakt signiert. Legt man sich selbst eine Signatur Policy zurecht, die auch Signaturen ohne persönliches Treffen erlauben, kann es sinnvoll sein, auf die Signatur einer Photo ID zu verzichten. Man kann ja auch einzelne IDs signieren.
Mit gpg --send-key [keyid] schickt man den Schlüssel dann an den konfigurierten Keyserver. An sich reicht es, ihn an einen Server zu senden, da sich die Keyserver untereinander synchronisieren. In der Praxis funktioniert das nicht immer reibungslos, aber im Allgemeinen findet jeder Schlüssel früher oder später den Weg zu den einzelnen Servern.
Regelmässige Wartung
Da, anders als bei S/MIME, aktualisierte Schlüssel nicht beim Versand von E-Mails übertragen werden, sondern immer wieder vom Keyserver geladen werden müssen, ist es sehr wichtig, die Schlüssel regelmässig von einem Keyserver zu aktualisieren. Dazu habe ich folgenden Eintrag in meiner crontab: 40 5 * * 4 /usr/bin/gpg --refresh-keys --keyserver-options no-honor-keyserver-url ; /usr/bin/gpg --refresh-keys --keyserver-options honor-keyserver-url . Das funktioniert, weil ich das Gerät regelmässig für Wartungsaufgaben über Nacht laufen lasse. Wer das anders hält, muss eben die Zeit des cronjobs anpassen. Dabei führe ich --refresh-keys zwei mal aus. Einmal hole ich die Schlüssel von dem Keyserver, den ich mir als Standard konfiguriert habe und einmal von dem Keyserver, den die Schlüsselbesitzer evtl. in ihren Schlüsseln hinterlegt haben. Damit respektiere ich einerseits, falls jemand seinen Schlüssel an einem bestimmten Server pflegt, der sich unter Umständen gar nicht mit anderen Schlüsselservern synchronisiert und bin andererseits dafür gewappnet, dass jemand evtl. einen Server angegeben hat, der gar nicht mehr existiert. Wer keinen hkps fähigen Keyserver verwendet, überträgt damit regelmässig eine Liste der Schlüssel im eigenen Keyring und damit wahrscheinlich eine Liste der regelmässigen Kommunikationspartner. Es gibt Tools, die helfen, das zu Verschleiern, ohne auf hkps umsteigen zu müssen, da aber keine weitere Information enthalten ist, hebe ich Anleitungen dafür für etwaige spätere Artikel auf.
Mit dem Befehl gpg --update-trustdb kann man die Trust-DB ausfüllen. Damit gibt man für alle Schlüssel, für die man das noch nicht getan hat, an, wie sehr man dem Besitzer zutraut, Schlüssel anderer Personen nur nach ordentlicher Überprüfung der Identität zu vertrauen. Diese Information hat durchaus mit der persönlichen Meinung über die Besitzer zu tun und sollte deshalb sehr vertraulich behandelt werden. Sie wird auch nicht mit einem Schlüssel exportiert. Zu beachten ist, dass dies nichts damit zu tun hat, wie sehr man dem Besitzer eines Schlüssels glaubt, tatsächlich der zu sein, der er zu sein vorgibt. Diesen Befehl sollte man regelmässig ausführen, da diese Einstufung bei jedem neu importierten Schlüssel nötig ist. Das muss interaktiv passieren, deshalb macht es keinen Sinn, einen Cronjob dafür zu planen.
Zum Backup der geheimen Schlüssel sollte man ab und zu gpg --export-secret-keys --armor ausführen und den Output an einem sicheren Ort speichern. Zwar ist der Schlüssel mit der Passphrase geschützt, aber nur darauf sollte man sich auf keinen Fall verlassen. Die öffentlichen Schlüssel kann man zwar von Schlüsselservern neu holen, aber wenn man schon mal dabei ist: gpg --export --armor.
Es ist auch sinnvoll, immer wieder zu kontrollieren, ob das Ablaufdatum des Schlüssels nicht kurz bevor steht. Da es einige Zeit braucht, bis alle Kommunikationspartner einen aktualisierten Schlüssel holen, sollte man früh genug damit beginnen, das Ablaufdatum wieder nach hinten zu verschieben und den öffentlichen Schlüssel über die Keyserver zu verteilen.
Als stolzer Schlüsselbesitzer sollte man regelmässig versandte Mails signieren. Das ist wahrscheinlich der effektivste Weg, herauszufinden, ob man nicht unter seinen regelmässigen Kommunikationspartnern auch GnuPG Anwender hat. Ausserdem wird so oft die Rückfrage kommen, was denn „diese komischen Zeichen“ sein sollen. Ein sehr praktischer Weg, um ein Gespräch über sichere E-Mailkommunikation zu beginnen. 🙂
Was man sonst noch tun kann
Natürlich sollte man über diesen Vorschlägen nicht vergessen, den Schlüssel einfach auch mal zu verwenden. Zum Signieren und Verschlüsseln von E-Mails, Signieren von Softwarepaketen, Verschlüsseln von Dateien, die man sicher aufbewahren will und einiges mehr.
Die wichtigste Regel im Umgang mit E-Mail Sicherheit ist meiner Meinung die gleiche, die ich für Wiederbelebung in der Ersten Hilfe gelernt habe: Hauptsache, man tut’s. Auch wenn man sich nicht ans Handbuch hält und vielleicht nicht alles perfekt ausführt, ist es immer noch viel, viel besser, als nichts zu tun. Bei beidem gilt jedoch auch, dass man immer nur Chancen verschieben kann. 100% Erfolgschance gibt es bei beidem leider nicht, auch wenn man noch so gut vorbereitet ist. Je besser man sich vorbereitet, umso höher sind aber die Chancen des Erfolges. Sicher ist nur eines: Macht man nichts, sieht’s düster aus.
Für alle, die sich dennoch gerne vorbereiten wollen, soll dieser Artikel einen Anhaltspunkt für den E-Mail Teil des Vergleichs geben, für den Rest gibt’s hier, hier und bei vielen anderen Stellen, die ich leider hier aus Platzgründen nicht mehr nennen kann, Angebote.
Für die Nerds und Geeks unter den Lesern findet sich viel Spass mit Graphen und Statistiken zu Schlüsseln auf
Natürlich gibt es noch viel mehr, was man mit GnuPG und GPG Schlüsseln machen kann, was sich im täglichen Leben als praktisch und/oder sicher erweist, aber als Start sollte dieser Artikel einige Anhaltspunkte geben. Sollte Bedarf bestehen, können gerne Einführungsanleitungen folgen. Eine wunderbare Anwendung des Kommentarfeldes, solchen Bedarf anzumelden. 🙂
Noch eine Anmerkung: Sicherheitstechnologien sind einem ständigen Wandel unterworfen. Es lohnt sich also immer, mal kurz nach dem aktuellen Stand der Technik zu suchen, um zu vergleichen, ob die Informationen nicht schon wieder überholt sind. Bei Kommunikationstechnologien ist das doppelt wichtig, da sich Sender und Empfänger auf einen Satz an Technologien einigen müssen. Dafür wird  oft eine gewichtete Liste konfiguriert, welche Technologien unterstützt werden und welche bevorzugt werden. Das sollte nicht zu restriktiv gehalten werden, sonst kann es schon zu Problemen beim Versand von E-Mails von sehr konservativen Betriebssystemen an Bleeding-Edge OS und umgekehrt kommen. Beispiele solcher Listen finden sich oben in dem Beispiel der Konfigurationsdatei.
Für weitere Vorschläge anderer Best Practices bietet sich ebenfalls die Kommentarfunktion an.
Ein paar weiterführende Links zum Thema:

Thomas Widhalm
Thomas Widhalm
Manager Operations

Pronomina: er/ihm. Anrede: "Hey, Du" oder wenn's ganz förmlich sein muss "Herr". Thomas war Systemadministrator an einer österreichischen Universität und da besonders für Linux und Unix zuständig. Seit 2013 ist er bei der NETWAYS. Zuerst als Consultant, jetzt als Leiter vom Operations Team der NETWAYS Professional Services, das unter anderem zuständig ist für Support und Betriebsunterstützung. Nebenbei hat er sich noch auf alles mögliche rund um den Elastic Stack spezialisiert, schreibt und hält Schulungen und macht auch noch das eine oder andere Consulting zum Thema. Privat begeistert er sich für Outdoorausrüstung und Tarnmuster, was ihm schon mal schiefe Blicke einbringt...