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:1080sebagai 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 port1080-C→ compress data (opsional)-q→ quiet (opsional)-N→ jangan eksekusi perintah remote (hanya tunneling)
1) Konfigurasi browser
Firefox (disarankan)
- Open Preferences → General → Network Settings → Settings…
- Pilih
Manual proxy configuration. - Di bagian SOCKS Host isi
127.0.0.1dan port1080. PilihSOCKS v5. - 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 SwitchyOmegaatauFoxyProxydan arahkan ke SOCKS5127.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
- Buka PuTTY → Session:
Host Name (or IP)isiserver.example.com. - Pada menu
Tunnels: pilihDynamic, source port1080, klikAdd→ akan tampilD1080. - Kembali ke
Session→ Save → Open. Sekarang PuTTY membuka SOCKS proxy lokal di127.0.0.1:1080. - 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-agentagar tidak menyimpan password di skrip. - Tambahkan opsi
-o ExitOnForwardFailure=yesuntuk 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
proxychainsdengan pengaturanproxy_dns. - Kecepatan lambat: cek latency ke server; kompresi
-Ckadang 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)
- Konfig Cloudflare Tunnel di server (pasang
cloudflared), buat ingress rule untuksshatau TCP service. - Di Cloudflare Dashboard buat Access policy (Zero Trust) untuk membatasi siapa yang boleh connect.
- 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)
- Install
cloudflareddi server remote. - Buat tunnel dan atur ingress rules untuk mengizinkan akses SSH (TCP) atau buat subdomain yang memakai Cloudflare Access untuk autentikasi.
- 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
- Buat pair SSH (jika belum):
ssh-keygen -t ed25519 -C "aldo@homepc" ssh-copy-id [email protected] - Test koneksi biasa:
ssh [email protected] - Jalankan SOCKS tunnel:
ssh -D 1080 -C -q -N [email protected] - Konfigurasi Firefox: SOCKS5 127.0.0.1:1080 + Proxy DNS
- 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 |
