Socks Proxy mit ssh-forwarding realisieren

Aus Si:Wiki von Siegrist SystemLösungen - Informatik und Rezepte
Wechseln zu: Navigation, Suche

Ein SOCKS-Proxy (SOCKS4 oder SOCKS5) kann einfach mit einem SSH-Tunnel aufgebaut werden:

ssh -D8080 -N tunnel-user@proxy-server.

Im Browser wird dann in den Proxy Einstellungen localhost als SOCKS-Host (v4 oder v5) mit Port 8080 eingetragen.
Soll der Tunnel von der Kommandozeile genutzt werden, kann man die mit:

export http_proxy=http://localhost:8080 https_proxy=https://localhost:8080

oder für Programme die SOCKS bevorzugen, z.B. ...

export http_proxy=socks5://localhost:8080 https_proxy=socks5://localhost:8080


Damit über diesen Tunnel wirklich nur 'getunnelt' werden kann, sind auf der Serverseite einige Vorkehrungen zu treffen:

sshd_config
Den User und die Restriktionen in einen Match-Block:

Match User tunnel-user
    AllowTcpForwarding yes
    X11Forwarding no
    PermitTunnel no
    GatewayPorts no
    AllowAgentForwarding no

User Account
Der User tunnel-user darf natürlich keine Shell erhalten. Um trotzdem ein Login zu ermöglichen, wird dem User als Shell /bin/false zugewiesen. Das funktioniert aber nur, wenn der Client beim SSH Verbindungsaufbau den Parameter -N setzt.
Aus der SSH Manpage:

-N      Do not execute a remote command.  This is useful for just forwarding ports (protocol
             version 2 only).


Nun den Benutzer Account erstellen:

useradd -m -s /bin/false tunnel-user

Das sieht dann in der /etc/passwd etwa so aus:

tunnel-user:x:1004:1004::/home/tunnel-user:/bin/false