Nach Hause telefonieren – Zugriff von unterwegs

Also prinzipiell ganz einfach – Portweiterleitung an der FritzBox einrichten, entsprechende Dienste auf sheeva laufen lassen und schon fertig. Der Teufel liegt im Detail: unterwegs ist meist nur ein Zugriff auf Port 443 (https) möglich (oft auch Port 80 http – da aber der Traffic hier öffentlich einsehbar ist, schauen viele Firewalls sich die Pakete an und machen zu, wenn sie kein http-Protokoll sehen. Ein ssh-Zugang funktioniert so meist nicht. Über Port 443 geht verschlüsselter Verkehr, da kann eh niemand reinschauen. Aber ich will beides, ssh und https. Das Zaubertool hierfür ist sslh. Vorher müssen wir allerdings einiges erledigen.

Achtung: wir basteln hier an unserem Zugang zum System, wenn es dumm läuft, sind wir draussen. Ganz Vorsichtige schalten sich also für die Zeit noch ein telnet frei oder starten einfach einen sshd von Hand auf einem ganz anderen Port.

SSH einrichten

Die Konfig für den SSH-Server finden wir in /etc/ssh/sshd_config, Port 22 beschränke ich auf lokale Verbindungen – hier dockt später der sslh an. Um auch ohne sslh noch auf das System zu kommen, lasse ich den sshd zusätzlich noch auf Port 2022 lauschen. Dafür braucht es diese beiden Zeilen in der config:

ListenAddress 127.0.0.1:22
ListenAddress 0.0.0.0:2022

Ob das geklappt hat, kann man (nach einem Neustart des sshd) einfach anhand des netstat sehen:

root@sheeva:/# netstat -alpn |grep tcp | grep ssh
tcp        0      0 127.0.0.1:22            0.0.0.0:*               LISTEN      834/sshd        
tcp        0      0 0.0.0.0:2022            0.0.0.0:*               LISTEN      834/sshd        
tcp        0      0 127.0.0.1:22            127.0.0.1:57597         ESTABLISHED 4898/sshd: mathias

Die ersten beiden Zeilen zeigen, dass der sshd auf Port 22 auf localhost und Port 2022 auf allen interfaces lauscht. Die letzte Zeile ist meine aktuelle Session, ich bin schon über localhost:22 drin, also läuft offenbar der sslh schon.

Webserver einrichten

Passend zum sheeva ist das bei mir ein lighttpd. Dem muss ich also nun ssl beibringen und ihn auf die richtigen Ports biegen. Beides recht einfach, für Ersteres legen wir ein Verzeichnis /etc/lighttpd/certs/ und erzeugen dort das Zertifikat:

openssl req -new -x509 -keyout lighttpd.pem -out lighttpd.pem -days 3000 -nodes

Das ist natürlich nur ein self-signed, d.h. jeder Browser wird beim Zugriff da drauf erstmal genau deswegen meckern. Für mich reichts aber, der Verschlüsselung tut das keinen Abbruch.

Dann machen wir das Zertifikat noch beim Webserver bekannt und regeln die Sache mit den Ports, alles in der lighttpd.conf:

$SERVER["socket"] == "127.0.0.1:8443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/certs/lighttpd.pem"
}

Den lighttpd neu starten und wieder per netstat prüfen:

root@sheeva:/# netstat -alpn |grep tcp |grep lighttpd
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      2556/lighttpd   
tcp        0      0 127.0.0.1:8443          0.0.0.0:*               LISTEN      2556/lighttpd

sslh einrichten

Der letzte Schritt ist nun der Einfachste. In der /etc/default/sslh steht die Konfig vom sslh, für mich sind das die beiden Zeilen:

RUN=yes
DAEMON_OPTS="-v -u sslh -p 0.0.0.0:443 -s 127.0.0.1:22 -l 127.0.0.1:8443 -P /var/run/sslh.pid"

Also der sslh lauscht an allen Interfaces auf Port 443, schickt ssh-Traffic an localhost:22 und https-Traffic an localhost:8443, an die beiden Ports hatten wir ja zuvor sshd und lighttpd gebunden.

Jetzt noch einmal von Aussen einloggen und schauen ob alles geht.

Die Hamburgerin

Kommst Du neu nach Hamburg, so solltest Du einiges wissen über die Stadt und ihre Bewohner. Beginnen wir mit den Frauen:

Hamburgs Frauen flirten nicht. Nicht weil sie es nicht können. Flirten ist die erotisch angehauchte Variante des Smalltalks, des leichten Gesprächs, der Plauderei. Hamburger Frauen kommunizieren zielgerichtet, jedenfalls wenn es um die Auswahl eines Mannes geht. Es werden kurz die Eckdaten abgecheckt und wer als potentieller Vater ihrer Kinder oder wenigstens als Sexualpartner übergangsweise nicht in Frage kommt – der ist halt draussen. Mann erkennt das am Blick, der erst prüfend, dann sehr schnell eisig wird. Ab hier ist jede Liebesmüh’ vergebens. An so jemanden verschwendet die Hamburgerin keine Zeit. Das kann auch ein Vorteil haben: während woanders ein Flirt ein Flirt ist, ist in Hamburg ein Flirt schon ziemlich dicht an einer Bettgeschichte dran. Eigentlich kann Mann es jetzt nur noch selber versauen.

Hamburg hat eine sehr lange Kaufmannstradition. Das färbt natürlich ab. Was beim ersten Date anderswo zwischen “unschön” und “geht gar nicht” angesiedelt ist – Fragen nach dem materiellen Status, meist versteckt in Erkundigungen nach Größe und Lage der Wohnung und Marke des Autos, sind in Hamburg durchaus üblich. Auch die Prioritäten werden anders gesetzt, man sollte sich nicht wundern, dass sich eine Hamburgerin als recht anspruchslos bezeichnet, weil sie einen Mann sucht der nur treu, intelligent, gebildet, zuverlässig, sportlich usw. ist: schliesslich kommen hier ja keine materiellen Anforderungen vor.

Die Hamburgerin liebt ihr Hamburg. Auch dann noch, wenn sie gerade auf einen Haufen Hundescheisse (oder gebrauchte Kondome, das variiert je nach Stadteil) ausgerutscht und mit dem Gesicht direkt in einen Müllhaufen gefallen ist. Beim Aufstehen wird sie immer noch versichern, dass Hamburg die schönste Stadt der Welt ist. Kritisiere niemals (niemals!) Hamburg in Gegenwart einer Hamburgerin.

Erkennt eine Hamburgerin, dass du eine andere Sicht auf die Dinge (welche auch immer) hast, wird sie dir ihren Standpunkt nochmal ausführlich erklären. Das ist nicht böse gemeint und auch kein Zeichen, dass sie dich für doof hält. Es ist für die Hamburgerin nur einfach unvorstellbar, dass es einen andere Sichtweise als die ihre geben könnte. Sie hat gar keine andere Möglichkeit als anzunehmen, dass ihr Gegenüber ihren Standpunkt einfach nicht verstanden hat. Erklärt dir eine Hamburgerin ihren Standpunkt, höre nur zu, sage nichts mehr. Vielleicht nicken.

Die Hamburgerin achtet sehr auf das Äussere. Das ihre und das ihrer Mitmenschen. Die Vorbereitung der Hamburgerin für einen Lauf an der Alster entspricht vom Aufwand her in etwa der Vorbereitung einer Wienerin auf den dortigen Opernball. Nur dass in Hamburg das Abendkleid durch einen (etwa gleich teuren) Trainingsanzug ersetzt wird. Gelaufen wird übrigens tatsächlich an der Alster. Nicht um die Alster. Eine ganz Runde ist einfach nicht machbar, Kondition der Hamburgerin und/oder ihrer Schminke geben das gar nicht her. Äussere Makel bei ihren Mitmenschen spricht die Hamburgerin direkt und deutlich an, auf entsprechende Situationen in der Öffentlichkeit sollte man vorbereitet sein. Wer auffallend entstellt ist, zum Beispiel durch eine kleine Narbe am Kinn als Folge eines Schulhofunfalls von vor 30 Jahren, wird spätestens beim ersten Date darauf angesprochen werden. Was anderswo ein Affront ist hier nur ein Zeichen von Interesse. Die Hamburgerin will nur wissen, wie man mit einem derart gezeichneten Gesicht überhaupt leben kann.

Sheeva: Dhcp- und DNS-Server

Der sheeva übernimmt bei mir die Aufgaben von dhcp- und dns-Server. Warum lasse ich das nicht die FritzBox machen? Ich will halt sehen (und reagieren), wenn bestimmte Geräte im Netz auftauchen. Neue Geräte sieht halt der dhcp-Server zuerst. Jedenfalls solange sich diese um eine IP-Adresse bemühen, was heutzutage ja zumeist üblich ist. Also habe ich dhcp- und dns-Server auf der FritzBox abgeschaltet.

Mein Netz ist 192.168.178.255/8, die FritzBox hat die 192.168.178.1, sheeva hat die 192.168.178.2.

Auf dem sheeva wird der dnsmasq installiert:

apt-get install dnsmasq
Konfiguriert wird der dnsmasq über die /etc/dnsmasq.conf. Dort muss einiges angepasst werden:

local=/fritz.box/ # das ist ist die domain, für die sich der dhcp-server verantwortlich fühlt

domain=fritz.box # diese domain bekommen die Clients per dhcp verpasst

dhcp-range=192.168.178.20,192.168.178.150,255.255.255.0,12h # in dem Bereich werden ip-adressen vergeben, lease hält 12h

read-ethers # in /etc/ethers registrieren wir dann die mac-Adressen

dhcp-option=3,192.168.178.1 # ip adresse des routers, hier die FritzBox

dhcp-option=42,192.168.178.1 # ntp macht auch die FritzBox

dhcp-script=/etc/local/dhcp-action.sh

Das wars schon. Unsere Clients machen wir dem dnsmasq nun in der /etc/hosts und der /etc/ethers bekannt, z.B. meine Squeezebox sieht dort so aus:

/etc/hosts: 192.168.178.25  squeezebox

/etc/ethers: 00:04:20:07:f2:f0 192.168.178.25

Wenn jetzt also die MAC-Adresse 00:04:20:07:f2:f0 im Netz nach einem dhcp-Server für ihre IP-Adresse sucht, wird sich der sheeva melden und ihr die 192.168.178.25 verpassen. Ein Heimnetz ist ja meist recht übersichtlich, daher habe ich es mir angewöhnt, alle meine Geräte in den beiden Dateien zu registrieren. So können sie sich per DHCP ihre Konfiguration holen (vereinfacht die Installation des Client), anderseits haben sie immer feste Namen und Adressen (vereinfacht das Handling im Netz). Meldet sich ein unbekanntes Gerät, bekommt es halt die nächste freie IP-Adresse.

In der /etc/dnsmasq.conf hatte ich noch eine Zeile mit Verweis auf das Script /etc/local/dhcp-action.sh erwähnt. Dieses Script wird vom dnsmasq immer aufgerufen, wenn ein Gerät neu auftaucht, verschwindet oder sich ändert.

Bei mir sieht dieses Script ganz einfach aus:

root@sheeva:/etc# cat /etc/local/dhcp-action.sh
#!/bin/sh

echo $@ >> /tmp/dhcp.log

if [ `grep -c $2 /etc/ethers` -eq 0 ]; then
echo "unkown device $@" | mail -s "DHCP: unknown device" m...@gmx.de
fi

if [ $1 != "del" -a $2 = 00:04:20:07:f2:f0 ]; then
/etc/local/wake-the-ghost.sh &
fi

Bei unbekannten Geräten bekomme ich eine Info (Konfiguration des postfix ist etwas komplizierter, folgt noch…).
Meldet sich das Gerät mit der MAC-Adresse 00:04:20:07:f2:f0 (ja genau, die Squeezebox), dann wecken wir den ghost auf
(wake-on-lan kommt auch noch…). Das Script bekommt beim Aufruf immer 4 Parameter:

  1. String old|del|add welcher angibt, ob das Gerät geändert, hinzugefügt oder gelöscht wurde
  2. die MAC-Adresse
  3. die IP-Adresse welche dnsmasq hier vergeben hat
  4. und den DNS-Namen

Hier kann man sich also diverse eigene Spielereien ausdenken.