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.

IMAP, fetchmail und mehr

Nachdem ich nun schon lange nichts mehr geschrieben habe, berichte ich mal wieder über meinen stetig wachsenden Homeserver, der langsam anfängt echt nützliche Dinge für mich zu erledigen. ;-)

Seit einigen Wochen nun habe ich ein neues System, meine E-Mails abzurufen. Auf dem Server läuft nun das Programm fetchmail. Fetchmail ist ein Perl-Script, welches in regelmäßigen Abständen die Mails einer Mailbox abfragt und entsprechend weiterleitet. In meinem Fall checkt fetchmail alle fünf Minuten die Mails auf meinem GMX E-Mail Account und sendet sie an die lokal laufende Postfix Instanz. Wer es nicht weiß, Postfix ist ein Mailserver. ;-)

Postfix hat seit kurzer Zeit jetzt auch einen Spamfilter, genauer gesagt SpamAssassin. Dieser Spamfilter kann zwar auch Spam aussortieren, ich habe mich aber dazu entschieden, meinen Spam vorerst nur mit einer Änderung des Betreffs zu markieren. Damit möchte ich jetzt erst einmal testen, wie zuverlässig SpamAssassin Spam von nicht-Spam unterscheidet. Später dann kann ich Spam auch direkt löschen lassen. Bei meiner bisherigen Menge hingegen lohnt sich das noch nicht.

Um jetzt meine E-Mails von Postfix auf meine E-Mail-Clients zu bekommen, habe ich außerdem noch einen IMAP-Server installiert, genannt Courier. Courier erlaubt es mir, meine Ordnerstruktur für E-Mails und die E-Mails selbst direkt auf dem Server zu behalten und erleichtert mir somit die Synchronisierung der Mail-Clients enorm. Die gespeicherten Mails liegen außerdem noch in einer RAID1-Partition, was damit also auch die Sicherheit der Daten erhöht.

Neben Courier habe ich außerdem schon seit längerem noch einen Webserver laufen. Auf diesem Webserver befindet sich jetzt seit wenigen Tagen auch eine SquirrelMail-Installation. Mittels SquirrelMail ist die Mobilität meines E-Mail Accounts jetzt komplett. SquirrelMail ist ein Webinterface für IMAP-Accounts. Damit kann ich nun von jedem beliebigen Ort der Welt (Internetanbindung vorausgesetzt) meine E-Mails samt Ordnerstruktur abrufen. :-)

Vor lauter Langeweile habe ich heute außerdem noch einen kleinen Python-Bot hinzugefügt. Okay, zugegeben, eigentlich braucht man das nicht. Aber es ist auf jeden Fall mal wieder eine neue Erfahrung. Dieser Bot ist dauerhaft in meinen Jabber-Account eingeloggt und wartet mit Hilfe von FAM auf eine Änderung der Mailserver-Logs. Sollte er eine Änderung feststellen, werden die neuen Zeilen ausgelesen und auf ein Regular Expression überprüft. Konnte der RegEx angewendet werden, so werde ich via Jabber sofort über den Erhalt neuer Mails informiert. Das Ganze kann bei GMX-Mails natürlich bis zu fünf Minuten dauern, da fetchmail leider auf Polling zurückgreifen muss. Bei lokalen Mails hingegen bekomme ich fast eine Realtime-Benachrichtigung. Dinge, die die Welt nicht braucht, nicht wahr? ;-)

Was in ein Blog gehört und was nicht

Langsam ist es mal soweit; ich habe zu viel Freizeit und suche einen bezahlten Job. Da das hier ja mein Blog ist und ich demnach jeden mir beliebigen Inhalt dort reinstellen kann (Jaja, toll nicht? Ich kann sogar Monologe in Klammern führen, die die Leute beim lesen behindern und keinen interessieren! Herrlich!), dachte ich, ich frage hier mal ganz frech nach; auch, damit ich diesen Post bei Gelegenheit in Konversationen verlinken kann. ;-) Also falls jemand mal eine der folgenden Arbeiten anzubieten hat, möge sich derjenige bitte bei mir unter Kontakt melden. :-) Alles Weitere lässt sich dann besprechen.

  • Server-Installation / -Administration / -Einrichtung
  • Python-Programme
  • putzen, gegen Aufpreis auch nackt
  • PHP-Scripte (Webseiten; CGI / mod_php / etc.)
  • Rasen mähen / Schnee schippen / Schuhe putzen / etc.

Skifreizeit 9c / 9d ‘09

Schade eigentlich, dass sie jetzt rum ist, die Skifreizeit mit den Klassen 9c und 9d unserer Schule. Fast eine Woche lang befanden wir uns in Italien, genauer gesagt im Ahrntal bei Südtirol. Dort zierte meterhoher Schnee die Landschaft, auch wenn das Wetter nicht gerade das beste war. Beschweren kann man sich aber dennoch nicht, denn es hätte viel schlimmer kommen können. ;-)

Sage und schreibe 13 Stunden Fahrt sowohl für Hin- als auch Rückfahrt haben sich aber auf jeden Fall gelohnt. Die super Pisten des Klausbergs entschädigten auch das tägliche Aufstehen um bereits 7 Uhr und das eher mäßige Essen. Die rund 4-5 Stunden Skifahrt pro Tag können zwar auf Dauer ganz schön auf die Gelenke gehen (besonders bei so alten Männern wie mir *g*), aber das Gefühl wenigstens bei einer Sportart was drauf zu haben, tut mir persönlich ganz gut – schließlich geht es auch nächsten Freitag gleich nochmal ein Wochenende in den Skiurlaub, wenn auch diesmal mit Familie. Details dazu folgen.

Und wie ich es bisher eigentlich immer gemacht habe, möchte ich jetzt noch einige Erinnerungsfotos anhängen, damit sich jeder was darunter vorstellen kann. Die Beschreibung der einzelnen Fotos spare ich mir; die kann jeder interpretieren, wie er möchte. ;-) Ansonsten darf natürlich auch einfach gefragt werden.

Was soll man dazu sagen? ;-) Eine der blauen Pisten des Klausbergs" Après-Ski "

Die Fortgeschrittenen-GruppeDie Mädels beim FranzNach dem Rodeln - ich sag euch: Nie wieder!

Schulnetzwerk die Zweite

Letzten Donnerstag – ich hatte mal wieder 8 Stunden Unterricht – haben wir die letzten zwei Unterrichtsstunden komplett im neuen Medienraum verbracht. Für nicht-Eingeweihte: Unser Medienraum ist nichts anderes als der vorherige Informatik-Saal, klingt nur toller. *g* In diesem Saal haben wir 30 neue Dell-Laptops. Die kompletten zwei Stunden hat unser Lehrer damit verbracht, uns die Laptops und das neue System näher zu bringen. Auch wenn es wahrscheinlich 70% der Schüler überhaupt nicht interessiert, konnte man zumindest erkennen, wie stolz unser Lehrer war.

Auf allen Laptops läuft jetzt ein Programm, welches sich DriveKeeper nennt. Mit Hilfe dieses Programms ist es den Lehrern möglich, die Laptops gnadenlos zu überwachen. USB ausschalten, CD-Laufwerk deaktivieren, Internet sperren, Bildschirm sperren, … Das ist wohl das, was sich der Lehrer von Heute wünscht. ;-) Das Programm zu umgehen ist keine besonders große Herausforderung, zumindest nicht für mich, aber für die meisten Schüler reicht es.

Die Laptops sind zur Hälfte mit einer WLAN-Verbindung ausgestattet. Damit soll es später möglich sein (oder ist es auch jetzt schon), die Laptops mobil in der gesamten Schule zu verwenden. Die andere Hälfte soll via am Tisch befestigtem Lan-Kabel angeschlossen werden. Fragt sich nur, wozu man dann nicht einfach normale Desktops kauft… ;-)

Außerdem – und das ist der Kernpunkt dieses Posts – wurde uns ein Netzwerk-Diagramm gezeigt und es wurde uns erläutert, was später einmal noch alles möglich sein soll. Ich muss schon sagen, ich bin erstaunt, wie umfangreich zumindest die Planung ist. Von eigenen Accounts (Speicher inbegriffen) im Active Directory über Schul-weites WLAN mit RADIUS (Login über eigenen Account) soll alles drin sein. Ich bin gespannt, ob das alles wirklich umgesetzt wird – und wenn ja, wie lange das wohl dauern mag. Wer weiß, vielleicht ändert sich meine Meinung ja doch noch. *g*

Older Entries »