Halo guys, Ridwan here..
Come again with a new notes update!
Sudah lama saya ingin punya cara akses server yang simpel tidak perlu install SSH client, RDP Client, tidak perlu setup VPN, tidak perlu bawa laptop khusus. Cukup buka browser, akses URL, dan langsung bisa kerja.
Untuk kalian yang belum paham, apa itu "Bastion"
Bastion host itu basically server yang jadi "pintu masuk" ke jaringan internal kita, Biasanya akses ke bastion butuh SSH client atau VPN. Nah, di setup ini, kita expose dua hal langsung ke browser:
- Terminal shell via
ttyd, bisa ngetik command langsung dari browser - GUI browser (Firefox) via
xpra, Firefox yang berjalan di server di-stream agar bisa akses WebApp Internal
Keduanya dibungkus Caddy sebagai reverse proxy (with auth), dengan Cloudflare di depannya untuk keamanan dan DNS management.
Arsitektur Singkat :
Semua service bind ke 127.0.0.1, jadi tidak langsung expose ke internet.
Cukup open satu port 80/443 melalui Caddy yang menjadi satu-satunya pintu masuk dari luar.
Ok, Penasaran cara install nya ?
1. Install ttyd
- Download & install binary
$ wget https://github.com/tsl0922/ttyd/releases/latest/download/ttyd.x86_64
$ sudo chmod +x ttyd.x86_64 && mv ttyd.x86_64 /usr/local/bin/ttyd- Daftarkan menjadi Systemd (/etc/systemd/system/ttyd.service)
[Unit]
Description=ttyd Web Terminal
After=network.target
[Service]
ExecStart=ttyd -W -p 7681 -t fontSize=20 -t rendererType=canvas login
User=root
Restart=always
[Install]
WantedBy=multi-user.target2. Install xpra + Firefox
- Download & install binary
$ sudo apt install xpra firefox-esr- Daftarkan menjadi Systemd (/lib/systemd/system/xpra.service)
[Unit]
Description=Xpra Firefox Service
After=network.target
[Service]
User=root
Environment=DISPLAY=:100
ExecStart=/usr/bin/xpra start :100 \
--bind-tcp=0.0.0.0:10000 \
--html=on \
--start-child="firefox --no-remote" \
--exit-with-children \
--daemon=no
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target3. Install Caddy Reverse_Proxy
- Download & install binary
$ sudo apt install caddy- Edit Caddyfile ( /etc/caddy/Caddyfile )
gui.bastionmu.com {
reverse_proxy localhost:10000
basicauth /* {
[Username] [Passwd-Hash] ## Perhatikan ini - gunakan command "caddy hash-password"
}
}
cli.bastionmu.com {
reverse_proxy localhost:7681
basicauth /* {
[Username] [Passwd-Hash] ## Perhatikan ini - gunakan command "caddy hash-password"
}
}Sesimple itu. Ganti bastion.example.com dengan domain kalian sendiri, dan Caddy akan otomatis urus certificate-nya !
4. Config Cloudflare (Opsional)
Opsi ini opsional, Tetapi jika bastion kalian memiliki IP Public ini menjadi hal wajib untuk dilakukan domain di-point ke server via Cloudflare dengan proxy mode aktif (ikon awan oranye). Btw, Real IP Addr nya jangan dikepoin ya guys !
Beberapa benefit langsung yang kita dapat:
- Real IP Addr server tersembunyi dari publik
- Basic DDoS / BruteForce Protection
- Bisa tambahkan Cloudflare Access untuk autentikasi Zero Trust tanpa modifikasi server.
- Atau tambahkan Black/Whitelist IP, WAF Restrictions, IP/Bot Blocking, atau Security Features lainnya.
Hasilnya.. Setelah semua terpasang, ini yang bisa saya lakukan hanya dari browser:
- ✅ Buka terminal server, cocok dari HP sekalipun
- ✅ Akses Firefox yang berjalan di server, bisa browsing ke Aplikasi internal network
- ✅ Semua tanpa install VPN client, tanpa SSH, RPD client, tanpa port forwarding tambahan yang ribet itu.
- ✅ Bisa dibuka dari device apapun, laptop, tablet, HP, Head Unit Mobil Android.
Satu-satunya requirement di sisi client hanyalah Web Browser modern. Dan Spec/Flavor dari VM Bastion ini cukup low cost hanya "1 vCPU, 1 GiB Memory".
Sekian catatan kali ini,
Thank you sudah membaca tulisan ini.. Semoga bermanfaat!
Best Regards,
Rdw







