RSS Atom New Article

What would happen, if programmers wrote songlyrics?

Found via kaFux

http://songsincodedb.com/

if tonight in jungle ; then
    lion.sleep;
end

oder

 if ( !woman ) { cry = false; }

... oder auch:

foreach(person in Persons.getAll()){person.setDomicile(yellowSubmarine);}

Posted on So 25 Jul 2010 18:54:50 CEST Tags:

About Motivation

via Kris

Posted on Fr 23 Jul 2010 14:17:47 CEST Tags:

Deep Linking images from foreign domains

Last week I found in my webstatistics, that I had some spike in the traffic.

A foreign weblog or forum in hungarian language had one of the pictures on my site linked directly into their comments.

I have no Problems with people using my pictures on their Website, even less if its not a workfrom me, but from someone else, and I also only have a copy.

But what buggs me, is that other ones are reading forums and are seeing images on a foreign website and noone notices, that the image is delivered from my webserver, while on the other hand, my connection is filled up with 3000 requests in 2hours.

The theory

To limit this behaviour for the next time, I did some configuration of the webserver(lighttpd) and some php-scripting.

In future I'll decide for every request to an image if the referrer is either empty or from my website (at least lzer.net). If thats the case, then normally either someone is reading my site, or he got a direct link to an article or an image. Thats fine with me. But if an image is embedded from another website, then the browser must have send (at least in 95% of the cases, geeks don't count) an referrer thats completely different.

In this case I'll be redirecting them to another version of the image that will have the prefix '/img/cached' in front of the original image path.

The Webserver

Here is the part of the lighty-config reliable for that:

$HTTP["url"] =~ "^/wiki/blog/.*\.(gif|png|jpg|jpeg)$" {
    $HTTP["referer"] !~ "^($|http://.*\.lzer\.net)" {
        url.redirect += ( "^/(.*)$" => "/img/cached/$1"  )
        accesslog.filename = "/var/log/lighttpd/suspected_imagetheft.log"
        }
    }

These images will contain a low-quality version of the original image, and have a text written over the complete image, that the image is linked from my site, and the author should rather copy the image to his site, instead of burning my bandwidth for nothing.

The funny part is, that normally these images don't exist, before they are requested the first time. They are created by an script that is run on the 404-Handler for this directory:

$HTTP["url"] =~ "^/img/cached/" {
        server.error-handler-404 = "/imagegenerator/"
        }

So what's happening there?

The Script

I had some time and fun with quick&dirty coding style. Following a commented version of "/imaggenerator/index.php":

<?php

$OriginalRequest=$_SERVER["REQUEST_URI"];

$URIParts=explode('/',$OriginalRequest);
list($EMPTY,$IMG,$CACHED,$RESTURI)=explode('/',$OriginalRequest);

First we're splitting the original request, and look, if we're really responsible. (Maybe someone directly called the script with a bad intention?)

if ( ('' == $EMPTY) and ('img' == $IMG)  and ('cached' == $CACHED) ) {

If that's fine, then we're splitting the request and build up the filenames of the original file to load and where the new file will go to

$I=3;
$RealImgFN='/var/www';
$NewImgFN='/var/www/img/cached';
$NewImgDir='/var/www/img/cached';
while($URIParts[$I]!='' ) {
    $RealImgFN.='/'.$URIParts[$I];
    $NewImgFN.='/'.$URIParts[$I];
    if (  !(($NewImgFN[strlen($NewImgFN)-4] == '.' ) or ($NewImgFN[strlen($NewImgFN)-5] == '.' )))  { $NewImgDir.='/'.$URIParts[$I]; }      
    $I++;
    }

If we have that, we check for the filetype and load the file for the first time.

switch(strtolower(substr($RealImgFN,-4,4))) {
        case ".jpg" : 
            $im     = imagecreatefromjpeg($RealImgFN);
            break;
        case ".png" : 
            $im     = imagecreatefrompng($RealImgFN);
            imagesavealpha($im,true);
            $is_png=true;
            break;
        case ".gif" : 
            var_dump("GIF");
            $im     = imagecreatefromgif($RealImgFN);
            break;
    }       
if (strtolower(substr($RealImgFN,-5,5))==".jpeg") {
    $im= imagecreatefromjpeg($RealImgFN);
    }

If it's an PNG-File, we remember that. At least we should now have "$im" loaded. If thats not the case, then we redirect to a generic image (look down)

if ($im) {
        @mkdir($NewImgDir,0777,true);

Why mode 0777 ? Because the umask will take care of the maximal rights on my webserver. You would have to check for that yourself. if (!is_png) { imagejpeg($im,$NewImgFN.".tmp.jpg",5); $im=imagecreatefromjpeg($NewImgFN.".tmp.jpg"); }

But here's the fun part: If it's not an PNG (Which will probably have Alpha(Transparency)-Information in it, which get lost on JPEG-Compression) then we first write it out as an temp-image with JPEG-Compression 5 (Which is VERY LOW quality) and reopen it.

Then we prepare for the text to write into the image.

        $string1    = "Image linked to http://wa.lzer.net";
        $fontfile='/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf';
        $blue = imagecolorallocate($im, 64, 144, 255);
        $black = imagecolorexactalpha($im, 0, 0, 0,64);
        $red = imagecolorallocate($im, 224, 64, 32);
        $white = imagecolorexactalpha($im, 255, 255,255,64);

        $maxX=imagesx($im);
        $maxY=imagesy($im);

And here it becomes interesting:

I want to write 2 Lines diagonally over the image, in a good, readable size. This means I'll have to calculate the angle first, in which to write the text. As it happens, thats the arcustangens of the image dimensions.

        $ratio=$maxX/$maxY;
        $mean=atan2($maxY,$maxX);
        $ang=rad2deg($mean);

Then I need to find out, which fontsize to select, so that its still readable. I increase the fontsize by one and look of the size of the boundingbox of the text:

        $bbx=1;$bby=1;$fs=1;
        while ((abs(($maxX/$bbx)*($maxY/$bby))>3) or (fs>120)) {            
            $fs+=1;
            $BBox=imagettfbbox($fs,$ang,$fontfile,$string1);
            $bbx=$BBox[4]-$BBox[0];
            $bby=$BBox[5]-$BBox[1];
            $e=abs(($maxX/$bbx)*($maxY/$bby));
            }

Because I write two lines, I'm moving the text a bit away from the diagonale

        $px=($maxX-$bbx)/2- (1*sin(deg2rad($ang))*$fs);
        $py=($maxY-$bby)/2- (1*cos(deg2rad($ang))*$fs);
        $ts=$fs;

I told you, it's quick 'n dirty, didn't I? So for the second Textline I store the main variables away, and do the position calculation again.

        $BBox1=$BBox;
        $px1=$px;
        $py1=$py;
        $ts1=$ts;

        $string="to the Author: Please copy the original to your site!";
        $fs*=0.6;
        $BBox=imagettfbbox($fs,$ang,$fontfile,$string);
        $bbx=$BBox[4]-$BBox[0];
        $bby=$BBox[5]-$BBox[1];
        $px=($maxX-$bbx)/2+ (2*sin(deg2rad($ang))*$fs);
        $py=($maxY-$bby)/2+ (2*cos(deg2rad($ang))*$fs);
        $ts=$fs;

Now comes another funny part:

Because Sometimes the text is hard to read on colored Images, I wanted the background of the text come grey. I'm trying to create a gradient of the boundingbox of the text to the outside of the image. It's ugly code, I dare to comment ...

        $points=array (
                        $px+$BBox[6] , $py+$BBox[7],
                        $px+$BBox[0] , $py+$BBox[1],
                        $px+$BBox[2] , $py+$BBox[3],
                        $px+$BBox[4] , $py+$BBox[5],
                        $px1+$BBox1[2],$py1+$BBox1[3],
                        $px1+$BBox1[4],$py1+$BBox1[5],
                        $px1+$BBox1[6],$py1+$BBox1[7],
                        $px1+$BBox1[0],$py1+$BBox1[1]
                );

        $p1dx=0*imagesx($im);$p1dy=1*imagesy($im);
        $p2dx=0*imagesx($im); $p2dy=1*imagesy($im);
        $p3dx=1*imagesx($im); $p3dy=1*imagesy($im);
        $p4dx=1*imagesx($im); $p4dy=0.5*imagesy($im);
        $p5dx=1*imagesx($im); $p5dy=0.5*imagesy($im);
        $p6dx=1*imagesx($im); $p6dy=0*imagesy($im);
        $p7dx=0*imagesx($im); $p7dy=0*imagesy($im);
        $p8dx=0*imagesx($im); $p8dy=0.5*imagesy($im);

        $AlphaGrey=imagecolorexactalpha($im,127,127,127,96);

        $delta=(
                abs($p1dx-$points[0])+abs($p1dy-$points[1])+
                abs($p2dx-$points[2])+abs($p2dy-$points[3])+
                abs($p3dx-$points[4])+abs($p3dy-$points[5])+
                abs($p4dx-$points[6])+abs($p4dy-$points[7])+
                abs($p5dx-$points[8])+abs($p5dy-$points[9])+
                abs($p6dx-$points[10])+abs($p6dy-$points[11])+
                abs($p7dx-$points[12])+abs($p7dy-$points[13])+
                abs($p8dx-$points[14])+abs($p8dy-$points[15])
            );

        $f=0.75;
        $c=0;
        while (($delta>128) and ($c++ < 200))
            {
            imagefilledpolygon($im,$points,8,$AlphaGrey);

            $points[0]=(($points[0]*$f)+((1-$f)*$p1dx));$points[1]=(($points[1]*$f)+((1-$f)*$p1dy));
            $points[2]=(($points[2]*$f)+((1-$f)*$p2dx));$points[3]=(($points[3]*$f)+((1-$f)*$p2dy));
            $points[4]=(($points[4]*$f)+((1-$f)*$p3dx));$points[5]=(($points[5]*$f)+((1-$f)*$p3dy));
            $points[6]=(($points[6]*$f)+((1-$f)*$p4dx));$points[7]=(($points[7]*$f)+((1-$f)*$p4dy));
            $points[8]=(($points[8]*$f)+((1-$f)*$p5dx));$points[9]=(($points[9]*$f)+((1-$f)*$p5dy));
            $points[10]=(($points[10]*$f)+((1-$f)*$p6dx));$points[11]=(($points[11]*$f)+((1-$f)*$p6dy));
            $points[12]=(($points[12]*$f)+((1-$f)*$p7dx));$points[13]=(($points[13]*$f)+((1-$f)*$p7dy));
            $points[14]=(($points[14]*$f)+((1-$f)*$p8dx));$points[15]=(($points[15]*$f)+((1-$f)*$p8dy));

            $delta=(
                    abs($p1dx-$points[0])+abs($p1dy-$points[1])+
                    abs($p2dx-$points[2])+abs($p2dy-$points[3])+
                    abs($p3dx-$points[4])+abs($p3dy-$points[5])+
                    abs($p4dx-$points[6])+abs($p4dy-$points[7])+
                    abs($p5dx-$points[8])+abs($p5dy-$points[9])+
                    abs($p6dx-$points[10])+abs($p6dy-$points[11])+
                    abs($p7dx-$points[12])+abs($p7dy-$points[13])+
                    abs($p8dx-$points[14])+abs($p8dy-$points[15])
                );
            }

But when that's ready, then we finally write the text itself. Having an positive offset in white and an negative offset in black gives an additional effect, and should make it even more readable.

        imagefttext($im,$ts1,$ang,$px1-1,$py1-1,$white,$fontfile,$string1);
        imagefttext($im,$ts1,$ang,$px1-0,$py1-1,$white,$fontfile,$string1);
        imagefttext($im,$ts1,$ang,$px1-1,$py1-0,$white,$fontfile,$string1);
        imagefttext($im,$ts1,$ang,$px1-2,$py1-2,$white,$fontfile,$string1);
        imagefttext($im,$ts1,$ang,$px1+1,$py1+1,$black,$fontfile,$string1);
        imagefttext($im,$ts1,$ang,$px1+0,$py1+1,$black,$fontfile,$string1);
        imagefttext($im,$ts1,$ang,$px1+1,$py1+0,$black,$fontfile,$string1);
        imagefttext($im,$ts1,$ang,$px1+2,$py1+2,$black,$fontfile,$string1);
        imagefttext($im,$ts1,$ang,$px1,$py1,$blue,$fontfile,$string1);

        imagefttext($im,$ts,$ang,$px-1,$py-1,$white,$fontfile,$string);
        imagefttext($im,$ts,$ang,$px+1,$py+1,$black,$fontfile,$string);
        imagefttext($im,$ts,$ang,$px,$py,$red,$fontfile,$string);

Now the imagecontent is ready. We´re writing the image (PNG stays PNG). And after that, we redirect to the same location again.

        @mkdir($NewImgDir,0777,true);
        if ($is_png) {
            imagepng($im,$NewImgFN);
            } else {
            imagejpeg($im,$NewImgFN,50);                
            }
        imagedestroy($im);

But now' the requested Image should be in its place and get directly delivered. Otherwise it'll be recreated again.

        header("Location: $OriginalRequest");
    } else {
        header("Location: /img/cached/ImageTheft.png");
    }
}
?>

This script was hacked in two days and has enough potential to get optimized, but I was in the need of an quick solution. The this is, that the cached images are more compressed and therefore also spare me some bandwidth.

Posted on Do 17 Jun 2010 15:15:26 CEST Tags:

Das grosse Filtern: Es wird merkbar

Kris macht, was das Gesetz von Ihm verlangt. Nach dem jetzt durchgewunkenen JMStV sind Inhaltsanbieter jetzt dafuer verantwortlich, zu Kennzeichnen, was fuer Inhalte sie bereitstellen.

Das heisst, dass Webseitenbetreiber

a) regelmaessig ihre externen Links ueberpruefen, und wenn sie zum Beispiel Kommentarfunktionen anbieten, auch die Kommentare regelmaessig Durchlesen, Bewerten und Moderieren muessen, sowie auch die dahinterliegenden externen Links beobachten muessen.

Anschliessend dann anhand dessen, das Korrekte Rating der Webseite vornehmen, unter der Gefahr, dass das Rating evtl. vom Gesetzgeben nicht korrekt anerkannt wird. Risiko dafuer liegt beim Webseitenbetreiber.

b) einfach die gesamte Webseite als dermassen über 18 erklaeren dass sie nachweisslich alles moegliche getan haben, damit ihnen niemand ans Bein pi$&Y@&

Das Ergebnis:

Ich sass gestern bei einem Östereichischen ?McDonalds welches Kostenfrei "Internet" anbietet. Wieviel von "Internet" noch uebrig ist, sieht man, oben, als ich versucht habe Kris' Blog zu lesen.

Kris setzt standardisierte ICRA-Labels ein.

Im Chat erklaert er es so:

07:47 <@Isotopp> iq: meine Seite ist 'ab 18' gerated, so habe ich es eingestellt
07:47 <@Isotopp> iq: ICRA Label
08:26 <@Isotopp> iq: nein, es ist durchaus intendiert, das Label immer zu liefern
08:27 <@....> Isotopp: ich sehe den Sinn ausser der gesetzlichen Erfuellung nicht. Faktisch schliesse ich damit Kinder aus
08:28 <@Isotopp> das ist Sinn der Sache
08:28 <@Isotopp> ich will mich rechtlich absichern. 
08:29 <@Isotopp> indem ich mich so hoch als moeglich einstufe, kann mir keiner unterstellen, ich haette ihn nicht gewarnt, mich zu niedrig gerated oder sonstwie gefaehrdend verhalten.
08:29 <@Isotopp> es ist mir egal ob Kinder mein Blog lesen koennen, ich habe keinen Bildungsauftrag und ich muss meine Reichweite nicht maximieren.
08:29 <@Isotopp> es ist mir nicht egal ob ich einen Prozess oder eine Abmahnung am Hals habe.
08:29 <@Isotopp> die Einstufung muss nicht korrekt sein, sie muss nur hoch genug sein, damit ich sicher bin.
08:31 <@Isotopp> Oder anders gesagt: Der JMStV will ein kindersicheres Internet. Das ist einfach zu leisten - einfach alle Seiten sperren.
08:31 <@....> Das will ich nicht.
08:31 <@Isotopp> Was willst Du nicht?
08:31 <@....> Alle Seite gesperrt haben.
08:32 <@Isotopp> Ich verstehe den Kontext nicht?
08:33 <@Isotopp> Meine Seite hat zwei ICRA Labels, eines V1 eines V2
08:33 <@Isotopp> Beide sagen "Diese Seite ist so ab 18 wie man nur sein kann"
08:33 <@Isotopp> das ist sie, weil ich keine Zeit und Lust habe, Rating zu lernen und weil ich das finanzielle Risiko eines moeglicherweise zu niedrigen Ratings nicht tragen will
08:33 <@....> Isotopp: ah, du willst auf "Papa, aber bei Kris steht doch gar nichts gefährliches"-Whitelist :-)
08:34 <@Isotopp> ...: wenn jemand anders das Risiko tragen mag und dafuer bürgen will, dass ich einer von den Guten bin - dann hat er detebe nicht mit erlebt
08:45 <@Isotopp> mir egal.
08:45 <@Isotopp> ich muss die Welt nicht retten.
08:45 <@Isotopp> in dieser Sache muss ich nur meinen eigenen Arsch retten.

Ich fuer meinen Teil, kann es Nachvollziehen, dass er es nicht darauf anlegt, seine Existenz mit einem solchen Damoklesschwert bedrohen zu lassen, mache mir selbst aber noch Gedanken darueber, ob ich bei mir auch derartige Zertifikate einfuege. Zumindest habe ich keine 4stelligen Visitor-Zahlen, um die ich mir Sorgen machen muss.

Posted on Sa 12 Jun 2010 18:27:20 CEST Tags:

Betreff: Wichtige Information des BMVBS!


INFORMATIONSAUSGABE - STRASSENVERKEHRSAMT - JUNI 2010

In Deutschland hat sich die Qualität der Pkw- und Lkw-Fahrer deutlich verschlechtert. Aus diesem Grund hat das Straßenverkehrsamt ein neues System eingeführt um die schlechten Fahrer zu identifizieren.

Mit sofortiger Wirkung werden allen Fahrern, die sich im Straßenverkehr schlecht benehmen - unter anderem durch plötzliches Anhalten, zu dichtes Auffahren , Überholen an gefährlichen Stellen, Abbiegen ohne zu blinken, Drehen auf Hauptstraßen und rechts überholen - Fahnen ausgehändigt. Sie sind rot, mit einem schwarzen Streifen oben und einem gelben Streifen unten. Dadurch sind sie für andere Verkehrsteilnehmer als unfähige Autofahrer zu identifizieren.

Diese Fahnen werden an der Autotür befestigt und müssen für alle anderen Verkehrsteilnehmer gut sichtbar sein. Die Fahrer, die eine besonders schwache Leistung gezeigt haben, müssen je eine Fahne auf beiden Seiten ihres Autos befestigen .

Mit freundlichem Gruß

BMVBS

Hochachtungsvoll

Oberamtmann G. Unna

Posted on Do 10 Jun 2010 10:24:48 CEST Tags:

Die Frühjahrsfachgespräch 2010 der German Unix User Group in Köln

Die letzten Tage waren mal wieder spannendes Programm. Vom 25.-29.05.2010, gerade noch am Ende des Frühlings, fanden die FFG2010, diesmal in Köln, statt. Urspruenglich wollte ich die vollen 4Tage teilnehmen, um auch alte bekannte und Kollegen wiederzutreffen und zu diskutieren.

Aber das Programm der FFG besteht traditionell aus 2Tagen Tutorials mit Hands-On und 2 Tagen Vortraege. Die Tutorials boten mir dieses Jahr leider kein fuer mich herausstechend interessantes Thema, so dass ich gezwungen gewesen waere mich fuer eines zu entscheiden, oder nach meiner Rueckkehr aus dem Urlaub die Zeit zu nutzen ein paar Dinge zu richten, und mich sauber auf den Kongress vorzubereiten.

Mittwoch, 26.05.2010

Ich entschied mich dazu, bereits am Mittwoch abend anzureisen, um in Ruhe ins Hotel einzuchecken und anschliessend die fuer diesen Abend angesetzte Ordentliche Mitgliederversammlung der GUUG zu besuchen. Das Hotel lag gut inmitten von Koeln und war ausgesprochen angenehm. Ueber ein kostenloses Upgrade auf eine Business-Suite freut man sich natuerlich auch. ;)

Das Wetter in Koeln war leider von einer dermassen hohen Luftfeuchtigkeit gepraegt, dass ich auch froh war erst nochmal ins Hotel zu koennen, wo ich erstnochmal duschen konnte. Kurz darauf dann mit dem Taxi an die Uni-Köln, wo sowohl die gesamte Tagung als auch die MV stattfand. Dort traf ich dann auch die ersten bekannten Gesichter wieder.

Nach der Mitgliederversammlung war dann in einem lokalen Restaurant noch ein Empfang fuer GUUG-Mitglieder geplant. Das Essen war recht lecker, und die "Kölner Schnauze" der Einheimischen ist groesstenteils recht umgänglich, manchmal jedoch nur noch recht Knapp ueber der Guertellinie.

Groesstes Problem: die Gerstenkaltschaleninjektionsdevices vulgo Bierglaeser - zu klein. Viel zu klein! Auch wenn mehrfach die Argumentation gefuehrt wurde, dass es ja so sein muesse, damit man immer ein frisches Bier am Tisch hat, und wenn es zu lange steht, es schaal wuerde, wurde mehrfach gefuehrt. Meine Antwort darauf: "Dann muss man halt das richtige Bier trinken, bei dem das nicht passiert."

Nach dem ersten Loeschen durch das foermlich aufgezwungene Koelsch (man muss es ja wenigstens einmal getrunken/probiert haben, bevor man darueber laestert - [X] Done) bin ich dann mit einigen anderen zu Weizen gewechselt. Dafuer gab es dann auch ordentliche Glaeser.

Dennoch war es schonmal ein sehr angenehmer Abend, mit den ganzen Gesichtern, die man lange Zeit nicht gesehen hat, aber mit denen man sonst das Jahr über nur schreibt und von denen man nur im Netz liest.

Viel zu spaet um noch irgendwas von dem netten Hotel zu haben kehren wir zurueck und ich falle ins Bett.

Donnerstag 27.05.2010

Der Wecker klingelt wie gewünscht 07:30. Ich werde wach, schlafe wieder ein, und wache erneut 9:00 auf... * MIST!!11Elf *

Schnell geduscht und zum Fruehstueck. Dort treffe ich die selben Gesichter, welche welche den abend davor bereits mit mir zusammen zurück zum Hotel gelaufen sind. OK - Die Keynote ist jetzt verpasst, aber das ist auch nicht zu aendern. Koffeinzufuhr klaeren, und dann noch kurz das Buffet abgegrast.

Keine Panik machen, aber bestimmt fertig werden, und anschliessend zum UNI-gelände laufen.

In der Zwischenzeit diskutieren wir das Programm wer welche Vorträge besuchen möchte. Als wir ankommen, läuft die Keynote noch, aber wir haben genug Zeit zum Durchatmen vor den Vorträgen. Dennoch sehr schade dass wir die Keynote verpasst haben, wird uns anschliessend mehrfach vom aus dem Hörsaal strömenden Publikum erzählt.

Da der WLAN-Security Vortrag von Mark Pröhl ausfaellt beschäftigen wir uns plötzlich mit IPv6 und Jens Link erinnert mich daran, dass ich die "IPv6-Zertifizierung" von HE.net noch weitermachen wollte, und auf einmal sassen wir zu dritt da um uns dort ein T-Shirt zu erarbeiten ;)

Das bisherige Ergebnis kann man im (vor)letzten Blogeintrag sehen...

Sichere Web-Portale, Dirk Wetter

Dirk Wetter sprach dann ueber seine Erfahrungen, die DOs-and-DON'Ts fuer Webportale. Jedem Sicherheitsbewanderten ist klar, dass fertige Pen-Testing-Suites nicht unbedingt den gewuenschten Sicherheitsgewinn bringen, wenn man die Ergebnisse nicht passend hinterfragt. Ohne diese passende Analyse sind die Reports von z.B Nessuns und ähnlichen Tools nicht das Papier Wert auf dem Sie ausgedruckt werden.

Aber Dirk zeigt stellte auch einige Tools vor, mit denen heutzutage die ueblichen Attack-Vektoren durchgespielt und manuell untersucht werden koennen. Alles in allem ein Runder Vortrag, wenn gleich auch nicht so tief wie ich es mir gewuenscht hatte.

Network Forensics, Torsten Dahm

Torsten haut in die selbe Richtung Security, allerdings zum Thema "Was tun wenn es passiert ist?"

Er stellt nochmals klar, dass 100% Sicherheit Quatsch ist und immer sein wird, aber man aus den Problemen und Incidents lernen muss.

Regel 1) Nicht den Kopf verlieren

Regel 2) Fuer gute Dokumentation sorgen. Sowohl über das, was man festgestellt hat, als auch über das, was man nun tut.

... und hoffen, dass man einen ordentlichen Chef hat, der weiss was seine Aufgaben sind, und der einem bei der NUN FOLGENDEN Arbeit den Ruecken freihält und dafür sorgt, dass man in Ruhe arbeiten kann ... Ein Grossteil der Publikumsdiskussion drehte sich anschliessend dann darum, wie man an derartige Vorgesetzte kommt. ;)

Anycast DNS, Sebastian Hagedorn

Sebastian stellte vor, wie sie an der UNI Köln Anycast eingesetzt haben, um ihre DNS-Server zu verteilen, und Verfuegbar zu haben. Im Endeffekt laeuft es darauf hinaus, dass sie ein Quagga auf 'nem PC haben, der ins bestehende OSPF die Route announced. Ein paar Tricks noch zur BIND-Konfiguration dazu. Keine besondere Offenbarung, wenn man das Konzept zwar kennt, aber noch nicht ueber die technischen Stolpersteine gefallen ist, denn er hat ziemlich weit die technischen Implementierungsdetails dargestellt.

Weitergabe und Speicherung von IP-Adressen - wann und wie ist das rechtmäßig?, Christoph Wegener

Ein langer titel fuer einen recht unterhaltsamen Vortrag, der eigentlich eine traurige Bilanz darueber zieht, wie Juristen mit begrenztem technischen Wissen Vorschriften und Gesetze geschaffen haben, die Netzadministratoren bei einer wörtlichen Interpretation der Gesetzestexte in massive Probleme bringen wird.

Alles dreht sich darum, das im Gesetzestext die "Weitergabe" von "Personenbezogenen Daten" reglementiert wird. Aber das Bewusstsein, dass bereits eine GeoIP-Anfrage, ja sogar ein Reverse-DNS eine Weitergabe der IP ist, sollte zahlreiche Webmaster zukünftig schaudern lassen.

Christoph stellt zum Glueck nochmal klar, dass das ganze weder seine Interpretation ist, noch dass er der Meinung ist, das ganze waere sinnvoll/richtig/gut so. Sondern es ist der Text von seit geraumer Zeit gueltigen Gesetzen.

Selbst schlau sein - ?SmartMeter im Selbstbau und Selbstversuch, Klaus J. Müller

Klaus erzaehlte, was alles hinter dem Begriff ?SmartMeter stehen kann. Die seit Anfang des Jahres von Stromversorgern verbauten Stromzaehler erhoehen die Pollingfrequenz von 3.1688765e-08Hz (1x im Jahr, wenn der Strom-zaehler abgelesen wird.) auf Sagenhafte 1Hz (Steigerung um den Faktor 31556926). Aber wer will kann sich auch selbst Smartmeter in die Wohnung holen, und selbst Herr ueber seinen Verbrauch werden, verschiedene Projekte wurden vorgestellt.

Grundsaetzliches Problem mit Smartmetern? Sie sind besser zur Ueberwachung geeignet als Kameras. Ein Stromverbrauchszaehler zeigt naemlich sehr schoen an wieviele Personen gerade aktiv sind und was sie tun. Das Auditorium war quasi ohne Schulung in der Lage die Stromkurven von Kuehlschrank, Geschirrspueler oder Herd zu erkennen. Alle Geraete haben eine typische Stromsignatur und ueber die Haeufigkeit von der Nutzung von Haushaltsgeraeten kann man sehr viele private Details herauslesen.

Darum ist es auch eher unclever von verschiedenen Personen ihre Kurven im Netz zu publizieren, wenn sie sich nicht zum theoretischen Ziel von Bösewichten machen wollen ... oder ihr Privatleben publizieren ("Ich weiss wann du zuhause warst, und wann du ins Bett gegangen bist!")

Daher die Idee von Klaus, die Daten in einer zentralen Datenbasis nur Anhand einer Serial# auf dem Geraet zu veroeffentlichen. Er versicherte auch, dass diese Idee von ihm konsequent durchgezogen wird, und er die Zaehler auch per Barverkauf vertreiben will, um sicher zu sein, dass die ID anonym bleibt.

Das Problem dabei: Wenn einmal für eine Person eine Zuordnung zu ihrer ID veröffentlicht wurde, dann ist die gesamte Anonymisierung dahin, wenn die Historie behalten werden soll. Und da Ich momentan davon ausgehe, dass man damit rechnen muss, dass jeder Haushalt einen signifikanten Fingerprint im Stromverbrauch offenbart, kann man u.U. noch nicht einmal mit einer neuen Anonymen ID einen neuen Zaehler ausrollen.

Wie weit geht die Paranoia und wo faengt der Selbstschutz an?

Sozial Event zu den FFG

Fuer das Sozial Event wurde ein lokale Brauhaus (natuerlich ausschliesslich Koelsch) von den Organisatioren ausgewaehlt, Bahnhofs- und Domnah. Wir, eine kleine Gruppe Abtruenniger, entschieden uns zu Fuss auf den Weg zu machen. Dabei versuchten wir der Touristenausschilderung zum Bahnhof/Dom zu folgen:

Beim Betreten des doch recht grossen Gasthauses wurden wir von der Bedienung gemustert zu welcher "Truppe" wir denn gehoeren wuerden, und ich hoere noch so im Vorbeilaufen ein Raunen: "Sieht nach viel Arbeit aus".

Daraus wurde dann fuer uns aber nix mehr, denn die "Abtruennigen" verabschiedeten sich relativ bald nach der Nahrungsaufname, da in so ein Nebenraum einen recht hoher Laermpegel herrscht, wenn ca. 100Personen mit Koelsch bewaessert werden. Fuer angenehme Unterhaltungen war es uns jedenfalls zu anstrengend, und so trennten wir uns und liessen uns auf ein/zwei Absacker noch von einem Einheimischen in eine echte IN-Kneipe zeigen. Bedient wurden wir von einem ehemaligen CAD-Ingeneur der keinen Bock mehr hatte, und jetzt mit Liebe eine Szene-Kneipe fuehrt. Sehr Angenehm.

Aufgrund der bisherigen Laenge dieses Artikels, und auch der Geschwindigkeit mit der ich hieran arbeite, habe ich mich entschieden, den Beitrag auf zwei Artikel zu verteilen.

Die Fortsetzung wird in einem zweiten Teil erscheinen

Posted on Sa 05 Jun 2010 15:14:34 CEST Tags:

This is not interesting for visitors, that are using a feedreader

I took the time to fix the pagetemplate so that in the layout the footer is seemless again. Also I changed the Font-Descriptions in the stylesheet, so that the reader can decide which fonts to use for rendering, because I only defined: "sans-serif" and no longer a specific typeface. Whats still annoying me is the search-inputbox at the top, thats hanging there around... I'll fix that later...

Posted on Mi 02 Jun 2010 16:20:34 CEST Tags:

This Blog is now available via IPv6

The Badge

You might have realized the button on the left side of the Blog (if you're not reading via RSS-Feed)

Here is the full-size image:

IPv6 Certification Badge for jwalzer

The Reason

I just took the chance, to put an AAAA-Record for wa.lzer.net and took the certification on HE.net(Hurrican-Electric) and even an reverse PTR-Record. A friend reminded me of the HE-certification.

The questions you have to answer are not tooo hard, if you worked a bit with IPv6 before. Hardest part for me was to supply an IPv6-Mailserver below my domain, because my email is handled by the provider at the moment. But another friend just supplied me with one, and I could redirect a subdomain simply to his mailserver.

The uggly part

Because of the existing IPv4-Setup, I now have the situation, that the HTTPS-Server is available per IPv4 on Port 1443 while now on IPv6 it is available on 443 ... so, if you can reach https://wa.lzer.net you have IPv6 ...

Posted on Fr 28 Mai 2010 11:35:58 CEST Tags:

What the h....?

Posted on So 25 Apr 2010 20:06:34 CEST Tags:

Parsing an Cisco-ACE-Configuration

I just had the need for a quite complex ACE-Configuration to visualize dependencies between all the VIPs, Serverfarms, RServers, Policies, Classes ... and so on ...

So I took the chance to write this little script, that takes an Ace-Running-Config and outputs and dotty file.

Dotty afterwards does the drawing part.

Download: aceparse.bash <- This file is probably old by now

You can follow the latest versions via git on: Gitweb

Usage:

 $ aceparse.bash $INFILE $OUTFILE.dot
 $ dot -Tpdf $OUTFILE.dot > $PDFFILE.pdf

Other ones, who have Configs they can show, please test or send them, so I can see, which features are used "in the wild" and should be implemented in the parser.


Features

  • Reads currently a ~4.000 line ACE-Module-Config
  • Produces Nodes and Edges from
    • Policymaps
    • Classmaps
    • Servicepolicies
    • VIPs
    • Serverfarms
    • Probes
    • and Realservers
  • Outputs to dot-file
  • currently dot/graphviz can create quite large PDFs
  • visually customizable Nodes
  • completely written in BASH-Script
  • implements a (not yet)complete Parser for the Cisco-configfile (yeah, thats work in progress ... At the moment its a "Works-For-Me")

Known Bugs/Issues

  • lots ...
  • sometimes the graph looses its orientation from left to the right.

    Thats somehow connected to the Fact, that a policy can link to a class and a class again can connect to a policy. To solve this I would not only parse the config syntactically but also semantically, which will be introduced when I have the time and need for that.

  • In large graphs one can hardly trace the edges, because multiple ones are overlapping.

    Thats an issue with the routing algorithms of dot/graphviz. What I tried so far is to increase the distance between the nodes, so that the edges have more space to navigate. I believe I would need some more testing with dot, to find out, where to tweak this stuff.

Todo-List

  • Documentation
  • Code Cleanup
  • allow anonymization of Nodes
  • revert git integration in the script
  • reengineer Debug-Facility
Posted on Mo 19 Apr 2010 15:24:53 CEST Tags: