Artikel mit Tag Administration

Probleme mit minicom und einem Aruba 6300 Switch

Zu meinem Job beim Schulträger unseres Landkreises gehört auch die Administration der Netzwerkinfrastruktur in den Schulen. Die von uns genutzten Aruba 6300 Switches haben einen seriellen Konsolenanschluss im USB-C Format. Über diesen Port führe ich normalerweise routiniert die Konfiguration der Switches mit meinem Kubuntu 22.04 Laptop, einem USB-C Kabel und dem Tool minicom durch.

Nach dem Anschließen des Kabels am Laptop meldet sich der Switch auf der Schnittstelle /dev/ttyACM0 und ich verbinde mit mit minicom -D /dev/ttyACM0 und kann den Switch über die Konsole bedienen.

Diese Routine wurde heute je durchbrochen, als ich nach dem Anschluss des Kabels an meinen Laptop das vertraute Device nicht finden konnte. Stattdessen erstellte Kubuntu das Device /dev/ttyUSB0. Na gut, dann eben flux damit verbunden aber: Nach dem Verbinden mit der Switch-Konsole konnte ich keine Eingaben machen. Die Ausgaben des Switches konnte ich aber problemlos mitverfolgen. Der Versuch mit einem zweiten Switch der gleichen Baureihe ergab das gleiche Ergebnis.

Ein wenig Googeln brachte den Tipp, in den Settings von minicom die “Hardware Flow-Control” auf “Nein” zu setzen und siehe da, nun konnte ich auch wieder Eingaben in der Konsole machen.

Das Problem ist nun zwar praktisch gelöst, allerdings weiß ich noch nicht, worauf diese Änderung des Verhaltens zurückzuführen ist. Da sich an den Switch-Modellen nichts geändert hat, habe ich eine Software-Änderung bei meinem Kubuntu Laptop in Verdacht. Aber vielleicht hat jemand von euch dazu eine Idee, ich bin für sachdienliche Hinweise dankbar.

Iptables Firewall - Wann beim Portforwarding ein DNAT nicht genug ist

Betreibt man Firewalls auf einem Linux-Router mit iptables, kommt man früher oder später in die Verlegenheit, Portforwarding machen zu müssen. Schaut man dann einschlägige Anleitungen im Internet an, findet man solche, die das allein über ein DNAT (Destination Natt ing) in der Prerouting-Chain lösen, manche wiederum sagen, dass man unbedingt auch ein SNAT (Source Natting) in der Postrouting-Chain machen muss, sonst würde das überhaupt nicht funktionieren.

Ich hatte das Problem letztens und möchte das hier mal etwas aufdröseln, damit ich beim nächsten mal nicht wieder Schaubildchen malen muss. Vielleicht hilft es ja auch dem ein oder anderen von euch, wenn ihr mal einen ähnlichen Routing-Fall lösen müsst.

Ich gehe in diesem Artikel nicht auf die Grundlagen des Routings und Firewallings ein, sondern möchte nur den oben erwähnten speziellen Fall genauer beschreiben.

Zunächst schauen wir uns grob an, wie so ein IP-Paket die einzelnen Chains (Ketten) unserer Firewall durchläuft.

Schematische Darstellung der Routing-Chains

Wie man sieht, haben wir zwei NAT-Chains (Network Adress Translation), nämlich die Prerouting- und die Postrouting-Chain. Jedes IP-Paket enthält unter anderem eine Absender-IP und eine Empfänger-IP. In diesen beiden Ketten kann iptables diese beiden Adressen umschreiben, nämlich die Empfänger-Adresse im Prerouting und die Absender-Adresse im Postrouting. Das besondere ist, dass diese Adressen, sobald die Antwort auf so ein verändertes Paket wieder bei unserem Router ankommen, auch wieder zurück übersetzt werden können.

Unsere Router zu Hause machen das übrigens ständig, wenn wir im Internet surfen. Bei allen Paketen wird die private IP-Adresse aus unserem Heimnetz in die öffentliche IP-Adresse ausgetauscht, die wir von unserem Provider erhalten haben. Kommt eine Anwort zurück, tauscht der Router die Adresse wieder zurück und sendet die Internetinhalte an das Gerät in unserm LAN, das sie auch angefordert hat.

Diese spezielle Form des SNAT in der Postrouting-Chain nennt man auch Masquerading.

Doch nun zu einem etwas komplexeren Setting, bei dem wir spezielle Adressumschreibungen benötigen, die über ein pauschales Masquerading hinaus gehen.

Wir haben als Beispiel eine Firewall mit drei Netzwerkkarten, eine (eth0) zeigt ins Internet mit einer öffentlichen IP-Adresse 1.2.3.4, eine Karte (eth2) zeigt in unser internes Firmennetz und hat die IP 192.168.1.1/24. Die dritte Karte (eth1) mit der IP 192.168.10.1/24 zeigt auf ein Netzwerk, in dem zwei Webservices laufen, die aus dem Internet erreichbar sein sollen.

Alle Pakete aus dem Internet, die auf für die IP-Ports 80 und 443 ankommen, sollen auf einen Reverse-Proxy weitergeleitet werden, der dann den Verkehr weiter an die zuständigen Rechner für die jeweiligen Services verteilt.

Das ganze schaut schematisch so aus:

Schematische Darstellung des Beispiel-Netzwerks

Die beiden Adressen “service_a.example.com” und “service_b.example.com” werden vom DNS auf die IP-Adresse 1.2.3.4 geleitet. Also müssen unsere Firewall anweisen, alle Pakete, die auf der IP-Adresse 1.2.3.4 auf Port 80 und 443 ankommen, an unseren Reverse-Proxy zu forwarden.

Dazu müssen wir zunächst das Forwarding für diese Ports in der FORWARD-Chain erlauben:

iptables -A FORWARD -i eth0 -o eth1 -p TCP --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p TCP --dport 443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Dann kommt das eigentliche Portforwarding, also das Umschreiben der Empfängeradresse im Paket.

iptables -t nat -A PREROUTING -d 1.2.3.4 -p TCP --dport 80 -j DNAT --to-destination 192.168.10.10:80

iptables -t nat -A PREROUTING -d 1.2.3.4 -p TCP --dport 443 -j DNAT --to-destination 192.168.10.10:443

Das funktioniert zunächst für alle Pakete, die aus dem Internet (hier als Beispiel von der IP-Adresse 3.4.5.6) kommen. Die Empfänger-Adresse wird auf den Proxy umgeschrieben:

Source          Dest
3.4.5.6         1.2.3.4  -> DNAT -> 192.168.10.10

und auf dem Rückweg:

Source          Dest
3.4.5.6         1.2.3.4  <- DNAT <- 192.168.10.10

Der Absender 3.4.5.6 erhält also als Antwort auf sein Paket, dass mit der Empfängeradresse 1.2.3.4 abgesendet wurde.

Das gleiche funktioniert auch, wenn ein Rechner aus dem internen Netz ein Paket an einen unserer beiden Services sendet. Der Router sorgt auch hier wieder für den Aus- und Zurücktausch der Empfänger-Adresse des Pakets.

Jetzt kommen wir aber zu einem Fall, in dem das so nicht funktioniert. Nehmen wir einmal an, der Rechner “service_a.example.com” muss ein IP-Verbindung zu “service_b.example.com” herstellen. Da “service_b.example.com” auch im internen Netz mit der IP 1.2.3.4 übersetzt wird, geht unser IP-Paket also an unseren Router, der auch wieder brav die Empfängeradresse austauscht.

Source          Dest
192.168.10.50   1.2.3.4  -> DNAT to 192.168.10.10

Das Paket geht zunächst ordnungsgemäß an unseren Reverse-Proxy, der an 192.168.10.60 (service_b) vermittelt. Nun soll der Proxy eine Antwort an den Absender schicken und hat folgendes IP-Paket vorliegen:

Source          Dest
192.168.10.50   192.168.10.10

Ah, das Paket kommt von einer IP aus dem eigenen Netz, die ganz ohne Routing direkt erreicht werden kann, also wird die Antwort direkt an 192.168.10.50 gesendet.

Dieser Rechner kann aber mit der Antwort nichts anfangen, denn er hat nie ein Paket an die IP 192.168.10.10 gesendet, sondern an 1.2.3.4.

Also wird die Antwort verworfen, die IP-Verbindung kommt in diesem Fall nicht zustande. Hier haben wir den Fall, in dem ein DNAT für das Portforwarding nicht ausreicht.

Um dafür zu sorgen, dass die Antwort den gleichen Weg nimmt wie das Ursprungspaket auf dem Weg zum Reverse-Proxy und damit der Router die Daten des Pakets wieder auf den ursprünglichen Wert zurücksetzt, müssen wir in der Postrouting-Chain die Absender-Adresse des Pakets auf die IP des Routers ändern:

iptables -t nat -I POSTROUTING -s 192.168.10.0/24 -d 192.168.10.10 -p tcp --dport 80 -j SNAT --to-source 192.168.10.1

iptables -t nat -I POSTROUTING -s 192.168.10.0/24 -d 192.168.10.10 -p tcp --dport 443 -j SNAT --to-source 192.168.10.1

Zusätzlich benötigen wir an dieser Stelle eine Forwarding-Regel, die das Forwarding auch von eth1 zu eth1 erlaubt:

iptables -A FORWARD -i eth1 -o eth1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Dadurch stellen wir sicher, dass das Paket bei Beantwortung zunächst wieder an den Router geschickt wird, der dann die IP-Adressen wieder auf die alten Werte korrigiert.

Als Regel kann man festhalten, dass wir immer dann eine SNAT-Regel für das Portforwarding benötigen, wenn durch das umschreiben der Empfänger-Adresse (DNAT) das IP-Paket so geändert wird, dass sich der Routing-Pfad auf dem Rückweg so ändert dass der Router, der das Natting durchgeführt hat, nicht mehr beteiligt ist. Dann ist es notwendig, auch die Absenderadresse so zu manipulieren, dass das Paket den gleichen Weg zurück nimmt und am NAT-Router wieder umgeschrieben wird.

Neuer DSL-Anschluss bei mir zu Hause

Seit vielen Jahren wurde mein heimisches Netz mit einem ISDN-Anschluss (neumodisch Universalanschluss) und einem 16.000er DSL versorgt. Das ist jetzt nicht gerade üppig, aber die 16Mbit im Downstream kamen immer stabil und zuverlässig bei mir an. Und so waren die üblichen Netzaktivitäten wie Surfen, Steaming von Spotify, Youtube und Netflix auch mit zwei Kindern im Teenager-Alter bisher kein Problem. Und so habe ich den notwendigen Wechsel auf einen der neuen IP-Anschlüsse der Telekom bisher immer hinausgezögert, wohl wissend, dass irgendwann dieses oder nächstes Jahr damit Schluss sein würde und die Telekom den alter "ISDNer" von sich aus kündigen würde.

Nun hat die Telekom allerdings bei uns im Ort auch verkabelungstechnisch aufgerüstet und eine Abfrage der möglichen DSL-Geschwindigkeit an meiner Adresse ergab, dass ich bis zu 200Mbit VDSL bekommen könnte. Nicht schlecht. :-)

Da der alte 16Mbit DSL-Anschluss mit ISDN nicht gerade ein preisliches Schnäppchen war, habe ich mich dann aufgrund der oben schon erwähnten Umstände dann zum Umstellen des Tarifs und des Anschlusses entschieden. Bestellt habe ich letztendlich einen IP-Anschluss mit 100Mbit Down- und 40Mbit Upstreamgeschwindigkeit, wieder bei der Telekom. Die Bereitstellung und der Tarifwechsel liefen problemlos und der Anschluss wurde 14 Tage nach der Online-Beauftragung umgestellt.

Etwas Planung erforderte die Umstellung der Zugangs- und Router-Technik. Am alten Anschluss werkelte ein Netgear-Router im DSL-Modem-Modus. Die Verbindung und das Routing erfolgte durch einen Linux-Server, der auch DHCP- und DNS-Dienste für mein Heimnetz zur Verfügung stellte. Der ein oder andere Dienst, wie z.B. Proxyserver, Webserver und eine kleine Nagios-Installation zur Überwachung einiger externer Server hatte auch dort seinen Platz. Das ganze war auch per SSH vom Internet aus zu erreichen, damit ich bei Bedarf auch mal von Unterwegs zu Hause nach dem Rechten schauen konnte.

Der Netgear-Router war am neuen IP-Anschluss nicht mehr zu gebrauchen, außerdem brauchte ich ja auch eine Lösung für die IP-Telefonie. Letztendlich habe ich mich hier von meinem Linux-Router verabschiedet und bin für Routing, DHCP und DNS auf eine FritzBox 7590 umgestiegen. Diese erledigt auch die Telefonie mit den bereits bei uns im Haus vorhandenen Fernsprechgeräten.

Einige von mir benötigte (na ja, oder sagen wir mal, zum Teil auch aus Spieltrieb installierte) Dienste kann die FritzBox allerdings nicht bereitstellen. Für diese Dinge habe ich mich für einen kleinen Linuxserver auf Basis eines RaspberryPi 3B+ entschieden. Das hat hoffentlich auch Vorteile für den Stromverbrauch, denn der alte Linux-Server lief 24/7 auf einer "normalen" PC-Hardware. Auf dem Raspi läuft nun zunächst die Nagios-Installation und er stellt einen SSH-Zugang über die FritzBox von außen zur Verfügung. Weitere Dienste werde ich in nächster Zeit noch implementieren, je nach dem ob ich sie noch benötige oder, wie ich schon bei einigen Programmen vom alten Linux-Server bemerkt habe, ich sie nur zu Testzwecken installiert hatte und schon gar nicht mehr benötige.

Die vertraglichen Down- und Upstream-Geschwindigkeiten werden gemäß den einschlägigen Prüftools sogar fast immer erreicht. Ein Flaschenhals und Geschwindigkeitsbremse ist noch das hier installierte WLAN-Netz, das ich aufgrund der baulichen Gegebenheiten bisher mit einem DLAN-Netz über die Stromleitung betreibe. Hier gibt es eventuell mit der FritzBox und ihrer WLAN-Mesh-Funktion noch Optimierungsmöglichkeiten, allerdings sind dafür wahrscheinlich auch noch einige neue Hardware-Komponenten notwendig. Da in meinem Arbeitszimmer alles über LAN-Kabel läuft, ist der Leidensdruck hier noch nicht so groß. ;-)

Und so bin ich mit dem momentanen Setup erstmal zufrieden und genieße die neue Internet-Geschwindigkeit, die sich gerade beim Download größerer Dateien oder beim Youtube-Streaming bemerkbar macht. Über weitere Änderungen und Experimente auf dem Raspi-Server werde ich euch hier auf dem Laufenden halten.

Wie man Anwender frustriert

Bevor ich in den Urlaub fahre, muss ich euch noch schnell eine Geschichte erzählen, bei der ich am eigenen Leib erfahren durfte, wie man Anwender mit Sicherheitsmechanismen frustrieren kann.

Wir haben einen Dienstleister, dessen webbasiertes Angebot per Single-Sign-On von unseren Dienstrechnern angemeldet werden kann. So lange man nur Informationen abrufen will, ist alles gut. Will man aber Änderungen an Konfigurationen durchführen, prüft die Anwendung, ob das verwendete Passwort nicht älter als 60 Tage ist. Man muss das Kennwort dann ändern, wofür natürlich das aktuelle Passwort benötigt wird. Aufgrund des Single-Sign-On-Verfahrens hatte ich das Kennwort nicht mehr parat, ist aber kein Problem, sagt die Anwendung, man kann sich einfach ausloggen und dann die "Passwort vergessen"-Option auswählen. Ich melde mich also ab, werde auf die Anmeldeseite weitergeleitet und was passiert? Genau, das Single-Sign-On meldet mich sofort wieder an.

Letztendlich hatte ich nur die Möglichkeit, die Seite auf einem Rechner ausserhalb unseres Büronetzes aufzurufen und dort die "Passwort vergessen"-Funktion auszuführen. Die Mail dazu kam natürlich auf meinen Bürorechner (Gnarf). In der Mail erwartete mich nicht der übliche Link zu einer Seite, auf der ich mein Passwort neu setzen konnte, sondern sie enthielt einen "Sicherheitscode" aus einer 7-stelligen Buchstaben/Zahlenfolge, die ich dann auf dem separaten Rechner zusammen mit dem neuen Kennwort eingeben sollte. Gesagt, getan, funktionierte aber nicht. Egal wie oft ich den "Sicherheitscode" eingab, er wurde stets abgelehnt. Irgendwann habe ich dann aus einem Impuls heraus den Sicherheitscode in der Mail mal markiert. Moment, war da ein Leerzeichen hinter der Zeichenfolge? Ich konnte es kaum glauben, aber nachdem ich den Code mit einem abschließenden Leerzeichen eingab, funktionierte das Setzen des neuen Kennworts.

Mal ehrlich, ein Leerzeichen am Ende eines Codes, den man eingeben soll zu generieren, ist schon "Bastard Operator from Hell"-würdig. :-)

Drucken 2016

Drei mal dieselbe Datei.
Drei mal dasselbe Officeprogramm.
Drei mal derselbe Rechner.
Drei mal derselbe Drucker.
Drei unterschiedliche Versionen des Druckertreibers.

Danke Windows.

Testausdrucke

Eine unheilvolle Dreiecksbeziehung

Die Beteiligten:

User1, User2, Rechner1, Rechner2, Rechner3 und der Admin

Die Geschichte:

User1 meldet sich an Rechner1 an.

User1 meldet sich an Rechner2 an.

Rechner1 meldet, dass ein Passwortwechsel notwendig ist.

User1 versucht an Rechner1 das Passwort zu ändern, das funktioniert nicht, weil die Anmeldung an Rechner2 noch läuft.

User1 versucht an Rechner2 das Passwort zu ändern, das funktioniert.

User1 meldet sich mit seinem neuen Passwort an Rechner3 an. So weit, so gut.

Einige Zeit später...

Rechner1, Rechner2 und Rechner3 sind nach dem Ablauf der Sperrzeit gesperrt.

User1 entsperrt Rechner2.

User2 denkt, er ist an Rechner1 angemeldet und versucht diesen mit seinem Passwort zu entsperren. Dreimal.

User2 sagt User1 Bescheid, dass er doch bitte Rechner1 entsperren soll. Aber weder das neue noch das alte Passwort funktionieren.

User1 versucht Rechner3 zu entsperren. Auch das funktioniert weder mit dem alten noch dem neuen Passwort.

...

Anruf von User1 beim Admin, der diese Story hier mal kurz aufschreiben muss, um zu verstehen, was da überhaupt gelaufen ist. User1 im Active Directory entsperrt. Alles wieder gut. :-)

Drucker-Notizen

Notiz an die User:

Wenn ein Drucker rot blinkt und im Display steht, dass man eine Tonerpatrone ersetzen muss, nutzt es nichts, den Drucker mehrmals an und aus zu schalten.

Notiz an mich:

Wenn man in den Keller geht, um die Ersatzpatrone für den Drucker zu holen, sollte man vorher auf das Display schauen, ob eventuell noch eine zweite Farbe bald leer sein wird. Sonst läuft man zweimal.

Notiz #2 an mich:

Manche Dinge, die man ihnen mal gesagt hat, vergessen User auch nach 20 Jahren nicht. Zum Beispiel, dass man Tonerpatronen aus dem Drucker nehmen und schütteln kann, damit er noch ein paar Seiten druckt. Die Tonerhäufchen vor und im Drucker zeugen davon.

Notiz an HP

Muss ein Drucker seine Netzwerkkonfiguration vergessen, wenn man ihn während eines Druckjobs ausschaltet?

Piwik 2.4.0 beseitigt XSS-Lücke - Update empfohlen

Piwik-Logo

Piwik, die freie Alternative zu Google Analytics zum selbst hosten ist in der Version 2.4.0 erschienen. Wie die Entwicker im Changelog bekannt geben, wurde eine XSS-Sicherheitslücke in der Anwendung behoben.

Außerdem wurden insgesamt 60 Fehlertickets mit dieser Version bereinigt. Ein Update wird dringend empfohlen. Das geht bei kleineren Installation auch ganz einfach mit ein paar Klicks automatisch.

Wenn das Update in euerer Piwik-Installation nicht automatisch angezeigt wird, geht ihr in die Einstellungen und klickt oben rechts auf "Nach Aktualisierungen suchen". Danach einfach den Link zur Aktualisierung klicken und den Anweisungen folgen. Hat bei mit nicht mal 2 Minuten gedauert, eine sehr komfortable Funktion von Piwik.

Schriftarten in Thunderbird ändern

Da ich gerade wieder das Problem hatte und danach im Netz erst ein wenig googeln musste, schreibe ich es hier mal für die Zukunft auf.

Bei höheren Bildschirmauflösungen kommt es gerade unter Linux manchmal vor, dass im Mailprogramm Thunderbird die Schriftarten von Menüs und in der Mailübersicht zu groß oder zu klein dargestellt werden. Das führt zu Problemen bei der Lesbarkeit oder sieht einfach auch mal hässlich aus. Die Schriftgrösse lassen sich über eine CSS-Datei im Thunderbird-Profil des Nutzers anpassen.

Man findet das Nutzerprofil unter Linux im Homeverzeichnis des Benutzers im Unterverzeichnis ".thunderbird". Dort gibt es dann einen Ordner, der aus einer zufälligen Zeichenkombination besteht, das Standardprofil hat hinter dieser Zeichenkombination ein ".default" angehängt.

mario@fichte:~/.thunderbird/m53h4ule.default$

Zu beachten ist, dass unter Linux der "." vor dem Verzeichnisnamen "thunderbird" bewirkt, dass das Verzeichnis versteckt wird, wenn ihr ein grafisches Tool zur Dateibearbeitung nutzt, müsst ihr also einstellen, dass versteckte Dateien angezeigt werden.

Im Profilverzeichnis gibt es einen Ordner "chrome", wenn der noch nicht existiert, müsst ihr ihn anlegen. In diesen Ordner gehört dann die Datei "userChrome.css" (Groß- / Kleinschreibung unbedingt beachten). Wenn die Datei vorhanden ist, kann man sie einfach ergänzen, wenn nicht, ist sie neu anzulegen. In dieser Datei kann man nun alle Elemente der Benutzeroberfläche mittels CSS-Statements beeinflussen. Uns geht es ja hier um die Schriftgrösse der Menüs und Listen.

Zunächst kann man einfach die Schriftgröße aller Elemente der Benutzeroberfläche mit folgendem Befehl anpassen:

/* Global UI font */
* { font-size: 11pt !important;
} 

Entscheident ist hier der Wert hinter "font-size:". Hier könnt ihr die Schriftgröße angeben. Man kann hier den Wert in pt (Größe in Relation zur Bildschirmauflösung) oder in px (Pixel) angeben, damit kann man einfach mal ein wenig herumspielen. Die Auswirkungen sieht man sofort nach einem Neustart von Thunderbird.

Will man nur die Menüelemente in der Größe verändern braucht es diesen Eintrag:

/* Menu font */
menu, menulist, menuitem { 
  font-size: 12pt !important;
}

Zur Veränderung der Schriftgröße der Baumelemente (Mailkonten) und der Liste der Mails nutzt man:

treechildren {font-size: 12px;}

So könnt ihr die Schriftgrößen ganz nach belieben an eure Vorlieben anpassen. Das ganze funktioniert im Prinzip auch für den Firefox (Profil in ".mozilla/firefox") und natürlich auch unter Windows, hier sind natürlich die jeweiligen Profilverzeichnisse je nach Windowsversion aufzusuchen.

User hater's password generator

Das ist doch mal was für den geplagten Admin. :-) Der "user hater's password generator" ist ein kleines Perlskript, das Passwörter generiert, die einen Benutzer garantiert zur Verzweiflung bringen.

Beispiel gefällig?

The user hater's password generator. Have a lot of fun!
-------------------------------------------------------
01) 0O0Ol]O|]1[0
02) 0[]O||0Il[[1
03) 0O|O1l|[0l]O
04) 11l00l|1I]|I
05) Il]l[01Il0|l
06) I|[]0ll01O|O
07) l0|I1IO]]|lO
08) lI][]|I]|1]I
09) 1[]|I[O00I[l
10) 00][[I10I0lI

via: