Skip to content

Logitech-Fanboi

KabelfreakSpielkind Nachdem ich mich ja kürzlich über die Schlipsträger bei Sony aufgeregt hab, die mir (zumindest temporär) jeden Spaß am Spielen versauen können, indem sie mich alle paar Wochen zwingen, zig Seiten lange Nutzungsbedingungen zu "akzeptieren" — ich bin ziemlich sicher, dass ich Sony bereits meinen erstgeborenen Sohn verpfändet und das ius primae noctis für alle meine Töchter übertragen habe — muss ich mich zur Abwechslung über Logitech auslassen.

Ich benutze seit über zehn Jahren nur noch Logitech-Mäuse und die halten, trotz meines atypischen Nutzerverhaltens, immer jahrelang, mit dem Logitech-Lenkrad hab ich in GT3 zigtausend Kilometer zurückgelegt (und ich wette, dass nicht Logitech, sondern Sony dran schuld ist, dass es von vielen PS3-Spielen nur im Kompatibilitätsmodus erkannt wird) und eine Harmony One hat vor einer Weile die alte Universalfernbedienung (Kameleon) abgelöst. Nur die Logitech-Tastaturen kann ich nicht leiden, die sind nicht kettenrauchertauglich.

Logitech bietet seit vielen Jahren eine Reihe von stationären Audio-Playern an (sowas nennt man wohl, zumindest bei Amazon, auch "Internet-Radio"), früher als Slimirgendwas, jetzt unter der Bezeichnung Squeezebox, Preislage so €150-300, mit einem Ausreißer auf €2000 für ein High-End-Modell. Ich hab ewig die dazugehörige Serversoftware benutzt: der Squeezebox Server (früher: Slimserver) ist ein extrem aufbohrfähiger Perl/LUA-Mediaserver, der mit meiner relativ reichhaltigen Musiksammlung vernünftig umgeht, auf Debian reibungslos läuft und dessen Web/Java-Frontend mit jedem OS hier spielt.

Die Slim/Squeeze-Hardware hat mich bis vor kurzem gar nicht interessiert, die hatte so ein trockenes Stereoanlagenkomponentenflair. Bei dem neuesten Modell konnte ich aber nicht widerstehen: die Squeezebox Touch ist total niedlich und bunt, kann sich als langweiliger Digitalwecker tarnen, spielt alle Audio-Formate, die sich so über die Jahre ansammeln, sie hat Fast Ethernet (und 802.11g, aber wer will das schon bei einem stationären Gerät…), es läuft natürlich ein Linux drauf und sie spricht SSH.

Und das folgende war das erste, was ich gesehen hab, als ich mich zum ersten Mal auf der Squeezebox Touch eingeloggt hab:

bong:~# ssh 192.168.1.23
root@192.168.1.23's password:

This network device is for authorized use only. Unauthorized or improper use
of this system may result in you hearing very bad music. If you do not consent
to these terms, LOG OFF IMMEDIATELY.


Sowas kommt dabei raus, wenn in einer Firma nicht genug Anwälte und Marketingfritzen arbeiten um jedwede Kommunikation mit dem Kunden in das typische Korsett aus schleimiger Kundenverarsche und juristischen Drohungen zu pressen. Da hüpft mein Nerdherz. Logitech, ich bin jetzt offiziell Euer Fanboi.

Standard disclaimer: Ich hab keine Logitechaktien und bin in keiner Weise mit der Firma verbandelt. Und ich kann nur hoffen, dass nicht morgen rauskommt, dass Logitech seine Produkte von genitalverstümmelten Kindern in einer PCB-verseuchten Fabrik im Nigerdelta fertigen lässt, als Rohstoffe Blutdiamanten, Javanashornelfenbein und Gorillaleder verwendet oder ein Konto bei der Deutschen Bank führt.

Das Ende ist nah! Die Synflut kommt!

Kabelfreak Mehrere Wochen lang war ein von mir gepflegter Webserver Ziel einer verteilten SYN-Flood. Sie führte mehrfach zu (teilweise massiven) Problemen bei der Auslieferung der Daten. Das fand ich… überraschend. Eigentlich hätte ich davon nämlich nichts merken dürfen.

Jede TCP-Verbindung beginnt mit einem Handshake: Rechner A schickt ein SYN-Paket ("Haage! Jemand za hage?") an Rechner B. Wenn sich auf Rechner B ein Programm bereit erklärt hat, auf dem gewünschten Port Verbindungen anzunehmen, antwortet Rechner B mit SYNACK ("Haage! Jajaja! Jemand za hage?"). Rechner A bestätigt das wiederum mit einem ACK-Paket ("Jajaja!") — und schon steht die Verbindung und die Nutzdaten (meist Spam oder Schweinegifs) können fließen.

Bei einer SYN-Flood (die Schreibung hab ich aus der Wikipedia, ich hatte mich eigentlich an "Synflood" gewöhnt) schickt der Angreifer eine Menge SYN-Pakete, ohne sich um die Antworten zu scheren. Der angegriffene Server reagiert auf jedes SYN mit einem SYNACK und steckt die "halb offene" Verbindung in eine Warteschlange, wo sie eine Weile auf das abschließende ACK wartet. Kommt das nicht, wird sie schließlich entsorgt. Das Ziel des Angreifers ist, diese Warteschlange zum Überlaufen zu bringen, damit der Server keine neuen Verbindungen mehr annehmen kann. In der Fachsprache bezeichen wir das als "clogging teh tubez".

Gegen eine SYN-Flood gibt es in der Theorie eine einfache Abhilfe: SYN-Cookies. Die werden automatisch eingesetzt, sobald die Warteschlange für halb offene Verbindungen voll ist: statt sich in der Warteschlange zu merken, dass er sich mit einer Gegenstelle mitten im Handshake befindet, markiert der Server das SYNACK-Paket so, dass er an der Antwort, am ACK-Paket, erkennen kann, dass es sich um einen gültigen Handshake handelt.

In der Praxis funktionierte das bei mir auch immer. Bis zu diesem Angriff auf diesen Server. War die Warteschlange voll, kamen nur noch vereinzelte Verbindungen beim Webserver an, es wurden kaum noch Daten ausgeliefert und die Serverlast ging gegen null. — "Er hat Jehova gesagt! Er hat Jehova gesagt! Jeder weiß doch, dass SYN-Cookies funktionieren müssen!" — Nein, ich hatte nicht bloß vergessen, sie anzuschalten:

TcpExt:
190431 SYN cookies sent
159509 SYN cookies received
233521 invalid SYN cookies received


Die nächste Seltsamkeit war mein Unvermögen, die Warteschlange zu verlängern. Egal an welchen Rädchen ich drehte und wie heftig der Angriff gerade lief, "netstat" behauptete stur, dass ich während der Spitzen des Angriffs nicht mehr als 512 Verbindungen im Zustand "SYN_RECV" hatte. Ich bin schließlich bei folgenden Einstellungen angelangt, die zumindest nicht zu einer Verschlechterung der Situation führten (Linux-Kernel 2.6.x, 2 GB RAM):

echo 5000 >/proc/sys/net/core/netdev_max_backlog
echo 4096 >/proc/sys/net/ipv4/tcp_max_syn_backlog
echo 2048 >/proc/sys/net/core/somaxconn
echo "389952 519936 779904" > /proc/sys/net/ipv4/tcp_mem
echo 131072 > /proc/sys/net/netfilter/nf_conntrack_max


Im Angesicht meines Unvermögens, die Warteschlange zu verlängern, musste ich dafür sorgen, dass 1) weniger halbfertige Verbindungen in die Warteschlange eingestellt wurden, dass 2) die Verbindungen, die zum Angriff gehörten, schneller weggeräumt wurden und/oder dass 3) legitime, vollständig aufgebaute Verbindungen schneller vom Webserver angenommen wurden.

Den ersten Punkt löste ich durch das Filtern der aktiveren Teilnehmer des verteilten Angriffs: wer mir mehr als hundert SYNs in zehn Sekunden schickt, kann es nicht gut mit mir meinen und wird erst mal für eine Weile ignoriert. Vermutlich wäre es elegant gewesen, das mit "iptables --limit" zu lösen, aber es entstand bei mir quasi aus der Diagnose heraus und passierte daher im gleichen Shellskript, das mich permanent über den Verlauf des Angriffs informierte und dazu eh schon die Verbindungen durchzählte. Natürlich macht das den Server angreifbar für Spoofing: wenn ein Angreifer die SYN-Pakete nicht mit seiner eigenen IP als Absender losschickt, sondern mit der IP eines Nachbarn (und der Provider das nicht erkennt und filtert), sperrt dieser Mechanismus den Falschen. Pech für den Nachbarn, aber das Wohl der Vielen wiegt mehr als das Wohl der Wenigen oder des Einzelnen.

Das beschleunigte Weggräumen von halbfertigen Verbindungen, die nicht schnell genug fertig aufgebaut werden, und die dadurch in den Verdacht geraten, Teil der Attacke zu sein, besorgt der Kernel nach dem Herabsetzen von tcp_synack_retries auf 1 oder, wenn das nicht reicht, auf 0. Der Nachteil hieran ist, dass wohl auch die ein oder andere legitime Verbindung von einer trägen Gegenstelle über die Klinge springen muss. Aber das Wohl der Vielen…

Den dritten Schritt, der nach den ersten beiden Schritten vermutlich überflüssig gewesen wäre, hab ich leider als erstes getan — davon ausgehend, dass SYN-Cookies funktionieren müssen, suchte ich den Flaschenhals zuerst beim Webserver.

Der angegriffene Server bekam auch schon im Normalfall sehr viele Verbindungen ab, weil er den gesamten statischen Content (hauptsächlich Bilder) für eine Reihe von anderen Sites ausliefert. Der bisher dahin dafür eingesetzte thttpd schien überfordert, lief (auf einer Maschine mit zwei Doppelkern-CPUs) single-threaded und bot kein KeepAlive.

Vielleicht hätte sich als Alternative lighttpd angeboten, aber mir schien der Zeitpunkt nicht wirklich geeignet für erste Experimente mit einem neuen Webserver, also griff ich auf Apache2 mit dem Worker-MPM zurück. Das Vergnügen hatte ich bisher nicht so oft, dank PHP bin ich praktisch überall auf das Prefork-MPM festgenagelt, das einen Pool von Prozessen verwaltet, die die Requests entgegennehmen, bearbeiten und dann für den nächsten Request frei sind. Das Worker-MPM arbeitet im Vergleich dazu mit einem zweistufigen System: es startet einen relativ kleinen Pool von Prozessen, die unentwegt Requests annehmen und dann jeweils in Threads abarbeiten. Beim Ausliefern statischer Dateien sollte das im Vergleich zum Prefork-MPM sowohl die Verzögerung beim Annehmen einer Verbindung als auch den Speicherverbrauch verringern.

Nach einigem Rumprobieren bin ich bei folgenden Einstellungen für das Worker-MPM angelangt, die ich vorher auch für übertrieben gehalten hätte:

StartServers 16
MaxClients 6400
ServerLimit 256
MinSpareThreads 25
MaxSpareThreads 6400
ThreadsPerChild 25
MaxRequestsPerChild 0


MaxSpareThreads auf MaxClients zu setzen führt übrigens dazu, dass ein einmal gestarteter Thread nie mehr weggeräumt wird. Wenn die Stärke des Angriffs zunahm, kamen die gültigen (!) Requests ab und an in heftigen Wellen, die es dann blitzschnell entgegenzunehmen galt, da wurden dann auch mal ein paar Tausend Threads losgetreten (während im "Normalbetrieb" ein paar Hundert ausreichen) — die nächste Welle wurde aber entsprechend leicht verdaut, weil die Threads bereits existierten und nur noch angeschubst werden mussten.

Der Angriff hält immer noch an, hat aber keine praktischen Auswirkungen mehr, im Gegenteil: durch die Umstellung auf den Apache (und das Einschalten von KeepAlive — natürlich nur auf ein paar Sekunden, ich will ja nur alle Bildchen, Javascripte und Stylesheets eines Seitenzugriffs in einer Verbindung abfackeln, für den nächsten Klick kann gerne 'ne neue kommen) liefern wir jetzt noch zackiger aus als vor dem Angriff. Interessant wird's erst wieder, wenn der Angreifer noch 'nen Zahl zulegt, sprich: wenn er die SYNs von mehr Absendern, also aus einem größeren Botnet, schickt, oder die Bandbreite des Angriffs massiv erhöht.

Wie macht man den Zweitmonitor dunkel?

KabelfreakSchwarzseher Frage auf einer Linux-Mailingliste:

Ich nutze zwei Bildschirme. Das ist mit grafischer Oberfläche recht praktisch, im Textmodus verwirrt es aber ein wenig, alles doppelt zu sehen. Gibt es eine Möglichkeit, dass der Textmodus nur auf einem Bildschirm dargestellt wird, so wie das X auch kann? Also dass der zweite schwarz bleibt.


Solange noch solche Fragen gestellt werden, besteht in Bezug auf die Preisgestaltung von Elektrizität offensichtlich noch Spielraum nach oben.

(Tipp: auch Zweitmonitore verfügen in aller Regel über einen Ausschalter…)

Ubuntu ist das neue Windows

Kabelfreak Jörn vom Ende der Vernunft mokierte sich vor zwei Wochen darüber, dass auf seinem "stabilen" Ubuntu täglich Updates eintrudeln:

Ich bin erstaunt, das sich fast jeden Tag der Update-Agent meldet. Kann passieren, aber die Menge und was dort alles Upgedated wird erstaunt doch sehr. Anscheinend war es Ubuntu wichtiger den Release-Termin zu halten, als auf eine ausreichende Stabilität der mitgelieferten Pakete zu achten. (15. Juni)


Jetzt legt er nach:

Ubuntu wird immer mehr zum neuen Windows. Letztens hab ich mich noch über den Neustart von Windows lustig gemacht, den das Acrobat Reader Update erforderlich machte. Heute gabs bei Ubuntu ein neues OpenSSL und die fordern mich tatsächlich penetrant dazu auf meinen Rechner neu zu starten. (26. Juni)


Ubuntu hat den Ruf, eine besonders Ein- und Umsteiger-freundliche Linux-Distribution zu sein. Sie basiert auf meiner Lieblingsdistribution Debian, aber bei Ubuntu legt man aber mehr Wert auf Eye Candy und die Pflege der "eingeschränkten" Pakete (also Software, die nicht wirklich frei ist, die man aber heutzutage zum multimedialen Überleben braucht: proprietäre Video-Codecs, proprietäre Browser-Plugins, proprietäre Voicechatdinger und sowas).

Gepaart mit einem Anfall von Experimentierfreudigkeit und einer gewissen Sehnsucht nach Homogenität auf dem Schreibtisch) brachte mich das dazu, nach dem Release von Ubuntu 8.04 LTS eine Desktopmaschine und zwei Laptops von Debian auf Ubuntu umzustellen. Die Tatsache, dass es sich um ein groß angekündigtes Release mit einem "LTS" in der Versionsbezeichnung handelt, verstehe ich als Versprechen der Ubuntu-Macher, mir eine stabile und langfristig sichere Distribution zu liefern. Man erlaube mir dazu eine Frage: "Ab wann?"

Während sich Jörn bloß genervt fühlt, gingen bei mir im Verlauf der letzten Wochen Sachen kaputt, die nach der Umstellung schon mal funktionierten. Erst konnte ich mit dem Gnome-Multimedia-Helferlein Totem alle möglichen Videos abspielen, dann gab's bei jedem Versuch eine Fehlermeldung. Erst lief der Toshiba-Laptop einwandfrei, dann malte er nur noch lustige Farbwolken auf's Display, genauer: er erzählte mir in einer grafischen(!) Fehlermeldung, dass er den Monitor, also das eingebaute Laptop-Display, nicht mehr erkennen könne und daher auf eine niedrigere Auflösung wechseln müsse, und produzierte dann, egal welche Auflösung ausgewählt war, einen blassen Plasma-Effekt auf dem LCD, faszinierend anzuschauen, aber doch irgendwie ungesund wirkend.

Beides hat mich nicht lange aufgehalten, es gibt ja Alternativen zu Totem (z.B. VLC und mplayer) und xserver-xorg-video-intel war auch schnell wieder durch die funktionierende Vorversion ersetzt… aber ich darf mir gar nicht vorstellen, wieviel Lebenszeit Ein- und Umsteiger an diesem Punkt damit verschwenden werden, Ubuntu neu zu installieren, weil sie nach einem Update keine grafische Oberfläche mehr haben — nur um ihren Rechner dann entweder auf den gleichen, kaputten Stand zu aktualisieren oder erst mal ganz auf Updates zu verzichten und mit Sicherheitslücken zu leben.

Mein Fazit: Ubuntu ist nett, aber die Releasepolitik stinkt. Ich bin gespannt, ob sie die Kurve kriegen.