 So, ihr seid alle hier, weil ihr mehr über SSH und Netzwerk Hardware Monitoring erfahren wollt. Das ist sehr schön. Wir freuen uns sehr. Und ich freue mich auch sehr, dass Heiko Beuches hier ist. Er ist Fachinformatiker für System Integration an der Uni Düsseldorf und freier Journalist. Das ist eine spannende Kombination, finde ich. Und außerdem im Frostcon-Team. Und er lädt euch alle herzlich ein, auch zur Frostcon zu kommen dieses Jahr im August. Und jetzt fängt er an mit seinem Vortrag. Danke schön. Ja, hallo. Wie der Herr hat mich schon so schön vorgestellt hat, ich bin Heiko Beuches und ich würde euch jetzt ein bisschen was erzählen über SNMP, Python, Paramico und Elk und was man da machen kann, wenn das eigentliche Netzwerk Monitoring nicht so will, wie man selber möchte. Ja, das allgemeine, wer ich bin, wurde ja schon schön erklärt. Dann werde ich kurz mal über das allgemeine Umfeld sprechen, wie Enterprise-WLAN aussieht. Tatsächlich so ungefähr auch wie das WLAN hier auf dem Kongress. Und ganz kurz auf die SNMP-Grundlagen eingehen, was benutzt wurde, an Hard- und Software, ein bisschen zur Umsetzung und ja, über mich, ab der er gehört, braucht man nicht mehr viel zu sagen. Ja, mein Arbeitgeber, über dem ich das Projekt gemacht habe, ist die Heinrich-Hein-Universität in Düsseldorf. Ungefähr 30.000 Studierende, 10.000 WLAN-Devices im Schnitt am Tag und ein kompletter Wildwuchs an Hardware, teilweise noch Legacy HP, was 802.11 N WLAN macht, langsames WLAN und ja, insgesamt verwalten wir da jetzt momentan sogar etwas über 1000 WLAN Access Points und versorgen damit eine Fläche von 1,3 Quadratkilometern circa. Ganz kurz zu SNMP, simple Network Management Protocol, soll eigentlich die Überwachung von fast allen Netzwerkeräten ermöglichen, teilweise kann man damit auch Netzwerkeräte konfigurieren, aber SNMP hat ja, in der Rente ein paar Nachteile. Erst mal die Vorteile, es ist einfach zu konfigurieren, es ist herstellerübergreifend und die Pakete sehen sehr strukturiert aus. Wäre also schön, wenn man das nehmen kann, aber es hat, wie gesagt, Nachteile, die drei wichtigsten sind, es ist langsam, es ist fehlerbehaftet, unter anderem unser WLAN Controller, der mich zu dem Projekt gebracht hat, stürzte gerne mal ab, wenn man ihn per SNMP abfragt und es ist tatsächlich auch unsicher, bis SNMP Version 3 gab es gar keine Authentifizierung Verschlüsselung und musste nur wissen, wie die Public Group heißt und dann konnte man alles mitlesen und bei manchen Geräten sogar Einstellungen ändern, ist so ein bisschen doof. Enterprise WLAN funktioniert halt ein bisschen anders als das WLAN Zuhause, Zuhause hat man vielleicht zwei, drei Access Points, die kann man noch per Hand konfigurieren, 900 Access Points wird schwierig das per Hand zu machen, kann man versuchen, aber da ist man an Wochen lang, monatelang dran, die AP ist alle einzeln zu konfigurieren und der unser HP Wireless Controller, der HP 870, ist, bin ich mir ziemlich sicher, der schlimmste WLAN Controller, weil er bei unseren SNMP abfragen, wenn wir da vernünftiges Monitoring rausziehen wollten, ungefähr eine CPU Last von 100% hatte und dann ab und zu sich auch einfach abgeschaltet hat, wodurch dann alle Studierenden aus dem WLAN flogen, alle Mitarbeiter und das war dann so ein bisschen unglücklich, das ist der angesprochene Controller, einer von zwei, inzwischen werden die bei uns kürzlich jetzt ausgetauscht gegen exakt dieselbe Hardware, die wir auch hier auf dem Kongress verwenden, also Aruba und ja unsere drei Haupt Access Points, die neueren Modelle davon, insgesamt haben wir jetzt acht verschiedene Access Points auf dem Campus um Einsatz und dort ist halt alles ein bisschen schwierig zu managen, deswegen habe ich mir gedacht, wie kann man das automatisieren, wie kann auch die Überwachung automatisieren und bin dann irgendwann drauf gekommen, das geht doch sicher auch per SSH, ich kann ja mich auf dem Controller auch per SSH anmelden, das war so das Überwachungstool, was HP uns geliefert hat, das IMC, man sieht da oben an diesem komplett grünen Kreis, da sollten eigentlich die verschiedenen Hersteller der WLAN-Devices stehen, IMC hat sich mal wieder gedacht, braucht man nicht, alle WLAN-Geräte, die verbunden sind, sind einfach vom vendor unknown, reicht wenn man wissen, wie viele Geräte da sind, aber wenn man jetzt auch das WLAN gerade so ein bisschen optimieren will, wäre es ganz schön zu wissen, ob ich jetzt nur Apple-Geräte habe oder ob ich vielleicht noch irgendwelche Nischenhersteller supporten muss, wird da auch schon schwierig. Das andere ist Observium, das ist gerade ein bisschen sehr pixlich, theoretisch sollte man da einen Grafen sehen, der sogar sehr schön periodisch ist, wann wie viele Studenten bzw. wie viele Geräte im WLAN verbunden sind, aber exakt diese Anzeige war es dann auch, die unseren Controller ab uns zum Absturz gebracht hat, dann habe ich mir halt gedacht, baue ich mal, was mit unserem X-Dex-Blank, der Enterprise-Variante halt und Python. Ja, die Anfänge waren ein ganz einfaches Shell-Skript, ein ganz einfaches Python-Skript, was drei Befehle können, das soll mir die Mac-Adressen raussuchen, die individuellen, das soll man vom AP dann die Signalstärke, die Datenrate und zu welchem AP der jeweilige Nutzer gerade Verbundenes zeigen, damit wir im Zweifelsfall auch nachvollziehen können, wenn der Nutzer Probleme hat, wo steht er gerade, wo müssen wir nachbessern. Das Ganze ist dann mit Python gebaut, mit Paramico, das ist eine SSH-Library, der bräuchte ich dann einfach nur sagen, das ist die IP-Adresse vom WLAN-Controller, das ist der SSH-Befehl, den du ausführen sollst und dann ließ mir bitte mal den Output in der Controller gibt ein. Problem war, das ist eine menschenlesbare Tabelle. Menschenlesbare Tabellen sind nicht so schön in Monitoring-Systeme zu bringen, deswegen dann halt noch das komplette Pausen der Tabelle, erst mal alles an Leerzeichen rausschmeißen, alles was schön aussieht, kommt weg und dann das Ganze für jeden Access Point ein Objekt in Python erstellen, was die entsprechenden Daten enthält. Das obere ist halt die menschenlesbare Tabelle, enthält den Access Point Namen, den State, Model, Serie, Nummer und dann nochmal der Access Point Name, die Radio ID, Channel und die restlichen interessanten Daten aus dem WLAN über einen separaten SSH-Befehl. Und am Ende kommt dann so ein relativ schönes, simpelest JSON-Buy-Rows, was dann eigentlich gegen jedes Monitoring-System geworfen werden kann, was man so hat, was JSON versteht, womit man dann sich seine Grafen selber basteln kann. Ja, das Problem ist, die Probleme, die uns aufgefallen sind, ist der Datenschutz. Es war ja eben der Vortrag hier über das Tracking von Nutzern im WLAN. Ich habe es bei mir selber mal ausprobiert, das Skript so in maximal invasiven Modus laufen lassen. Man hat gesehen, wann ich mir Kaffee holen gegangen bin, wann ich zur Mittagspause gegangen bin, wie lange ich auf dem Weg in die Mensa gebraucht habe, war nicht so optimal. Deswegen speichern wir jetzt tatsächlich nur noch den Wendorteil von der MAC-Adresse, dass wir nur noch den Hersteller wissen, aber nicht mehr, welches Gerät das am Ende ist. Ja, dann die Dauer des Skriptes. Der Controller glaubt halt, dass da ein Mensch hinter sitzt. Deswegen versucht er das auch so auszugeben, dass ein Mensch quasi live mitlesen kann, Zeile für Zeile. Das habe ich dem Controller auch nicht abgewöhnen können, leider. Und ja, die Zuverlässigkeit der Controller, sie stürzten halt auch gerne mal so ab. Wenn man Ideen für die Zukunft sind, das Skript ist inzwischen Open Source. Ich wollte jetzt mal demnächst anpassen, gucken, ob man da noch schöne Sachen für OpenWRT machen kann. Vielleicht Sachen, die im OpenWRT-Webinterface nicht rausfallen, dann über SSH kriegen kann. Wir wollten noch gucken an der Uni, dass wir eine Campus-Karte machen, auf die der Access Points eingetragen sind, damit wir sehen wenigstens, wo sind Ballungsgebiete, wo müssen wir mehr Access Points aufhängen oder eine andere Infrastruktur bauen. Und ja, der bessere Schutz für die Privatsphäre ist inzwischen umgesetzt. Wir nehmen nur noch den Wendorteil der MAC-Adresse und schmeißen den Rest weg. So ist der Wendorteil der Nutzer nicht mehr zu tracken, sondern wir wissen nur noch, es sind 30% Apple User bei uns, 20% Samsung und der Rest verteilt sich auf andere Hersteller. Dann danke ich für eure Aufmerksamkeit. Meine Quellen sind eigentlich Wikipedia-Herstellerbilder und die Quelltexte sind selber geschrieben. Präsentation könnt ihr auch abrufen. Die Quellmüsste im Fahrplan eigentlich mit drinstehen. Und ja, wenn ihr an dem Skript weiterentwickeln wollt, es hat einige schöne Sachen, die man halt auch für seinen Heimnetzwerk nutzen kann. Und damit bin ich dann auch durch. Dankeschön. Wir haben jetzt noch ein paar Minuten für Fragen. Wenn ihr welche habt, stellt euch wie immer hinter die Mikrofone. Wir sollten auch einen Signalangel haben. Wir haben keinen Signalangel, wie schade. Ah, der hat keine Fragen. Es stehen Menschen hinter die Mikrofone. Ich freue mich. Dann fangen doch bitte an. Ja, vielleicht nur als Ergänzung SNMP steht eben auch für Security is not my problem. Deshalb die Frage, wie authentifiziert sich denn das Python-Skript per SSR? Geht das per SSR-Key oder also per Public Private Key oder ist da ein hart hinterlegtes Passwort in dem Skript drin? In dem Fall geht das noch über ein hinterlegtes Passwort und ein read-only-user Account. Der kann tatsächlich nur die lesenden Befehle auf dem Controller ausführen. Man kann aber auch per Public Private Key sich anmelden. Das stellt Paramico einem frei. Bei dem SNMP, was ihr verwendet habt für die Controller, ist das ähnlich wie bei den neuen Aruba Controller? Ich habe mit den neuen Aruba Controller noch nicht viel gearbeitet, aber es ist tatsächlich SNMP V1 und funktioniert wie gesagt so schlecht. Wenn man einen kompletten SNMP-Walk macht und sich alle Daten ausgeben kann, kommt der Controller auf 100% CPU-Lust und rebooted irgendwann und damit werden halt auch alle aktiven Verbindungen gedroppt. Okay, da ist das so wie bei Huawei auch. So, ich sehe jetzt keine weitere Frage. Herzlichen Dank. Herzlichen Dank. Und das ist ein Applaus.