Socks Proxy mit ssh-forwarding realisieren
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