IPv6 ready

Die letzten Tage habe ich mich mal wieder mit IPv6 beschäftigt. Wenn man ein wenig die Internet Nachrichten verfolgt, hat man eventuell schon mitbekommen, dass sich unsere guten alten IPv4s langsam aber sicher dem Ende neigen. Folglich wird die neue Technik IPv6 also immer wichtiger für uns. Grund genug, sich damit intensiver auseinander zu setzen.

Bisher ist IPv6 leider kaum nutzbar. Ein Firefox-Plugin, genannt CheckIP zeigt mit mittlerweile seit einigen Wochen die IP des verbundenen HTTP-Servers an. So sieht man schnell, welche Webseiten über IPv6 erreichbar sind – und welche nicht. Das Ergebnis ist wirklich ernüchternd. Nicht mal Wikipedia bietet eine IPv6-Anbindung, Google nur über eine gesonderte Domain und meine favorisierten Webseiten haben alle keine IPv6. Gründe dafür sind fehlerhafte IPv6-Netze beim Enduser, mangelnde Kompetenz der Hosters (auch Strato bietet kein IPv6 für meinen V-Server) oder fehlende Lust und Zeit sich in die Materie einzuarbeiten.

Da nun aber der Server auf dem www.valentinvoigt.info und all meine anderen Projekte laufen ein ganzes IPv6 Subnet hat, sah ich mich quasi genötigt dieses mal in Betrieb zu nehmen. Mit Hilfe des wirklich tollen Service von sixxs.net habe ich mir ein eigenes IPv6-Subnet für zu Hause besorgt (via IPv4-Tunnel) und mit dem Programm radvd mein gesamtes Heimnetzwerk mit v6-Adressen versorgt. Ein einfacher ifconfig Befehl und einige simple Konfigurationen der Firewall taten es auch auf dem Web-Server von valentinvoigt.info. Ergebnis: Es ändert sich nix, aber man fühlt sich viel besser und tat dem Internet einen Gefallen. ;-)

Okay, Spaß bei Seite. Ähnlich wie bei DHCP ist die Konfiguration solcher Netze im Grunde ganz einfach.  Ein Blick in die Thematik lohnt sich auf jeden Fall mal. Es macht echt Spaß und bereitet einen riesiges Gefühl des Stolzes, wenn unter Remote-Address beim Apache eine v6-IP zu sehen ist. ;-) Jeder muss seinen Teil dazu beitragen, das Internet nach und nach v6-proof zu machen. Die Internet-Knoten haben schon begonnen, denn Routing ist meiner Erfahrung nach Problemlos möglich. Also fehlen noch die Provider und die Webservices selbst. Wie lange diese noch brauchen um ein vernünftiges IPv6-Internet auf die Beine zu stellen, steht wohl noch in den Sternen. Ich habe jedenfalls mein Bestes getan. *g*

Bind: Zone Delegation & Forwarding

Wahnsinn, wie sehr einem eine doch recht überschaubare Technik wie DNS in den Wahnsinn treiben kann. Schon seit einigen Wochen versuche ich immer und immer wieder, auf meinem DNS-Server eine Zone Delegation einzurichten. Die auf dem Server gehostete, eigene “lan”-TLD sollte eine Subdomain bekommen, die von einigen VMs gemanaged werden soll. Folgende Zeilen sollten dafür ja überall im Internet zu finden sein.

Ausschnitt aus einer Bind-Zone
  1. subdomain        NS    ns1.subdomain
  2. ns1.subdomain    A     10.3.0.1

Doch was wenn das nicht funktioniert und auch stundenlange Suche und ewiges Debugging nichts helfen? Nun, dann wäre es empfehlenswert, die forwarders-Direktive aus der named.conf zu entfernen. Schon geht alles einfacher… Ich hoffe jemand damit vom Wahnsinn abzuhalten. Ich jedenfalls werde mich jetzt die nächste Tage von DNS-Daemons fern halten. :-?

Metaballs, erste Optimierung

Okay, ich habe es also weiterhin nicht geschafft von den Metabällen die Finger zu lassen. :-D Nach meinem ersten Versuch mit Python und Pygame, habe ich mich nun mal mit C++ und SDL an die Thematik gewagt. Das Ergebnis kann sich durchaus sehen lassen, denn jetzt läuft die Animation bei mir flüssig – auch mit mehr als 2 Metabällen. Zum Testen benötigt man die libsdl und die libsdl-dev, außerdem natürlich den g++. Ein make-Script in Form eines simplen Shellscripts liegt bei. :-) Hier noch ein Bild:

Metabälle in C++ (1.79 KB)

Metaballs

Per Zufall bin ich gestern und heute über den Artikel über Metabälle gestolpert. Was auf den ersten Blick ziemlich kompliziert aussieht, gestaltet sich im Prinzip gar nicht so schwer. Denn wie ich halt so bin, konnte ich leider nicht widerstehen so etwas direkt mal zu probieren. Das Ergebnis ist eine einfache Python-Animation zweier Metabälle. Endlos langsam – aber funktioniert. ;-) Zum Zeichnen der Oberfläche benötigt man die “pygame”-Libraray, die sich (zumindest in Debian-basierten Systemen) leicht über den Packetmanager installieren lässt.

Metabälle in Python (932 bytes)

IMAP und der IDLE Befehl

Nachdem ich letzten den Nameserver einer Meiner Domains ändern musste, bin ich mal wieder auf den MX-Eintrag meiner Domain valentinvoigt.info aufmerksam geworden. Dieser zeigt via CNAME auf die DynDNS-Adresse meines Homeservers. Dort widerrum befindet sich ein Postfix Server, der … naja, eigentlich nichts zu tun hat.

Da ich mich schon länger nicht mehr mit dem Thema Mailserver beschäftigt habe, habe ich mir diesen Postfix-Server mal angeschaut. Dort habe ich bereits valentinvoigt.info als gültige Domain eingetragen. Komisch eigentlich, ich kann mich gar nicht daran erinnern, jemals diese Domain als einer meiner E-Mail-Adressen benutzt zu haben. Also habe ich mal schnell sendmail rausgeholt und mir selbst eine E-Mail an diese Domain geschickt. Und stellt euch vor – die kam an. Mit ca. 45 Sekunden Verzögerung, die mein Mail-Client zum Pollen der E-Mails benötigte.

45 Sekunden? “Da geht doch noch mehr”, dachte ich mir und schaute mir einige Tools an, die in der Lage sind Mailboxen zu überwachen. Schnell stieß ich auf das Programm mailnotify. Dort fand ich ein Feature, dass Gebrauch von der so genannten IDLE-Extension von IMAP macht. IDLE, zu Deutsch “nichts tun” klingt nicht besonders spannend, hat aber etwas ziemlich cooles an sich. Denn IDLE ist ähnlich wie “Pushmail” für mobile Clienten in der Lage, den Mail-Client in Echtzeit über den Empfang neuer E-Mails zu beachrichtigen. Nur leider funktionierte das auf Anhieb nicht…

Nach ein wenig Recherche fand ich aber schnell raus, wie ich IDLE zu meinem Vorteil nutzen könnte. Der Clue liegt in der Konfigurations-Datei des Courier-IMAP-Dienstes. In der Datei namens imapd gibt es eine Einstellung “IMAP_ENHANCEIDLE”. Diese muss auf 1 gesetzt werden, damit Courier die E-Mails in Echtzeit ausliefern kann. Courier benutzt dann den File Alteration Monitor, genannt FAM, der auf Kernel-Ebene Dateien und Verzeichnisse auf Änderungen überwacht. Dies ist in vielen Szenarien sinnvoll um ein Polling (d.h. regelmäßiges Prüfen auf Änderungen) zu vermeiden. Dies tut dann auch Courier nicht mehr, der Änderungen in der Mailbox nun in Echtzeit von FAM geliefert bekommt.

Mit dieser Technik habe ich nun eine Echtzeitbenachrichtigung über neue E-Mails. Zumindest an jene, die an valentinvoigt.info gesendet werden. E-Mails über meine GMX-Adresse müssen leider nach wie vor gepollt werden. Dort habe ich im Schlimmstfall noch eine Verzögerung von 5 Minuten. Okay, zugegeben. Brauch mal wieder keiner. Aber dennoch ist eine Echtzeitbenachrichtigung in manchen Fällen (Server- oder Software Ausfälle) schon sinnvoll. Nun kann man sich auf seine E-Mails konzetrieren und keine Jabber-Benachrichtigungen friemeln. :-)

Neues Hintergrundbild

Hey, will jemand mein neues Hintergrundbild benutzen? Hab’s selbst gemacht. *g*

Background image

Vorher hatte ich übrigens das gleiche ohne Schriftzug. :-D

Moderne Routing-Verfahren in PHP-Apps

Zwar bin ich schon seit einiger Zeit auf Python umgestiegen und versuche PHP mittlerweile weitgehenst zu vermeiden, aber dennoch wurde ich vor einigen Tagen von einem Freund gefragt, wie man heutzutage seinen URLs den richtigen Controller zuordnet. Aus lauter Langeweile, habe ich so ein relativ umfangreiches Beispiel erstellt, welches die meiner Meinung nach schönste Möglichkeit aufzeigt.

Undzwar besteht diese aus einer Tabelle, welche mit Hilfe von Regulären Ausdrücken, URLs einen bestimmten Controller (im Beispiel eine einfache Datei) zuordnet. Die Regex-Tabelle hat den Vorteil, eine zentral gelegene, leicht zu ändernde und flexible Möglichkeit zum Registrieren von URLs zu bieten. Weiterhin werden GET-Parameter in Forum von URI-Komponenten (z.B. “username” in /profile/username/view) direkt mit geparst und in ein einfach zu bedienendes Array (hier: $matches) gepackt.

Kurze Erklärung, wie man das Script benutzen kann. Man erstellt sich einen Ordner mit beliebigem Namen auf dem eigenen Webserver. Dort erstellt man eine Datei, welche zwingend index.php heißen muss mit dem gleich folgenden Inhalt. Außerdem benötigt man eine Datei namens .htaccess, welche den in der index.php als Kommentar vorhanden Code enthält. Nachdem das getan ist, muss die Variable $url_prefix noch angepasst werden. Diese muss die URI enthalten, unter dem die index.php (bzw. deren übergeordneter Ordner) erreichbar ist. In meinem Beispiel ist dies /test/. wichtig ist der abschließende Slash! anschließend probiert man einfach mal die in der $urls-Variable angegebenen URLs aus.

Read more »

Bastelstunde: Schöne URLs

Durch Zufall bin ich heute auf einen Thread in meinem Forum gestoßen. Dieser Thread hat mich direkt dazu gebracht, eine Funktion zu erstellen, die aus Thread-Titel (oder ähnlichem) URL-taugliche Strings macht. Sie ist wahrscheinlich nicht 100%ig komplett und entspricht auch nicht Jedermans Geschmack, aber ich wollte sie trotzdem mal veröffentlichen. In Aktion kann man das Script hier bewundern.

Funktion zum Erstellen von URLs aus Thread-Titeln
  1. function make_urlname($name)
  2. {
  3.     /* Schritt 1: Kleinbuchstaben */
  4.     $name = strtolower($name);
  5.  
  6.     /* Schritt 2: Ausgewählte Zeichen ersetzen */
  7.     $name = str_replace(" ", "-", $name);
  8.     $name = str_replace("ß", "ss", $name);
  9.     $name = str_replace("ä", "ae", $name);
  10.     $name = str_replace("ö", "oe", $name);
  11.     $name = str_replace("ü", "ue", $name);
  12.    
  13.     /* Schritt 3: Alles andere entfernen */
  14.     $whitelist = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
  15.         'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
  16.         'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '+');
  17.     $name_tmp = "";
  18.     for ($i=0; $i<strlen ($name); $i++) {
  19.         $char = substr($name, $i, 1);
  20.         if (in_array($char, $whitelist)) {
  21.             $name_tmp .= $char;
  22.         }
  23.     }
  24.  
  25.     /* Schritt 4: Doppelte Leerzeichen entfernen */
  26.     $count = -1;
  27.     while ($count != 0) {
  28.         /* Irgendwie macht WP hier nur ein Minus draus, daher so… */
  29.         $name_tmp = str_replace('-' . '-', '-', $name_tmp, $count);
  30.     }
  31.  
  32.     /* Schritt 5: Leerzeichen (d.h. '-') am Anfang und am Ende entfernen */
  33.     return trim($name_tmp, '-');
  34. }

Update: Für eine Übersetzung in die Programmiersprache Python bitte auf mehr klicken. :-)

Read more »

Mal wieder: Die IDE

Da doch des Programmierers wichtigestes Tool, ist es mir durchaus wert, mal wieder was über die IDE zu schreiben. Ich bin schon über massenweise IDEs gestolpert, von einfach gehaltenen wie Kate oder Notepad++ bis zu Monstern wie Eclipse oder NetBeans. Aber irgendwie war das auf Dauer alles nicht das Wahre. Jetzt benutze ich schon seit fast einem Jahr Vim. Und bin wirklich begeistert, wie viele Möglichkeiten man doch haben kann, auch ohne mehrere Hundert Megabyte IDE mit sich rum schleppen zu müssen. Auch wenn besonders anfangs die Eingewöhnung mehr als umständlich war, so kann man doch nun schon eher von effizientem Arbeiten reden.

Heute habe ich meinem Terminal urxvt einen Patch spendiert, der es ermöglich statt nur 16 jetzt 256 Farbein zu verwenden. Ich war es einfach Leid, mir die sehr hässlichen Default Farben von vim anzuschauen. Besonders das so genannte “cyan” tat bei vollen CSS-Dateien schon richtig weh. Zwar bin ich mir jetzt noch nicht ganz sicher, welches Colorscheme ich verwenden werde, aber das ist wohl eher ein geringeres Problem. ;-) Hier jetzt mal ein Screenshot, wie es aktuell aussieht.

VIM

VIM

arpwatch gegen ARP-Spoofing

Schon vor einiger Zeit berichtete ich über die Möglichkeiten, die ARP-Spoofing so mit sich bringt. Da dies nun auch in meiner Schule immer populärer wird, habe ich mich nun dazu entschlossen zusammen mit den Informatik Lehrern meiner Schule dagegen vorzugehen. Letzte Woche hielt ich einen zweistündigen Vortrag vor einigen interessierten Lehrer und Angestellten der Schule. Dabei zeigte ich die unterschiedlichen Möglichkeiten, die man zusammen mit arpspoof, dnsspoof, Wireshark uvm. so hat. Fazit: Das muss geändert werden. Meine Schule bietet ein kostenlos für jeden Schüler im gesamten Has verfügbares WLAN-Netzwerk an, mit dem man mit den Schul-Laptops (oder so wie ich mit eigenen Laptops) das Webangebot der Schule nutzen kann. Im bisher noch komplett geswitchten Netzwerk kann man so nach Lust und Laune sniffen.

Also habe ich mich mal auf die Suche nach sinnvollen Gegenmaßnahmen gemacht. Dabei sind wir zum Entschluss gekommen, dass primär erstmal die Netzwerk Infrastruktur geändert werden muss. VLANs für verschiedene LAN Bereiche der Schule und für jeden Access Point verhindern schonmal ein ARP-Spoofing im gesamten Netz.

Eine weitere Maßnahme wird der experimentelle Einsatz  von “arpwatch“. Arpwatch überwacht den ARP Traffic im Netzwerk und ist in der Lage Änderungen im ARP-Cache zu erfassen. Sollte ein mutmaßlicher Angriff erfasst worden sein, so kann arpwatch den Administrator mit Hilfe einer E-Mail benachrichtigen. Dieses System habe ich in meinem heimischen Netzwerk bereits mit Erfolg getestet.

Allerdings ergeben sich trotzdem noch Haken. Leider bin ich bisher mangels Hardware bzw. Zugang nicht dazu gekommen auch nur irgendwas mit VLANs machen zu können. Sofern mich mein Verständis eines VLANs aber nicht täuscht, dürfte es nicht möglich sein, ARP-Anfragen über das VLAN hinweg zu senden. Folglich kann arpwatch nur Attacken in einem bestimmten VLAN auffassen – was natürich keinen Sinn mehr macht. Ein anderes Problem ist, dass wir noch nich genau wissen, ob und wie man solche Attacken nicht nur automatisch erfassen sondern auch direkt unterbinden kann. Ideal wäre es, einen böswilligen Teilnehmer direkt vom Access Point aus zu sperren, sodass dieser keine Verbindung mehr zum WLAN hat. Allerdings widerspricht das doch etwas dem ursprünglichen Sinn des gesamten Netzwerkes; nämlich den Schülern auch während des Unterrichts Internet zu Verfügung zu stellen. Andererseits ist Unterricht auch nicht für ARP-Spoofing gedacht.

Ich werde auf jeden fall noch einige Gedanken an diesem Problem verschwenden. Die Sache mal von der anderen Seite, d.h. aus Sicht des Netzwerkadministrators zu betrachten bringt ganz neue Probleme aber auch Vorteile mit sich. Ich hoffe weiterhin auf Unterstützung seitens der Lehrer, ohne deren Zustimmung ich wohl vorerst keine Möglichkeit haben werde, mit derartig großen Netzwerken Erfahrung zu sammeln.

Older Entries »

WP SlimStat