Archiv des Autors: drache

HTTP_X_FORWARDED_FOR

Da ich zurzeit diverse Logfiles durchgehe, fiel auf, dass in allen von apache geführten Logs als Remote-IP 127.0.0.1 auftaucht – die IP von haproxy. Da sich solche Logfiles jedoch immer komisch lesen, hätte ich gern eine andere IP-Adresse als Info.

haproxy liefert diese Informationen weiter, wenn man
option forwardfor
aktiviert.

Für Apache2 gibt es ein passendes Modul, dass genau diese Option umdreht, also den HTTP_X_FORWARDED_FOR header wieder in REMOTE_ADDR einsetzt, sodass keine weiteren Anpassungen in Scripten notwendig sind. Das Modul „rpaf“ installiert sich mit apt-get install libapache2-mod-rpaf und gut ist die Hexenparty gewesen.
Apache neustarten und siehe da, es zeigt wieder richtige IP-Adressen an.

Wer rpaf konfigurieren will: rpaf Config

Flylatex – neues Spielzeug für LaTex

Googel-docs gibts ja schon ne weile, zum gemeinsamen bearbeiten von Office-Dokumenten wie .doc(x).

Nach dem golem.de Artikel zu urteilen, sind da mittlerweile auch die SM-Fetischisten auf den Zug aufgesprungen 😉

So wie sich das ganze entwickelt, könnte man mal einen Blick drauf werfen, ob das irgendwo brauchbar einzusetzen ist – und wenn nur als Online-LaTeX-compiler.

Git Visuaisierung mit gource

Der Alltag eines Programmierers enthält meistens viele bunte Buchstaben – für die Anfänger gibts die auch ohne Syntax-Highlighting in Schwarz/Weiss.
Wem da mal langweilig ist und etwas Grafische Aufmunterung äh Auflockerung braucht, kann sich mal gource anschauen. Das Tool Visualisiert die Logs aus einem der gängigen Code-Verwaltungs-Tools wie SVN, Git oder CSV.
Von der Website herunterladen und Compilieren oder für die Linuxer (weil arbeitsfaul) über apt-get install gource besorgen.

Im Repository dann den Befehl gource eingeben und einige Minuten entspannt zurücklehnen und was zum lachen haben.

Wer das ganze weitergeben will, erstellt sich mithilfe des Manuals und ffmpeg eine mp4-Datei, oder schreibt hier ab:

Git visualization with gource « General-Foo.

PS: Als eine Kurzzusammenfassung für Neugierige kann man das auch mit Avataren versehen und auf youtube hochladen, wie die Entwickler von Minecraft das getan haben.

OpenVPN server

Lieblingsthema, wenn man in vielen verschiedenen „Lan“-Netzen unterwegs ist: die ganzen gesperrten Ports und wie man die am besten umgeht. Bei uns in der Hochschule die Ports zum Mails versenden.

Die schnelle Variante, wenn man irgendwo einen ssh-Server hat und das gewünschte Programm SOCKS-Proxies unterstützt ist folgendes bash-Script aufzurufen

#!/bin/sh
port="8888"
server="user@server"
if [ ! -z $1 ] ; then
port=$1
fi
if [ ! -z $2 ] ; then
server=$2
fi
echo "server: $server port:"$port

ssh -C2qTnN -D $port $server

und im gewünschten Programm den Proxy auf: „SOCKS-Host 127.0.0.1, Port: 8888, Socks v5“ zu stellen.

Oder man geht die andere Variante und richtet sich auf einem (V)Server ein OpenVPN ein. Bei V-Server darauf achten, dass der Server tun-devices unterstützt! Beim letzten Test vor einiger Zeit konnte das HE noch nicht, weshalb OpenVPN dann nicht lief.

Eine gute Anleitung, OpenVPN zu konfigurieren, ist:
OpenVPN server with Username and Password auth | Rob Garth

Unter Linux nimmt man am besten den Network-Manager(openvpn-plugin) und trägt dort die entsprechenden Daten ein.
Unter Windows nimmt man OpenVPN client einrichten | Rob Garth und dort die Config.
Wenn irgendwelche Kompressions-optionen im server gesetzt sind, sind diese tunlichst in der Windows-Config auch zu setzen, sonst kann keine Verbindung hergestellt werden:
write to TUN/TAP [State=AT?c Err=[c:\src\21\tap-win32\tapdrvr.c/2242] #O=7 Tx=[1720695,1714169,0] Rx=[1522,26,0] IrpQ=[1,1,16] PktQ=[0,64,64]]: Der an einen Systemaufruf übergebene Datenbereich ist zu klein. (code=122)
Eine Option ist, z.B. „comp-lzo

Windows 7 braucht eine Extraeinladung: http://fiberworks.com/Support/OpenVPN/tabid/171/language/en-US/Default.aspx.
Man lade sich diese Version von Openvpn herunter, aktiviere im Installer Win Vista Kompatibilität und Start als Admin. Dann kann man Openvpn installieren, alle Fragen nach unsignierten Treibern mit Ja-Installieren beantworten und ausprobieren, ob es tut.

GateOne – ssh Console für den Browser

Wie letztens schon geschrieben, wollte ich mir GateOne anschauen, ein SSH-Terminal im Browser, das mit html5+css+js arbeitet.GateOne setzt auf Websockets, die mit html5 aufgekommen sind und benötigt daher auf einen Server mit Websocket Unterstützung – ein Apache ist da völlig ungeeignet, weder für Websockets noch als Proxy für Websockets. Daher hab ich ja den haproxy, der problemlos Websockets an den passenden Server weiterleitet.

Hier auch eine Anleitung zum Installieren: http://blog.yourtech.us/2012/08/exploring-gateone-browser-ssh-terminal.html

Zur Installation: zuerst wird das Python Framework tornado benötigt, was wohl ein python-Webserver darstellt. Ein
apt-get install python-tornado
unter Debian und gut wars.

GateOne möchte Tornado 2.* verwenden, debian bringt Version 1.* mit und die sind inkompatibel zueinander. Daher muss man pip install --upgrade tornado verwenden.
Weitere Abhängigkeiten : pip install ordereddict
Für die Faulen(mich) gibt es ein *.deb-Paket welches mit wget URL; dpgk -i Datei.deb installiert werden kann.

Zusammengefasst die Installation als root:
pip install --upgrade tornado; pip install ordereddict; wget https://github.com/downloads/liftoff/GateOne/gateone_1.1-1_all.deb; dpgk -i ateone_1.1-1_all.deb

Dann kann das Programm unter /opt/gateone/gateone.py gestartet werden, beschwert sich wenn was fehlt und generiert eine Config-Datei – weil es Spaß macht, crasht GateOne am fehlenden Port 443(https), der meinem Proxy gehört. Außerdem läuft es per default als root – gar nicht gut 😛

Die server.conf wird entsprechend angepasst:

port = 1443
uid = "1000"
gid = "1001"
disable_ssl = True  # das ist Aufgabe meines Proxys
user_dir = "/opt/gateone/data/users"
log_file_prefix = "/opt/gateone/data/logs/webserver.log"
origins = "http://localhost;https://localhost;http://127.0.0.1;https://127.0.0.1;https://apps.dragonhort.de"
url_prefix = "/ssh/" # da die Subdomain auch noch anderweitig verwendet werden soll, wird gateone auf das /ssh/ subverzeichnis verwiesen.

Damit kann alles als User 1000 gestartet werden, die Order /opt/gateone/data/[users,logs,tmp] dem User überlassen, dass dieser Schreiben kann.

Vergisst man in origins die eigentliche Server-Url anzugeben, erhält man eine nette Fehlermeldung mit dem Hinweis, dass von dieser Domain kein Zugriff erfolgen kann.
url_prefix ist genau Richtig, wenn der Server an ein unterverzeichnis ohne Url-Rewriting gebunden wird.

Damit kann der Server per init-script gestartet und betrieben werden.

LowLevelBitCode To JS

Eine Hochsprache auf eine virtuelle Maschine Compilieren und dann mit einem weiteren Compiler den virtuellen Maschinencode nach JS zu codieren ist ein weiterer Ansatz, Anwendungen vom Desktop auf den Browser zu bekommen.
WebGL und Leistungsfähige JS-Engines tun ihr übriges, dass dieser Ansatz auch funktioniert.
Der Compiler, der den LLVM-Code nach JS umwandelt, nennt sich emscripten.

Home · kripken/emscripten Wiki · GitHub.

haproxy einrichten

Die Einrichtung von haproxy ist „relativ“ leicht zu erledigen. Programm aus den Quellen installieren und konfigurieren.

Dabei gab es einige Komplikationen: zuerst einmal benötige ich für Tests Websockets, die von Apache aber nicht unterstützt werden. Diese lassen sich über mehrere Optionen in haproxy filtern und mit einer separaten Regel belegen, sodass sie direkt zum Websocket-Server durchgetunnelt werden. http://blog.silverbucket.net/post/31927044856/3-ways-to-configure-haproxy-for-websockets
Oder: http://blog.exceliance.fr/2012/11/07/websockets-load-balancing-with-haproxy/

Möchte man nun auch SSL verwenden, um die Verbindung zu verschlüsseln, kann man den Ansatz eines vorgeschalteten SSL-Proxies wie stunnel verwenden: http://afitnerd.com/2012/08/14/websockets-over-ssl-stunnel-haproxy-node-js/In einer aktuelleren Version von haproxy ist SSL aber schon implementiert. Die Version muss nur noch Compiliert werden. http://blog.exceliance.fr/2012/04/13/enhanced-ssl-load-balancing-with-server-name-indication-sni-tls-extension/ Diese Installation gestattet auch, verschiedene Zertifikate für unterschiedliche (Sub-)Domains zu verwenden.

Zum Debuggen und lesen der Logs muss noch Hand angelegt werden: http://linuxadminzone.com/enable-or-fix-logging-for-haproxy-load-balancer/

Als Ergebnis kam dann folgende Configdatei heraus: haproxy.cfg

Anmerkung: die pem-files der Zertifikate unterstützen es scheinbar, die Zertifikat-Chain in die Datei hineinzuschreiben in folgender Form:

  • Server certificate
  • Intermediate CA 1 certificate
  • Intermediate CA 2 certificate
  • Intermediate CA n certificate
  • Root CA certificate
  • Private key

Scheint aber nur bei dem default-Zertifikat genommen zu werden, bei allen anderen Zertifikatfiles wird der Chain (scheinbar) nicht beachtet.

Also für das Default-Zertifikat auf jeden Fall ein gültiges Zertifikat mit Chain hinterlegen.

Edit: Beim Einrichten weiterer Server mit Zertifikaten fiel auf, dass die Chain wohl doch pro File geprüft wird, warum auch immer es beim letzten Test ignoriert wurde. De Facto blockieren die meisten Programme, die mit nicht vollständig gültigem SSL-Zertifikat betrieben werden (also self-signed, keine vollständige Supply-Chain, …) und werfen stattdessen mit Fehlermeldungen über ungültige Zertifikate um sich.