Menjadikan Browser lewat SSH SOCKS5 Proxy

SSH menyediakan cara mudah, aman, dan cepat untuk membuat proxy tipe SOCKS5. Dokumen ini menjelaskan cara membuat tunnel SSH yang menjadi SOCKS5 proxy lokal, mengonfigurasi browser (Firefox & Chrome), cara mendeploy agar seluruh aplikasi menggunakan proxy, opsi auto-start, serta catatan khusus jika menggunakan Cloudflare Tunnel.

Penting — konsep singkat

  • Local SOCKS proxy (contoh): SSH membuka port local (mis. 1080). Browser atau app diarahkan ke 127.0.0.1:1080 sebagai SOCKS5.
  • Trafik terenkripsi: semua paket dari aplikasi ke server SSH dienkripsi sampai exit-server (remote server) sebelum menuju internet.
  • Bukan HTTP proxy: SOCKS bekerja di level yang lebih rendah (TCP), cocok untuk HTTP(S) dan protokol lain. Untuk soal header HTTP/HTTPS mungkin butuh solusi tambahan jika ingin proxy HTTP transparan.
     

     

Langkah cepat — perintah SSH yang paling sering dipakai

 
ssh -D 1080 -C -q -N [email protected]

Penjelasan singkat:

  • -D 1080 → membuka SOCKS proxy lokal di port 1080
  • -C → compress data (opsional)
  • -q → quiet (opsional)
  • -N → jangan eksekusi perintah remote (hanya tunneling)

1) Konfigurasi browser

Firefox (disarankan)

  1. Open Preferences → General → Network Settings → Settings…
  2. Pilih Manual proxy configuration.
  3. Di bagian SOCKS Host isi 127.0.0.1 dan port 1080. Pilih SOCKS v5.
  4. Cek opsi Proxy DNS when using SOCKS v5 (agar DNS request ikut lewat tunnel).

Chrome / Chromium

Chrome tidak punya setting SOCKS built-in; gunakan salah satu cara:

  • Gunakan ekstensi seperti Proxy SwitchyOmega atau FoxyProxy dan arahkan ke SOCKS5 127.0.0.1:1080.
  • Atau jalankan Chrome dengan flag (Linux/macOS):
 
google-chrome --proxy-server="socks5://127.0.0.1:1080" 
# atau untuk chromium 
chromium --proxy-server="socks5://127.0.0.1:1080"

2) Windows — PuTTY & setting browser

  1. Buka PuTTY → Session: Host Name (or IP) isi server.example.com.
  2. Pada menu Tunnels: pilih Dynamic, source port 1080, klik Add → akan tampil D1080.
  3. Kembali ke Session → Save → Open. Sekarang PuTTY membuka SOCKS proxy lokal di 127.0.0.1:1080.
  4. Konfigurasi browser sama seperti langkah Firefox/Chrome (atur ke SOCKS5).

3) Membuat seluruh aplikasi melewati SOCKS (system-wide)

Beberapa opsi tergantung OS:

Linux — proxychains-ng

 
# Install (Debian/Ubuntu) 
sudo apt update && sudo apt install proxychains4 
 
# Edit /etc/proxychains4.conf tambahkan baris terakhir: 
# socks5  127.0.0.1 1080 
 
# Contoh jalankan firefox via proxychains: 
proxychains4 firefox

Catatan: tidak semua aplikasi bekerja sempurna dengan proxychains (mis. aplikasi yang langsung pakai kernel-level sockets tertentu).

macOS — Proxifier (GUI, berbayar) atau SSHuttle

  • Proxifier: aplikasi GUI yang bisa memaksa semua koneksi lewat SOCKS5. Cocok untuk pengguna non-CLI.
  • sshuttle: membuat routing IP level (mirip VPN ringan). Contoh:
 
pip install sshuttle 
# contoh jalankan (akan meminta sudo) 
sudo sshuttle -r [email protected] 0/0 -vv

sshuttle bagus untuk membuat sebagian besar trafik IP lewat server remote — cocok jika butuh transparan untuk banyak aplikasi tanpa konfigurasi per-app.

Windows — Proxifier

Proxifier (trial/berbayar) banyak dipakai untuk mengarahkan semua aplikasi lewat SOCKS5. Konfigurasinya cukup mudah: tambahkan proxy 127.0.0.1:1080 (SOCKS5) lalu buat rules untuk aplikasi yang ingin dialihkan.

4) Jika butuh HTTP/HTTPS proxy "lokal" (opsional)

Beberapa aplikasi butuh HTTP proxy (bukan SOCKS). Solusi: jalankan HTTP-to-SOCKS proxy lokal yang meneruskan ke SOCKS5:

  • polipo (lama, masih dipakai) atau privoxy + redsocks.
 
# contoh sederhana: gunakan polipo (jika tersedia) 
sudo apt install polipo 
# konfig: /etc/polipo/config 
# socksParentProxy = "127.0.0.1:1080" 
# proxyAddress = "127.0.0.1" 
# proxyPort = 8123 
 
# Lalu set HTTP Proxy di aplikasi ke 127.0.0.1:8123

5) Auto-start tunnel SSH (systemd on Linux)

Buat unit systemd agar tunnel otomatis start dan restart jika terputus.

 
[Unit] 
Description=SSH dynamic SOCKS proxy 
After=network.target 
 
[Service] 
User=aldo 
ExecStart=/usr/bin/ssh -D 1080 -C -N -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ExitOnForwardFailure=yes [email protected] 
Restart=always 
RestartSec=10 
 
[Install] 
WantedBy=multi-user.target
 
# Simpan sebagai /etc/systemd/system/ssh-socks.service 
sudo systemctl daemon-reload 
sudo systemctl enable --now ssh-socks.service

6) Keamanan & tips praktis

  • Gunakan kunci SSH (public key) dan ssh-agent agar tidak menyimpan password di skrip.
  • Tambahkan opsi -o ExitOnForwardFailure=yes untuk memaksa ssh exit jika port tidak tersedia.
  • Jika membutuhkan high availability, siapkan beberapa server sebagai fallback dan gunakan skrip sederhana untuk fallback otomatis.
  • Periksa kebijakan server/ISP: beberapa penyedia membatasi port atau penggunaan tunneling.

7) Debugging umum

  • Tidak bisa browse: pastikan SSH sudah connect dan listen di port 1080 (ss -ltnp | grep 1080).
  • DNS bocor: aktifkan "Proxy DNS when using SOCKS v5" di Firefox, atau gunakan proxychains dengan pengaturan proxy_dns.
  • Kecepatan lambat: cek latency ke server; kompresi -C kadang membantu untuk trafik text tapi tidak untuk media terenkripsi (HTTPS).

Update:

8) Catatan: Menggunakan Cloudflare Tunnel (contoh Cloudflare Tunnel / cloudflared)

Jika server remote tidak punya IP publik langsung (mis. server di rumah di balik NAT), salah satu solusi adalah menggunakan Cloudflare Tunnel (sebelumnya Argo Tunnel). Namun penting memahami perbedaan:

  • Cloudflare Tunnel (cloudflared) membuat koneksi outbound dari server ke Cloudflare network, sehingga server menjadi reachable lewat domain/hostname yang diatur pada Cloudflare without exposing public IP.
  • Cloudflare Tunnel tidak otomatis membuat SOCKS proxy untuk kita — tunnel tersebut lebih sering dipakai untuk mengexpose web service (HTTP/HTTPS) ke internet melalui Cloudflare.

Cara menggabungkan: SSH over Cloudflare Tunnel (opsi)

Ada dua pendekatan yang umum dipakai ketika Cloudflare Tunnel terlibat:

A. Expose port SSH via Cloudflare Access (recommended untuk akses SSH)

  1. Konfig Cloudflare Tunnel di server (pasang cloudflared), buat ingress rule untuk ssh atau TCP service.
  2. Di Cloudflare Dashboard buat Access policy (Zero Trust) untuk membatasi siapa yang boleh connect.
  3. Client SSH dapat terhubung ke hostname yang disediakan Cloudflare seperti ssh -p 443 [email protected] jika port 22 di-rewrite ke 443 lewat Cloudflare (tergantung konfigurasi).

B. Reverse SSH + Tunnel (jika tidak mau expose SSH secara publik)

Jika server tidak bisa diakses langsung tapi client punya server VPS with public IP, bisa gunakan reverse SSH:

 
# di server lokal (di balik NAT) jalankan: 
ssh -R 2222:localhost:22 [email protected] -N 
 
# lalu dari client (atau anywhere) connect ke vps: 
ssh -p 2222 [email protected] 

Cloudflare Tunnel bisa menggantikan VPS publik di atas jika dikonfigurasi untuk memberi akses TCP/SSH.

Contoh: Menjalankan SSH melalui Cloudflare Tunnel (ringkasan langkah)

  1. Install cloudflared di server remote.
  2. Buat tunnel dan atur ingress rules untuk mengizinkan akses SSH (TCP) atau buat subdomain yang memakai Cloudflare Access untuk autentikasi.
  3. Jika Cloudflare mengizinkan TCP tunneling ke SSH, client bisa tetap memakai perintah ssh -D 1080 -p user@your-tunnel-host (konfigurasi tergantung opsi Cloudflare).

Catatan penting: fitur TCP tunneling atau expose direct SSH lewat Cloudflare mungkin membutuhkan konfigurasi Zero Trust / Access dan tidak selalu tersedia di paket gratis. Selalu periksa dokumentasi Cloudflare dan kebijakan keamanan organisasi.

9) Contoh kasus lengkap (macOS / Linux) — step-by-step

  1. Buat pair SSH (jika belum):
     
    ssh-keygen -t ed25519 -C "aldo@homepc" 
    ssh-copy-id [email protected]
  2. Test koneksi biasa: ssh [email protected]
  3. Jalankan SOCKS tunnel:
     
    ssh -D 1080 -C -q -N [email protected]
  4. Konfigurasi Firefox: SOCKS5 127.0.0.1:1080 + Proxy DNS
  5. Jika ingin auto-start: buat systemd service seperti di atas atau gunakan launchd plist di macOS.

10) Troubleshooting cepat

Masalah Penyebab umum Solusi
SSH tidak connect DNS/port/credential Test ssh -v, cek firewall/port forwarding
Browser tetap pakai IP lokal (DNS leak) DNS tidak lewat SOCKS Aktifkan Proxy DNS di Firefox / gunakan proxychains dengan proxy_dns
Kecepatan lambat Latency / bandwidth server Pindah server atau gunakan kompresi/optimasi
 

The power of documents

Kami sajikan dengan bahasa yang mudah dengan disertai command line yang bisa di copy-paste sehingga memudahkan untuk melakukan modifikasi command line