Ich habe nach einer Lösung gesucht, hinter einer Firewall mit gesperrtem SSH-Port administrativ auf einen SSH-Server zuzugreifen.
Die Lösung ist relative einfach. Man verbindet sich über einen Port, der garantiert nicht geschlossen ist. Dieser ist Port 443(SSL). Der Server muss jetzt nur noch unterscheiden, ob die Anfrage eine SSL oder SSH-Anfrage ist und auf den entsprechenden internen Port weiterleiten.
Da wir hier mit verschiedenen Ports herumspielen, sollten die betroffenen Serverdienste gestoppt werden.
/etc/init.d/apache2 stop /etc/init.d/ssh stop
aptitude install sslh
In der Datei /etc/default/sslh
müssen ein paar Änderungen vorgenommen werden.
Damit der sslh-Daemon überhaupt startet, muss man die Zeile
RUN=yes
eintragen.
des weiteren muss man die DAEMON_OPTS Zeile an die eigenen Bedürftnisse anpassen. Hinter dem Parameter -p
muss man den Namen des Servers eintragen, unter dem er aus dem Internet erreichbar ist.
Wenn alles erledigt ist, kann man sslh starten
/etc/init.de/sslh start
Ob der Daemon wirklich läuft, kann man per netstat -ltunp
herausfinden. Dort müsste etwas wie
tcp 0 0 85.214.76.238:443 0.0.0.0:* LISTEN 31017/sslh
stehen
Man muss sicherstellen, dass der SSH-Daemon auf dem Port 127.0.0.1 lauscht. Deshalb muss man in der Datei /etc/ssh/sshd_config
folgendes zusätzlich eintragen.
ListenAddress=127.0.0.1
Will man über mehrere Adressen auf den SSH-Server zugreifen, einfach die Zeile ListenAddress mehrfach einfügen.
Jetzt noch den SSH-Daemon starten und testen, ob man per SSH über den Port 443 auf den Rechner zugreifen kann.
in der Datei /etc/apache2/ports.conf
muss man alle SSL-Verbindungen auf den localhost umleiten.
<IfModule mod_ssl.c> Listen 127.0.0.1:443 </IfModule>
Jetzt muss man noch den Apache-Server starten und alles funktioniert wieder wie gehabt.
Über netstat -ltunp
kann man jetzt lesen, wie alles funktioniert.
tcp 0 0 85.214.76.238:443 0.0.0.0:* LISTEN 31017/sslh tcp 0 0 127.0.0.1:22 0.0.0.0:* LISTEN 30834/sshd tcp 0 0 127.0.0.1:443 0.0.0.0:* LISTEN 30983/apache2