ssh und tor

reinhard@finalmedia.de Wed 06 Oct 2021 03:55:27 PM CEST # ssh weiterhin ohne die Verwendung von torify nutzen und die bestehende .ssh/config Konfigurationsdatei weiterverwenden. # generell sinnvoll, um auch hosts via ssh zu erreichen, wenn sich diese hinter eine NAT befinden.

Ich setze voraus, dass der tor daemon auf deinem host bereits installiert und konfiguriert ist, sowie aktiv ist und somit an den loopback bindet und an Port 9050 hört. Sollte das nicht der Fall sein, dann:

apt-get update
apt-get install tor

So. Nun müssen wir zunächst netcat in der BSD version installieren, damit das -x flag zur Verfügung steht. Die unter debian standardmäßig installierte version von netcat (nc) bietet diese Funktion nicht.

apt-get update
apt-get install netcat-openbsd

Nun die Datei ~/.ssh/config bearbeiten und um diese Zeile ergänzen. Dabei natürlich dann eine gültige Onionadresse verwenden. (Die hier genannte onion URL ist beispielhaft und ein Zufallsstring!). Die entscheidene Zeile ist der Eintrag für den Host *.tor, dem dann ein ProxyCommand zugewiesen wird. Alle nachfolgenden Hosts, die dann auf das Suffix .tor enden, werden dieses ProxyCommand vererbt bekommen.

nano ~/.ssh/config

# alle hostnames mit dem suffix .tor mit diesem ProxyCommand verbinden
Host *.tor
	ProxyCommand netcat -x 127.0.0.1:9050 %h %p


# jetzt ein Beispiel für einen torifizierten ssh host
Host beispiel.tor
	User example
	Port 22
	Compression yes
	Hostname npe2m82i8vccrebw1avgj5u4fj0eh7u6pkl7rwv308fjie54u812wak1.onion


# Weitere beispielconfig von normalen ssh hosts
Host sonstiges
	User alice
	Port 22
	Compression yes
	Hostname example.com


# Noch ein Beispiel eines "normalen" ssh hosts	
Host test123
	User bob
	Port 22
	Compression yes
	StrictHostKeyChecking no
        UserKnownHostsFile /dev/null
        KexAlgorithms curve25519-sha256
        HostKeyAlgorithms ssh-ed25519
        Ciphers chacha20-poly1305@openssh.com
        MACs hmac-sha2-512
        TCPKeepAlive yes
        ServerAliveInterval 10
	Hostname example.com

+

+

Immer wenn nun versucht wird, nach beispiel.tor eine ssh Verbindung aufzubauen,...

ssh beispiel.tor

...wird dazu von ssh automatisch im hintergrund netcat als ProxyCommand verwendet und damit letztlich der tor daemon auf dem loopback device dazu veranlasst, die übergebene onion auflösen und zu prozessieren.

Auf diese Weise ist also ein bequemer SSH Login auf via tor erreichbar ssh hosts möglich, ohne separat dem ssh command ein torify voranstellen zu müssen.

Wie macht man nun einen host via tor auch via ssh öffentlich erreichbar, wenn sich der host z.b. hinter einer NAT befindet?


# auf dem betreffenen host tor installieren
# und stes automatisch mitstarten
apt-get install tor
systemctl enable tor

# hidden service zu ssh erstellen
mkdir /var/lib/tor/hiddenservice_ssh
chown debian-tor:debian-tor /var/lib/tor/hiddenservice_ssh
chmod 2700 /var/lib/tor/hiddenservice_ssh

# hidden service in tor config adden
cat << +++EOF+++ | tee -a /etc/tor/torrc
HiddenServiceDir /var/lib/tor/hiddenservice_ssh
HiddenServicePort 22 127.0.0.1:22
+++EOF+++

# tor daemon neu neustarten
service tor restart

# onion url ausgeben
# die angezeigte onion url ist dann öffentlich (via tor) erreichbar
cat /var/lib/tor/hiddenservice_ssh/hostname