Xen und statische iptables Regeln

Was macht man, wenn man möchte, dass xen die Finger von den iptables-Regeln lässt und einfach nur die virtuellen Interfaces auf eine Bridge werfen will? Ganz einfach folgendes Script in der xend-config.sxp als vif-script eintragen und den xend neustarten. Ausserdem die gewünschte Bridge in der Konfiguration der Virtuellen Maschine eintragen.

In Verbindung mit fest vorgegebenen Interfacenamen in der Konfiguration kann man so eine statische iptables-Konfiguration hinbekommen, die sich nicht bei jedem Neustart einer Maschine ändert.

#!/bin/bash
#
# Routerlab XEN-Vif-To-Brige script rxvtbs
# 

dir=$(dirname "$0")
. "$dir/vif-common.sh"

bridge=${bridge:-}
bridge=$(xenstore_read_default "$XENBUS_PATH/bridge" "$bridge")

if [ -z "$bridge" ]; then
     fatal "Could not find bridge: none was specified"
fi

case "$command" in
    online)
        log debug "vif-dummy adding $vif to $bridge."
        setup_bridge_port "$vif"
        add_to_bridge "$bridge" "$vif"
        ;;

    offline)
        log debug "vif-dummy removing $vif from $bridge."
        do_without_error brctl delif "$bridge" "$vif"
        do_without_error ifconfig "$vif" down
        ;;
esac

log debug "Successful vif-dummy $command for $vif."

if [ "$command" = "online" ]
then
  success
fi

xen 4.0 und debian kernel 2.6.32-5-xen-amd64 = broken filesystems

Bei der freitagsrunde betreiben wir mittlerweile eine ansehnliche Zahl virtueller Maschinen auf xen-Basis. In den letzen Wochen hatten wir allerdings verstärkt mit korrupten Dateisystemen zu kämpfen.

Die Symptome: Aus heiterem Himmel ist das Dateisystem read-only und ein fsck findet eine Menge Fehler. Meist sind die Dateien kaputt, auf die zuletzt zugegriffen wurde. Es verschwindet aber durch den fsck durchaus auch mal der /sys Mountpoint. In lost+found taucht nicht auf, dafür in dmesg:

[   40.460059] EXT4-fs error (device xvda2): ext4_mb_generate_buddy: EXT4-fs: group 36: 24445 blocks in bitmap, 24418 in gd
[   40.460085] Aborting journal on device xvda2-8.
[   40.460307] EXT4-fs error (device xvda2): ext4_journal_start_sb: Detected aborted journal
[   40.460322] EXT4-fs (xvda2): Remounting filesystem read-only
[   40.460765] EXT4-fs (xvda2): Remounting filesystem read-only
[   40.461477] EXT4-fs error (device xvda2) in ext4_reserve_inode_write: Journal has aborted
[   40.461491] EXT4-fs error (device xvda2) in ext4_reserve_inode_write: Journal has aborted
[   40.461501] EXT4-fs error (device xvda2) in ext4_ext_remove_space: Journal has aborted
[   40.461514] EXT4-fs error (device xvda2) in ext4_reserve_inode_write: Journal has aborted
[   40.461524] EXT4-fs error (device xvda2) in ext4_ext_truncate: Journal has aborted
[   40.461537] EXT4-fs error (device xvda2) in ext4_reserve_inode_write: Journal has aborted
[   40.461547] EXT4-fs error (device xvda2) in ext4_orphan_del: Journal has aborted
[   40.461558] EXT4-fs error (device xvda2) in ext4_reserve_inode_write: Journal has aborted

Wir dachten zunächt daran, auf ext3 umzusteigen, doch auch das führte zu ähnlichen Fehlern. (Neues FS angelegt, rsync der Dateien, fsck ohne Fehler in der dom0, in der domU wieder: crash)

Natürlich waren die mysql-Tabellen beschädigt. Der Versuch diese per myisamchk zu reparieren reproduzierte dann stets das obige Fehlerbild. In einem chroot auf der dom0 gemounted funktionierte alles, in der domU nicht. Jeder Zugriff auf die ‚beschädigte‘ myi-Datei innerhalb der domU lies das Dateisystem sofort in sich zusammenfallen.

Letztlich geholfen zu haben scheint ein Update des kernels auf 3.2.0-3-amd64 aus wheezy.

 

zentyal 2.2-2 unter xen installieren

Dieser Artikel erklärt die Installation von zentyal, einem Linux Small Business Server in eine xen Instanz.

Da der Zentyal kernel 2.6.32-38-generic von Zentyal 2.2-2 kein xen-kernel ist, müssen wir die initrd des Installers anpassen und die passenden Kernelmodule hinzufügen.

Ausserdem gilt es die korrekte kernel commandline zu nutzen,  damit das preseed file der Ubunut-Installation zum Tragen kommt. Weiterlesen ›

Tipp: Backupsoftware – backuppc

Bei der Software BackupPC handelt es sich um ein feines Tool zum Sichern von Rechnern, nicht nur PC’s.

Man sollte sich also weder vom Namen noch dem Logo abschrecken lassen. Weiterlesen ›

Es werde Licht… Tip für Neukatzenhalter

Heute morgen um 4 Uhr bemerkten wir die erste unschöne Überraschung mit Emma. Sie hat in den Flur gemacht.

Hier der Tip für alle Neukatzenhalter: In einem Badezimmer ohne Fenster reicht nachts das indirekt reflektierte  Straßenlicht wohl nicht ganz aus.  Die restliche Wohnung ist hell genug, aber im Klo will die Katze ihr Geschäft vergraben.

Wir probieren es dann mal mit einer LED-Lampe und Bewegungsmelder. Aber keine Angst, ich werde meiner Katze keinen Palast mit Wärmelampe bauen.

Catcontent – jetzt auch in diesem Blog

Auch dieses Blog bleibt nicht verschont – es wird in nächster Zeit mit Katzenbildern und Geschichten geflutet werden.

Der Grund: Seit vergangenem Sonntag lebt Emma bei uns, die allergiebedingt ein neues Zuhause gesucht hat.

Hier also, liebes Internet, ist Emma. Behandelt sie nett, sie ist eine ganz schüchterne. Noch. Und weil das Blog noch nicht umgezogen war hier eine Zusammenfassung der letzten Tage. Wem es zu lang zu lesen ist, die Kurzform lautet einfach: Es ist ein Abenteuer, aber ein schönes!
Foto von Emma, der Katze
Weiterlesen ›

Umzug meines Blogs…

Alle die via meinem blogger-Link hierher kommen: Herzlich Willkommen!

Mein  Blog liegt also nicht mehr bei blogger google. Das hat aber erstmal nichts mit einer google-Ablehnung oder Angst zu tun. Schließlich ist alles, was ich verblogge, ohnehin öffentlich. Aber ich möchte meine Abhängigkeit von externen Diensten einschränken.

Jemand der seine eigenen Server betreibt um dort eigene Mailserver und sein eigenes DNS betreiben, sollte vielleicht auch ‚privat‘ auf eigenen Füßen stehen. Und dies ist der Versuch dazu.

Ich verliere jetzt zwar in Bezug auf ‚SEO‘, aber das ist dann halt so. Wenn ich bei blogger etwas geschrieben habe, konnte ich es nach wenigen Sekunden bereits bei google finden, und im Pagerank waren die Artikel auch immer oben.

Aber damit ist jetzt nach knapp 10k Page views Schluss 😉

Sicheres Passwort Hashing

Nachdem in letzter Zeit immer und immer wieder Webseiten vor allem dadurch auffallen, dass sie Passwörter im Klartext speichern, hier zwei Funktionen aus der User-Klasse eines meiner letzten Projekte…

Übrigens: Wenn Ihr bei Klick auf ‚Passwort vergessen‘ von einer Webseite das Passwort im Klartext per Email zugesendet bekommt, macht man dort genau das falsch. Schaut dann mal in deren AGB oder Datenschutzbestimmung, ob sie dort behaupten die Passwörter zu hashen. Oft sind die nur Copy&Paste. Und bittet sie das Verfahren umzustellen. Oder schreibt Heise.

Der Code

Für die meisten Probleme gibt es Standards, so auch für das Passwort-Hashing. Es gibt also keinen Grund sich selbst mit Funktionen wie (der nicht mehr zu benutzenden) md5() und String-Operationen seine eigene crypt-Funktion zu schreiben.

Hier nun also eine Lösung mit php, weil die grade hier rumlag.

    /* Code Licence: Public Domain
     *
     * $this->pwhash wird in der DB gesichert bzw. daraus gelesen.
     * die Konfiguration in $_CONFIG sieht z.B. so aus:
     *
     * // Hier ist ein zufälliger Wert pro Webseite einzutragen:
     * $_CONFIG["pw_sitekey"]="897a-d21lk.a8q";
     * // Und hier der Hash-Also. sha1, sha512, NICHT md5!
     * $_CONFIG["pw_hashalgo"]="sha512";
     *
     */

    public function setPassword($password){
        global $_CONFIG;
        $site_key=$_CONFIG["pw_sitekey"];
        $algo=$_CONFIG["pw_hashalgo"];
        $nonce=uniqid();
        $hash = hash_hmac($algo, $password . $nonce, $site_key);
        $this->pwhash = $nonce.':'.$hash;
    }

    public function verifyPassword($password){
        global $_CONFIG;
        $site_key=$_CONFIG["pw_sitekey"];
        $algo=$_CONFIG["pw_hashalgo"];
        $nonce= strstr($this->pwhash, ':',TRUE);
        $hash = strstr($this->pwhash, ':',FALSE);
        $chash= ":".hash_hmac($algo, $password . $nonce, $site_key);
        return ($hash == $chash);
    }

Demo

Was kommt da nun also heraus? Dazu eine kleine Demo

        //Passwort
        $password="very secret";

        //Konfiguration:
        $site_key="12345";
        $algo="sha512";

        $nonce=uniqid();
        $hash = hash_hmac($algo, $password . $nonce, $site_key);
        $pwhash = $nonce.':'.$hash;

        //ausgabe zur Kontrolle
        echo "pwhash= $pwhash\n";

        //zu pruefendes Passwort:
        $check_password="very secret";

        $vnonce= strstr($pwhash, ':',TRUE);
        $vhash = strstr($pwhash, ':',FALSE);
        $chash= ":".hash_hmac($algo, $check_password . $vnonce, $site_key);

        if ($vhash == $chash){
            echo "passwords match!\n";
        }

Die Ausgabe bei übereinstimmenden Passwörtern:

pwhash= 50000b502b234:b038dfb61ba609604e7be78f3aa2cd84fb03970031f5e8d6f2eacc10542741dda5b7f41a716f3f78c305f6898d9b82838ce6b9df15dc94d00c37af393cc51de1
passwords match!

Passwort vergessen!

Wie setzt man das nun organisatorisch mit dem ‚Passwort vergessen‘ Link zusamen? Ganz einfach. Wenn die Nutzer ihr Passwort vergessen können sie sich an ihre Emailadresse einen Link zusenden, mit dessen Hilfe sie auf der Webseite ihr Passwort selbst zurücksetzen können. Der Link enthält dabei ein zufällig erzeugtes Token und verliert nach Benutzung (erfolgreiches Ändern des Passworts) seine Gültigkeit.

Nachtrag: Und natürlich sollte der Link wenn er nicht benutzt wurde nach X Tagen ebenfalls invalidiert werden.

Rumms!

Rumms!

Seit Jahren immer mal wieder versucht – heute geschafft 😉

(Also das Photo zu machen bei Gewitter, nicht den Fernsehturm zu treffen…)

U-Pad: Mikrofoneingan als Line-In

Wer kennt das nicht, da hat man eine USB-Soundkarte gekauft, weil der Eingang des Notebooks zu nah an der Festplatte vorbei geführt wird (sic!) und dann kann man an der Soundkarte kein Linepegen anlegen.

Nun, für diesen Fall möchte man ein Dämpfungsglied bauen. Ohne zu sehr auf die Details einzugehen, was die Anpassung angeht, hier ein einfacher Schaltplan um ein Mikrofoneingang zu einem Line-In zu machen.

Obacht: Dies ist für XLR, also symmetrische Signale, gedacht.

       ___ 7500
 o)---|___|-----o--------(o 
       R1       |                mit 2x7.5 und 1x150
LINE           | | 150     MIC   ergibt sich ein Teiler
 IN            |_| R3      OUT   verhältnis von 
       ___      |                15000:150 = 100:1 = -40dB
 o)---|___|-----o--------(o      Bitte 
       R2  7500                  Metallschichtwiderstände
                                 verwenden, die Rauschen nicht.

Für asymmetrische Signale sollte ein normaler Spannungsteiler funktionieren:

         ___15000
 o)-----|___|----o-----(o
                 |
                | | 150
IN              |_|          OUT
                 |
 o)--------------o-----(o
Top