Infrastructure as secure code

Im Rahmen meiner Abschlussarbeit habe ich mich damit beschäftigt den Code des Konfigurationsmanagementsystems Puppet automatisiert auf unsichere Praktiken zu analysieren. Herausgekommen ist ein puppet-lint Plugin zur Prüfung von Puppetcode aus mögliche Sicherheitsrisiken.

Das Plugin steht auf rubygems.org zur Verfügung. Der Quellcode ist auf Github verfügbar. Die eingebauten Sicherheitschecks sind als Basis zu verstehen und sollten auf die eigenen Bedürfnisse angepasst werden. Gerne können und sollten weitere Checks eingebaut werden.

Gem Version

Nun noch ein paar Hintergrundinfos.

Continue reading

post

Jenkins SVN Plugin mag kein htaccess

Das aktuelle Jenkins SVN Plugin in der Version 2.5 (https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin) ist leider etwas buggy. Unser SVN läuft unter Linux/Apache mit Kerberos Authentifizierung, so dass man sich normalerweise ganz einfach via Basic Authentifizierung anmelden kann. Mit älteren Jenkins SVN Plugin Versionen ist das auch keine Problem. Allerdings scheint die aktuelle Version hier fehlerhaft zu arbeiten. Jenkins versucht gar nicht erst die Credentials via Basic Authentifizierung weiterzugeben, sondern scheint nur noch NTLM zu versuchen. Im Apache Log kommt nicht einmal ein Username an.

Was hilft: Eine ältere Version (z.B. 1.54) verwenden. Zumindest scheint schon ein Bug offen zu sein:

https://issues.jenkins-ci.org/browse/JENKINS-27084

Endian Firewall unterstützt Paravirtualisierung

Die Endian Firewall unterstützt nun in der Version 2.4 von Haus aus den Betrieb in einer paravirtualisierten XEN Umgebung. Nach einem efw-update kann man ein smart install kernel-PAE machen und erhält einen Kernel, der mit dem XEN Hypervisor sprechen kann. Somit ist es nun ohne den Kernel von Neobiker möglich die Endian Firewall paravirtualisiert auf XEN laufen zu lassen.

Quelle: http://www.efw-forum.de/www/forum/viewtopic.php?f=45&t=676

VDR Shutdown Shortcut

Aktuell bin ich mal wieder dabei den stromfressenden Homeserver im Keller loszuwerden. Bisher sieht der gefühlt 27. Versuch ganz gut aus. Dank pfsense und siproxd muss die FritzBox nicht mehr Router spielen, damit SIP funktioniert. OpenVPN hat ebenfalls dank pfsense und der eingebauten AES-128 Hardware Beschleunigung meines Alix Boards gute Performance bei minimalem Stromverbrauch. Jetzt fehlte nur noch eine passende Lösung für VDR. Die Lösung: yaVDR. Diese Ubuntu basierte VDR Distribution hat direkt alles eingebaut, was ich so brauche (XBMC, mcli plugin für Netceiver,…) und ACPI Wakeup funktioniert out of the box. Nun kann ich meine VDR Kiste gepflegt per WakeOnLan per pfsense Webinterface von überall aufwecken. Der passende Link für ein Lesezeichen im Browser sieht wie folgt aus:
http://[pfSense IP]/services_wol.php?mac=[MAC Adresse des Rechners]&if=lan

Um den VDR nun wieder herunterzufahren, ohne SSH bemühen zu müssen, nutze ich vdradmin-am. Der passende Link:
http://[IP des VDR Rechners]:8001/vdradmin.pl?vdr_cmd=5&run_vdrcmd=Ausf%C3%BChren&aktion=vdr_cmds

Schöne bunte Graphen

Gesucht war eine Möglichkeit die Daten aus der Temperaturüberwachung geeignet in einem schönen bunten Graphen darzustellen.
Bisher habe ich cacti mit einem eigenen Template verwendet. Allerdings ist mir das Tool etwas zu überladen und ich benötige die SNMP Funktionen (außer für die Temperaturüberwachung) nicht, da ich ansonsten collectd verwende. In Cacti ist es leider nicht vorgesehen fremd erzeugte RRD Graphen einfach nur anzuzeigen. Es gibt zwar ein python script welches die collectd Graphen in Cacti einbindet, aber das ist am Ende doch wieder nur Gefrickel.
Drraw ist eine schlanke Alternative, die genau das tut was ich möchte: Einfach nur bunte Graphen aus RRD Files bauen. Am Ende wurden es einige Stunden Gebastel, aber das Ergebniss kann sich sehen lassen:

Anbei noch der passende Aufruf von rrdtool:

rrdtool graph -
--start=end - 1 day
--end=now
--title=Temperatur Außen
--vertical-label=C
--imgformat=PNG
--width=500
--base=1000
--height=240
--interlaced
DEF:b=file1.rrd:eddn_temp:AVERAGE
DEF:w=file2.rrd:eddn_temp:AVERAGE
CDEF:D=b,23,GE,b,24,LT,b,24,IF,0,IF
CDEF:C=b,24,GE,b,0,IF
CDEF:E=b,22,GE,b,23,LT,b,23,IF,0,IF
CDEF:F=b,21,GE,b,22,LT,b,22,IF,0,IF
CDEF:G=b,20,GE,b,21,LT,b,21,IF,0,IF
CDEF:H=b,19,GE,b,20,LT,b,20,IF,0,IF
CDEF:I=b,18,GE,b,19,LT,b,19,IF,0,IF
CDEF:J=b,17,GE,b,18,LT,b,18,IF,0,IF
CDEF:K=b,16,GE,b,17,LT,b,17,IF,0,IF
CDEF:L=b,11,GE,b,16,LT,b,16,IF,0,IF
CDEF:M=b,10,GE,b,12,LT,b,11,IF,0,IF
CDEF:N=b,9,GE,b,10,LT,b,10,IF,0,IF
CDEF:O=b,8,GE,b,9,LT,b,9,IF,0,IF
CDEF:P=b,7,GE,b,8,LT,b,8,IF,0,IF
CDEF:Q=b,6,GE,b,7,LT,b,7,IF,0,IF
CDEF:R=b,5,GE,b,6,LT,b,6,IF,0,IF
CDEF:S=b,4,GE,b,5,LT,b,5,IF,0,IF
CDEF:T=b,3,GE,b,4,LT,b,4,IF,0,IF
CDEF:U=b,3,LT,b,5,IF
CDEF:A=b
VDEF:V=b,AVERAGE
LINE1:b:
AREA:D#FF3300:
AREA:C#FF0000:
AREA:E#FF6600:
AREA:F#FF9900:
AREA:G#FFCC00:
AREA:H#CCFF00:
AREA:I#99FF00:
AREA:J#66FF00:
AREA:K#33FF00:
AREA:L#00FF00:
AREA:M#00FF33:
AREA:N#00FF66:
AREA:O#00FF99:
AREA:P#00FFCC:
AREA:Q#00CCFF:
AREA:R#0099FF:
AREA:S#0066FF:
AREA:T#0033FF:
AREA:U#0000FF:
LINE1:A#000000:Außen
VDEF:A_MIN=A,MINIMUM
GPRINT:A_MIN:Min: %8.2lf%s
VDEF:A_AVERAGE=A,AVERAGE
GPRINT:A_AVERAGE:Avg: %8.2lf%s
VDEF:A_MAX=A,MAXIMUM
GPRINT:A_MAX:Max: %8.2lf%s
VDEF:A_LAST=A,LAST
GPRINT:A_LAST:Last: %8.2lf%sn
LINE1:w#808080:Innen
LINE1:V#008000:Durchschnitt

Blog roundup 2009

So lange nicht mehr geblogt. Da ich aber kürzlich mal wieder auf die Idee gekommen bin mein WordPress zu aktualisieren, habe ich gleich mal etwas aufgeräumt und der Seite ein neues Bild verpasst. Ich bin natürlich letztes Jahr nicht untätig gewesen. Es gab allerdings zu Hause und @work viel zu tun. Leider hat es sich nicht bewährt das Alix Board gleich noch als Fileserver (über USB Platten) mit zu nutzen. Nach längerer erfolgloser Suche nach einem geeigneten NAS (am besten mit Geode Chip und der Möglichkeit openvpn zu nutzen), habe ich mich aus Kostengründen dazu entschieden wieder einen Homeserver aufzubauen. Um den Stromverbrauch in Grenzen zu halten und trotzdem ordentliche Performance bei OpenVPN zu haben, habe ich mit ein Board mit Atom 330 CPU gekauft. Für die Nutzung als Server im Keller hat ein einfaches Intel Board mit 2 GB RAM dicke ausgereicht. Das Ganze dann in ein altes Standard-ATX Gehäuse gepackt, Ubuntu 8.04 LTS Server auf einen 4 GB USB Stick installiert und schon war der Homeserver fertig. Ich habe mich noch entschieden 2x1TB Festplatten in das Gehäuse einzubauen und per Software RAID 1 als Dateiablage zu nutzen. Ohne Festplatten braucht das Setup ca. 30 W, was auch nicht viel mehr ist, als ein NAS + Alix. Mit laufenden Festplatten sinds ca. 45-50 W, aber da ich die selten brauche, lasse ich sie nach 20 Minuten einschlafen. Dann noch Monitoring per Nagios auf den RAID Status, sowie den Stromsparmodus der Festplatten gebaut und fertig. Die Kiste steht jetzt im Keller, ist per Gigabit angebunden und spielt Default Gateway, DHCP Server und DNS Relay. Hintendran hängt dann meine Fritzbox für die Telefonie und den Zugang zum Netz per Kabel. Ich bin mit der Zusammenstellung recht zufrieden. Telefon ist von Basteleien am Server nicht betroffen und der Rechner hat genug Performance für alle Aufgaben. Ich bekomme locker 16-20 MBit über das OpenVPN drüber, was sogar für FullHD ausreichend ist.

Voice Alarming mit Nagios und Asterisk

Bei besonders kritischen Services reicht es nicht aus eine Mail als Alarm zu erhalten. Ein Telefonanruf ist hier deutlich besser geeignet. Sein Handy hat man immer dabei und via Tonwahl lassen sich ggf. gleich Aktionen im Nagios ausführen (ACKNOWLEDGE, disable notficications). Eine kurze Internetrecherche hat mich zu einer Lösung von Netways zu diesem Problem geführt. Die dort beschriebene Lösung habe ich dann noch etwas angepasst, so dass die Anrufe von Asterisk über SIP an eine beliebige Telefonnumer geschickt werden. Hierzu rufe ich das Perlscipt call.pl wie folgt auf:

/usr/bin/printf "%b" "$MESSAGE" | /usr/lib/nagios/contrib/nagios2asterisk/call.pl -n $CONTACTPAGER -c 110 -C "SIP/$CONTACTPAGER@sipgate-out"

Im Asterisk ist unter sipgate-out die Verbindung zu meinem VoIP Provider (in diesem Falle sipgate) definiert. In $CONTACTPAGER steht die anzurufende Telefonnummer und in $MESSAGE die vorzulesende Nachricht. Damit die Alarme vom Nagios etwas besser verständlich werden, habe ich um das ganze noch ein wrapper script drum rum gebaut. Dieses schickt dann in Abhängigkeit vom Nagios Alarmtyp unterschiedliche Nachrichten ans Telefon. Zu den verwendeten Text2Voice Tools (MBROLA, TXT2PHO) gibt es auch einige Anmerkungen: Damit die MBROLA Binaries auf meinem Ubuntu x64 System laufen, musste ich erst noch (auch bei der x64 Version von MBROLA) das Paket libc6-i386 installieren. Ein . (Punkt) im vorzulesenden Text erzeugt eine Pause. Dieses Element sollte man durchaus nutzen um die Nachrichten verständlicher zu gestalten. Ich nutze zum Vorlesen die Stimme de5, da ich diese für am verständlichsten halte.

Don’t use OpenVPN with UDP? Bad performance?

Ich stellte schlechte OpenVPN Performance über ein 100MBit Netzwerk fest. Von meinem Macbook aus erreichte ich via Tunnelblick nur ca. 10 MBit auf einen Linux Server. Nach längeren Tests stellte es sich heraus, dass ein Schwenk auf TCP anstatt von UDP das Problem beseitigt und ich annähernd 100 MBit über den Tunnel übertragen kann. Keine Ahnung, ob das nur in meiner Konfiguration der Fall, ein generelles Problem oder nur bei den Messungen via iperf der Fall ist.

openvpn with cryptodev support

Da ich seit einigen Tagen Besitzer eines Alix 6B2 mit Geode CPU bin, musste natürlich auch die Hardware AES Beschleunigung dieser Plattform ausgenutzt werden. Um das ganze unter Linux zum laufen zu bekommen, ist etwas patching nötig. Unter diversen *BSD Varianten funktioniert das wohl „out of the box“. Es braucht einen Linux Kernel mit geode-aes support und den Cryptodev Patches. Ich habe die OCF Impelementierung und einen Standard 2.6.26.2 Kernel genutzt. Im Archiv ocf-linux-20080704.tar.gz gibt es ein Unterverzeichniss ocf welches nach linux-2.6.26.2/crypto/ocf kopiert werden möchte. Anschließend habe ich den Kernel patch angewendet: linux-2.6.26.2 $ patch -p0 < ../ocf-linux-26-20080704.patch. Laut einem Mailinglisten Eintrag auf der OCF Liste brauchts noch einen Patch für 2.6.26er kernel. Diesen habe ebenfalls eingespielt: linux-2.6.26.2 $ patch -p0 < ../ocf-2.6.26.patch. Nun kann man normal via make menuconfig seinen Kernel konfigurieren. Für crypdodev support auf Geode sind folgende Einstellungen nötig:

CONFIG_OCF_OCF=m
CONFIG_OCF_CRYPTODEV=m
CONFIG_OCF_CRYPTOSOFT=m
CONFIG_CRYPTO_DEV_GEODE=m

Sobald der Kernel gebootet ist, sollte man die Module geode-aes, ocf, cryptodev und cryptosoft laden können und über die cryptotools erste Tests (z.B. cryptotest 100 4096) machen können. Damit nun auch Anwendungen wie z.B. OpenVPN von der Hardwareunterstützung profitieren können, muss openssl gepatcht werden. Ich habe hierzu das Source Paket von openssl aus dem kommenden Debian lenny verwendet, gepatcht und installiert:

# apt-get --default-release=lenny source openssl
# cd openssl-0.9.8g/
openssl-0.9.8g # patch -p0 < ../ocf-linux-20080704/openssl-0.9.8g.patch
openssl-0.9.8g # vi debian/rules
[...]
CONFARGS = --with-cryptodev --prefix=/usr --openssldir=/usr/lib/ssl no-idea no-mdc2 no-rc5 zlib enable-tlsext
[...]
"debian/rules" 173L, 6720C geschrieben
openssl-0.9.8g # dpkg-buildpackage -rfakeroot -uc -b

Sobald die gepatchte openssl Version installiert ist kann man via openssl engine prüfen ob crpytodev Support gegeben ist. Falls ja trägt man noch

cipher AES-128-CBC
engine cryptodev
in seine OpenVPN Config ein und kann von der Hardware Beschleunigung profitieren.

Folgendes Howto hat sehr weitergeholfen:
http://www.docunext.com/wiki/My_Notes_on_Patching_2.6.22_with_OCF