Jam pertama setelah VPS jatuh ke tangan: panduan lengkap dari bare metal jadi aman dan siap pakai (biar OpenClaw-mu makin aman)
VPS baru beli itu ibarat pintu yang gak dikunci, anak-anak script kiddie dari seluruh dunia lagi nyoba ngetuk. Artikel ini bakal ngajarin kamu buat ngunci pintu itu rapat. Biar “lobak laut” (openclaw) kamu gak kabur ke mana-mana dan nggak ngelakuin hal aneh-aneh.
0. Sekilas Pengantar
Baru aja beli VPS, keburu semangat ngedapetin IP dan password root, terus apa lagi nih?
Kebanyakan orang langsung ngelakuin ini: buru-buru install software, langsung deploy proyek.
Ini kebiasaan yang bahaya.
VPS kamu punya IP publik, artinya siapa aja di seluruh dunia bisa nyoba nyambungin ke situ. Dan dengan konfigurasi default-nya:
- Port 22-nya kebuka untuk umum
- Username-nya root yang udah rahasia umum
- Cuma nyisain satu password buat jadi penjaga
Setiap hari ada banyak banget skrip otomatis yang nyiap-nyiap IP, nyoba brute-force pake password-password umum. Dari detik pertama server kamu online, itu udah pada nyerang.
Jadi, hal pertama yang harus kamu lakuin abis dapet VPS bukan install software, tapi ngelakuin inisialisasi keamanan.
1. Target yang Dicapai
Target dari artikel ini adalah:
- ✅ Bangun akses remote yang aman: login SSH pakai key + bukan port default
- ✅ Bikin user biasa: hindari pakai root langsung
- ✅ Setup firewall: buka port yang perlu aja
- ✅ Aktifkan akselerasi jaringan: BBR bikin koneksi makin ngebut
- ✅ Cegah brute force: fail2ban auto-blokir IP jahat
Kalau semua udah beres, VPS kamu punya fondasi yang kuat buat deploy macem-macem service dengan tenang.
2. Rencana & Pemikiran
Kenapa mesti setup gini?
VPS yang baru dibeli itu ibarat rumah kosongan baru diserahin:
| Kondisi Default | Risiko | Solusi Kita |
|---|---|---|
| Login langsung root | Hak akses kelewat besar, risiko fatal kalau salah klik | Bikin user biasa + sudo |
| Login pakai password | Rawan di-brute force | Login pakai SSH Key |
| Port default 22 | Jadi incaran scanner | Ganti ke port non-standar |
| Firewall dimatikan | Semua port terekspos ke luar | UFW: cuma buka port yang dipakai |
| Jaringan bawaan | Packet loss tinggi, latency besar | Algoritma kontrol kongesti BBR |
Alur Kerja Keseluruhan

Kita ngopreknya ngikut urutan ini, dan di tiap langkah aku jelasin kenapa kita lakuin begini.
3. Langkah-langkah Eksekusi
3.1 Login Pertama Kali & Update Sistem
Dapetin IP Server
Setelah beli VPS, provider bakal ngasih kamu:
- Alamat IP: contohnya
192.168.1.100 - Port: biasanya
22(beberapa provider kadang ubah ke port lain) - Username: umumnya
root - Password: deretan karakter acak yang sudah di-generate

Koneksi SSH
Pengguna Mac / Linux: buka Terminal, langsung ketik:
1 | ssh root@你的服务器IP |
Pengguna Windows:
- Windows 10/11 udah bawaan OpenSSH, jadi kamu bisa langsung pakai perintah di atas di PowerShell atau CMD
- Atau pakai tools kayak Termius, MobaXterm, dll.
Saat pertama kali connect, nanti muncul prompt konfirmasi fingerprint kayak gini:
1 | The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established. |
Intinya dia nanya: “Aku belum kenal mesin ini, kamu yakin mau connect?”
Ketik yes lalu tekan Enter. Terus masukkan password (catatan: pas ngetik nggak ada karakter yang muncul, ini fitur keamanan normal kok), lalu Enter.

Kalau kamu lihat prompt kayak gini, berarti login berhasil:
1 | Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64) |
💡 Kenapa harus cek fingerprint?
Ini untuk mencegah “serangan man-in-the-middle”. Saat pertama kali connect, catat fingerprint server. Nanti kalau pas connect lagi fingerprint-nya berubah, berarti ada kemungkinan orang lain menyamar sebagai server kamu.

Kenalan dengan server kamu
Setelah login, cek dulu kondisi dasar mesin ini:
1 | # 查看系统版本 |

Catat info-info ini, nanti berguna banget buat nge-trouble shooting kalau ada masalah.
Update sistem
Sudah ngerti kondisi servernya? Langkah pertama yang paling penting adalah update sistem. Image sistem di server baru mungkin masih versi dari beberapa bulan lalu, dan bisa jadi sudah ada patch keamanan yang rilis sejak itu:
1 | # 更新软件包列表 + 升级所有软件 + 清理 |
Penjelasan parameter:
apt update: Update indeks paket softwareapt full-upgrade: Upgrade semua software, termasuk kernel-y: Auto-confirm, jadi nggak perlu ketik “yes” manualapt autoremove: Hapus dependency yang udah nggak kepakaiapt autoclean: Bersihin cache installer yang udah di-download

⏱️ Langkah ini mungkin butuh beberapa menit, tergantung seberapa banyak update-nya. Kadang di tengah-tengah ada konfirmasi, tinggal ikutin aja arahannya.
Cek apakah perlu reboot
Setelah update kernel, biasanya butuh reboot biar perubahannya berlaku:
1 | # 检查是否需要重启 |

Kalau ada notifikasi untuk reboot:
1 | reboot |
Setelah reboot, kamu perlu connect SSH lagi.
Install tools yang sering dipakai
1 | apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch |
Fungsi tools ini buat apa sih:
| Tool | Fungsi | |
|---|---|---|
sudo |
Bikin user biasa jalanin command admin | |
curl / wget |
Download file | |
git |
Version control | |
vim |
Text editor | |
htop |
Process monitor yang lebih cakep | |
tree |
Tampilin struktur direktori pohon | |
net-tools |
Network tools (ifconfig, netstat, dll) | |
ufw |
Firewall simpel dan gampang dipakai | |
fail2ban |
Anti brute-force | |
neofetch |
Tampilin info sistem dengan cakep | |
![]() |
3.2 Membuat user non-root
Kenapa nggak langsung pakai root?
Izin user root itu terlalu luas, sedikit salah klik rm -rf / semua bisa hilang seketika. Untuk operasi sehari-hari, mendingan pakai user biasa. Kalau butuh izin admin, baru gunakan sudo.
Lobster (openclaw) itu ibarat monster, masa sih berani kasih akses root ke dia?
Membuat user
1 | # 创建用户(把 ittinker 换成你想要的用户名) |
Sistem bakal minta kamu buat set password dan ngisi beberapa info:
1 | New password: # 输入密码(不会显示) |

Ngasih izin sudo
1 | # 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户 |
Coba dicek dulu:
1 | # 切换到新用户 ittinker 换成你自己上面创建的那个用户 |
Kalau output-nya root, berarti konfigurasi sudo-nya udah berhasil.

💡 Tips Kecil
Ketik
exitbuat balik lagi ke user root. Untuk langkah-langkah selanjutnya, kita tetap pakai root buat konfigurasi, nanti setelah kelar baru balik lagi ke user biasa.
3.3 Setup login SSH pakai SSH Key
Autentikasi Key vs Autentikasi Password

Autentikasi pakai key jauh lebih aman dibanding password:
- Password bisa di-brute force, tapi key nyaris mustahil
- Nggak perlu input password tiap kali login, jauh lebih praktis
- Biarpun password bocor, selama nggak punya private key tetep nggak bakal bisa login
Langkah 1: Bikin pasangan key di lokal
Jalankan ini di komputer kamu (bukan di server):
1 | # 生成 ED25519 密钥(推荐,更安全更快) |
Nanti bakal muncul prompt kayak gini:
1 | Enter file in which to save the key (/Users/你/.ssh/id_ed25519): |
Tinggal tekan Enter aja buat pakai path default. Di sini kita pakai ./ittinker, artinya filenya bakal disimpen di folder saat ini dengan nama ittinker.
1 | Enter passphrase (empty for no passphrase): |
Kamu bisa set passphrase buat kunci ini (bikin ada lapisan keamanan ekstra), atau langsung tekan Enter buat dikosongin.

Setelah selesai dibikin, kamu bakal nemu dua file di direktori ~/.ssh/ (ini nama file default-nya kalau tadi kamu tekan Enter):
id_ed25519: Private key, jangan sampai bocor ke siapa pun ya!id_ed25519.pub: Public key, ini yang harus di-upload ke server.
💡 ed25519 vs RSA
ed25519ini algoritma yang paling direkomendasiin sekarang. Dibanding RSA jadul, ini lebih aman dan ukuran kuncinya lebih pendek. Tapi kalau sistem kamu terlalu lawas dan belum mendukung, bisa pakaissh-keygen -t rsa -b 4096.
Sedikit trivia: kunci yang dibikin ed25519 itu ukurannya kecil, sedangkan file RSA itu gedean banget. Waktu itu aku tanya ke AI baru tau, ternyata ukuran file nggak masalah, itu cuma beda algoritma aja.
Langkah Kedua: Upload Public Key ke Server
Cara A: Pakai ssh-copy-id (Direkomendasiin)
1 | # 在你的电脑上执行 |
Setelah masukin password, public key bakal otomatis tersalin ke server.

Cara B: Salin Manual
Kalau ssh-copy-id nggak bisa dipakai, kamu bisa ngelakuinnya secara manual:
1 | # 1. 在你的电脑上,查看公钥内容 |
Copy isi output-nya (teks panjang yang diawali dengan ssh-ed25519).
1 | # 2. 在服务器上,为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名 |
⚠️ Permission itu penting banget!
SSH itu ketat soal permission file:
- Direktori
.ssh: 700 (cuma user sendiri yang bisa akses)- File
authorized_keys: 600 (cuma user sendiri yang bisa baca dan tulis)Kalau permission-nya nggak pas, SSH bakal nolak buat login pake kunci.
Langkah Ketiga: Tes Login Pake Kunci
Buka jendela terminal baru (biarin jendela lama tetap kebuka, jangan ditutup, jaga-jaga kalau konfigurasinya salah masih bisa dibenerin), terus coba tes login pake kunci:
1 | ssh ittinker@你的服务器IP |
Kalau kamu bisa login tanpa dimintain password, berarti konfigurasi kuncinya udah berhasil! 🎉
(Mungkin kamu bakal dimintain password kunci kalau tadi nyetting passphrase buat private key-nya, ini normal kok)

Di sini kita nambahin parameter -i, soalnya kunci ini bukan disimpen di path default, tapi di path saat ini. Kalau nggak ditentuin, sistem bakal make kunci default.
3.4 Ngerapatkan Keamanan SSH
Sekarang login pake kunci udah jalan, ayo kita keraskan keamanan SSH-nya:
- Ubah port default (biarin nggak gampang ke-scan)
- Matiin login pake password
- Larang root buat login langsung
Edit konfigurasi SSH
1 | # 备份原配置 |

Cari dan ubah konfigurasi berikut (beberapa mungkin di-comment, jadi hapus tanda # di depannya):
1 | # 修改端口(选一个 1024-65535 之间的数字) |

Simpan dan keluar (ctrl + o).
Di Nano, cara simpannya tekan ctrl + o, nanti bakal dimintain nama file, langsung tekan Enter aja. Kalau mau keluar, tekan ctrl + x.
Restart service SSH
1 | systemctl restart sshd.service |
⚠️ Penting!
Jangan tutup terminal yang sekarang! Tes dulu konfigurasi barunya di jendela baru, bisa login normal nggak:
1 ssh -p 22000 yourname@你的服务器IPKalau bisa login, baru tutup jendela yang lama. Kalau nggak bisa masuk, kamu masih bisa perbaiki konfigurasinya di jendela lama.
Kalau kamu beli server tipe lightweight, kemungkinan besar port ini nggak bisa diganti. Kalau ECS tradisional biasanya bisa diubah, jadi perhatikan ya.
3.5 Setup Firewall UFW

UFW (Uncomplicated Firewall) itu tool firewall bawaan Ubuntu, settingnya gampang tapi fiturnya powerful.
Konfigurasi dasar
1 | # 设置默认策略:拒绝所有入站,允许所有出站 |
Aktifkan firewall
1 | ufw enable |
Nanti muncul prompt kayak gini:
1 | Command may disrupt existing ssh connections. Proceed with operation (y|n)? |
Ketik y buat konfirmasi.
Cek status
1 | ufw status verbose |

23022 itu typo saya, kalian sesuaikan saja pakai nilai masing-masing ya
Output-nya kira-kira begini:
1 | Status: active |
Cheat Sheet Perintah yang Sering Dipakai
1 | # 查看状态 |
3.6 Mengaktifkan BBR untuk Mempercepat Koneksi
BBR (Bottleneck Bandwidth and Round-trip propagation time) itu algoritma kontrol kemacetan TCP buatan Google, bisa ningkatin performa jaringan kamu secara signifikan.
Aktifkan Sekali Klik
1 | # 添加 BBR 配置 |
Cek Apakah Sudah Aktif
1 | # 查看当前拥塞控制算法 |
Output-nya harusnya:
1 | net.ipv4.tcp_congestion_control = bbr |
1 | # 确认 BBR 模块已加载 |
Output-nya kira-kira begini:
1 | tcp_bbr 20480 3 |
💡 Efek BBR
Setelah BBR aktif, apalagi kalau jaringannya lagi nggak stabil atau ping-nya tinggi, kamu bakal langsung ngerasain:
- Kecepatan download makin ngebut
- Operasi SSH jadi lebih mulus
- Loading halaman web jadi lebih cepat

3.7 Setup fail2ban buat Cegah Brute Force
fail2ban ini bakal ngawasin log server kamu, kalau nemu IP yang gagal login berkali-kali, bakal otomatis di-ban.
Konfigurasi Dasar
1 | # 复制默认配置(不要直接修改 jail.conf) |
Cari bagian [sshd], pastikanin konfigurasinya kayak gini:
1 | [sshd] |

Menjalankan service
1 | # 重启 fail2ban |
Cek status
1 | # 查看 fail2ban 状态 |

Output-nya kira-kira kayak gini:
1 | Status for the jail: sshd |
Perintah yang sering dipakai
1 | # 手动封禁 IP |
3.8 [Opsional] Kelola banyak server pakai SSH Config
Kalau kamu punya banyak server, capek banget kan harus ketik ssh -p 22000 user@ip tiap kali mau connect? Kamu bisa sederhanain pakai SSH Config.
File konfigurasi
Edit ~/.ssh/config di komputer lokal kamu:
1 | vim ~/.ssh/config |
Tambahin konfigurasi ini:
1 | # 第一台服务器 |
Cara pakainya
Sekarang kamu bisa langsung connect pakai alias:
1 | # 连接第一台服务器 |
Gak perlu lagi pusing hafalin IP, port, atau username!
3.9 [Opsional] Izinin akses cuma dari Cloudflare
Kalau web kamu sepenuhnya ada di belakang Cloudflare, kamu bisa atur biar port 80/443 cuma bisa diakses oleh IP Cloudflare. Ini bakal nambah lapisan keamanan ekstra.
⚠️ Catatan: Konfigurasi ini wajib domain kamu udah diarahin ke Cloudflare CDN dulu.
Script konfigurasi otomatis
1 | # 下载脚本 |
Script ini bakal:
- Ambil rentang IP terbaru langsung dari Cloudflare
- Tambahkan aturan UFW, cuma izinin IP ini buat akses port 80/443
- Reload UFW
Atur pembaruan otomatis
Rentang IP Cloudflare bisa berubah, jadi atur saja biar auto-update tiap minggu:
1 | # 添加 cron 任务(每周一凌晨执行) |
3.10 Atur zona waktu
Zona waktu default-nya kemungkinan UTC. Ubah ke zona waktu lokalmu biar gampang pas baca log:
1 | # 查看当前时区 |

3.11 [Opsional] Atur auto security update
Biar sistem otomatis pasang security patch, repot banget kalau harus manual terus:
1 | # 安装自动更新工具 |
Pilih “Yes” buat aktifin auto-update.
💡 Fitur ini otomatis pasang security update doang, nggak akan otomatis upgrade ke major version yang baru, jadi lumayan aman.
4. Kesimpulan
Checklist inisialisasi
Setelah kelar ngelakuin konfigurasi di atas, cek sekali lagi pakai checklist ini:
| Hal yang Dicek | Perintah | Hasil yang Diharapkan |
|---|---|---|
| Sistem sudah di-update | apt update && apt list --upgradable |
Tidak ada paket yang bisa di-upgrade |
| User biasa bisa sudo | sudo whoami |
Output root |
| Login pakai SSH key berfungsi | ssh yourname@ip -p port |
Login tanpa perlu password |
| Login pakai password sudah dimatikan | grep PasswordAuth /etc/ssh/sshd_config |
PasswordAuthentication no |
| Port SSH sudah diganti | grep Port /etc/ssh/sshd_config |
Port yang kamu set sendiri |
| Firewall sudah aktif | ufw status |
Status: active |
| BBR sudah diaktifkan | sysctl net.ipv4.tcp_congestion_control |
= bbr |
| fail2ban sedang berjalan | systemctl status fail2ban |
active (running) |
| Zona waktu sudah diatur | timedatectl |
Asia/Shanghai atau zona waktu kamu |
| SSH Config lokal | cat ~/.ssh/config |
Alias server sudah dikonfigurasi |
Lokasi File Penting
1 | /etc/ssh/sshd_config # SSH 服务端配置 |
Praktik Keamanan Terbaik
- Update sistem secara rutin:
apt update && apt upgrade - Cek log login secara berkala:
lastb(login gagal),last(login berhasil) - Pantau status ban dari fail2ban
- Backup dulu file konfigurasi penting sebelum diubah
5. Catatan Masalah
Q1: Login SSH key gagal, tetap diminta password?
Kemungkinan penyebabnya:
-
Masalah izin (paling sering terjadi)
1
2
3# 检查并修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys -
Public key tidak tersalin dengan benar
1
2
3# 检查 authorized_keys 内容
cat ~/.ssh/authorized_keys
# 应该是一行完整的公钥,以 ssh-ed25519 或 ssh-rsa 开头 -
Interferensi SELinux (di sistem CentOS/RHEL)
1
restorecon -Rv ~/.ssh
Q2: Setelah ganti port, tiba-tiba nggak bisa konek?
Langkah pengecekan:
-
Pastikan port baru sudah dibuka di firewall:
1
ufw status | grep 你的端口
-
Pastikan konfigurasi SSH sudah benar:
1
grep Port /etc/ssh/sshd_config
-
Pastikan service SSH sedang berjalan:
1
systemctl status sshd
-
Kalau bener-bener nggak bisa konek sama sekali, gunakan VNC/konsol dari penyedia cloud kamu untuk login dan memperbaikinya.
Q2.5: Ganti port tapi sama sekali nggak berlaku? (Server Lite cloud provider)
Gejala: Udah ubah /etc/ssh/sshd_config, tapi setelah service direstart port 22 masih aktif dan port barunya nggak kunjung berlaku.
Cara diagnosa:
bash
1 | # 查看是谁在监听 22 端口 |
Kalau outputnya mirip kayak gini:
1 | tcp 0 0.0.0.0:22 0.0.0.0:* LISTEN 1/init |
Berarti port 22 masih didengarkan oleh init (PID 1), bukan oleh proses sshd.
Alasannya: SSH di “Light Application Server” atau “Container Instance” dari sebagian cloud provider di-proksi langsung di tingkat platform, jadi konfigurasi sshd di dalam server kamu nggak akan berefek.
Solusinya:
| Tipe Instance | Cara Ganti Port SSH |
|---|---|
| ECS Tradisional | Edit sshd_config ✅ |
| Light Server | Mungkin harus diubah via console cloud, atau malah nggak didukung sama sekali |
| Container Instance | Biasanya nggak didukung untuk diganti |
Kalau instance kamu nggak mendukung ganti port, langkah keamanan lain jauh lebih penting:
- ✅ Bikin user biasa + matikan login root
- ✅ Login pakai SSH key + matikan login pakai password
- ✅ Pakai fail2ban buat nangkal brute force
Kalau langkah-langkah ini udah di-handle dengan bener, keamanan server kamu tetap terjaga kok.
Q3: fail2ban malah nge-blok IP sendiri?
1 | # 用 VNC 登录后解封 |
Q4: Setelah UFW diaktifin, web jadi nggak bisa diakses?
1 | # 检查 80/443 是否开放 |
Q5: Pas ngejalanin command malah ketemu error “sudo not found”?
Debian minimal install kadang nggak include sudo, jadi install dulu pake root:
1 | apt install sudo |
6. Script inisialisasi sekali jalan (dipake kalau udah paham)
Kalau kamu udah paham dan terbiasa sama langkah-langkah di atas, tinggal pake script ini buat inisialisasi server dengan cepat.
⚠️ Catatan: Sebelum menjalankan skrip, pastikan kamu sudah siapin SSH public key-nya ya.
1 |
|
7. Setelah ngelakuin semua ini, seberapa aman sih server-nya?
| Langkah | Apa yang dilakukan | Kenapa penting |
|---|---|---|
| Update sistem | Install patch terbaru | Nutup celah keamanan yang udah diketahui |
| Bikin user baru | Ngga langsung pake root lagi | Ngurangin risiko salah ketik/klik |
| SSH Key | Ganti password pake kunci | Anti di-brute force |
| Ganti port | Ngumpet dari port default 22 | Ngurangin peluang ke-scan |
| Matikan login password | Cuma boleh login pake kunci | Stop serangan password secara total |
| Matikan root | Root ngga bisa langsung login | Bikin penyerang susah masuk |
| Firewall UFW | Buka port yang penting aja | Ngurangin titik rawan serangan |
| BBR Acceleration | Optimalkan performa jaringan | Bikin akses makin ngebut |
| fail2ban | Auto-banned IP jahat | Nangkal serangan yang terus-terusan |
Kalau semua langkah di atas udah kamu lakuin, tingkat keamanan server kamu udah ngalahin 90% VPS lain di luar sana.
Sneak Peek Artikel Selanjutnya
Di artikel selanjutnya kita bakal bahas Cepat Setup SSH Key Login, bakal dibahas lebih detail nih:
- Cara bikin kunci di berbagai sistem operasi
- Manajemen beberapa kunci sekaligus
- Setup SSH Agent
- Settingan SSH client yang sering dipake
Artikel ini terakhir diperbarui: Januari 2026
Seri kotak peralatan indie developer, follow yuk!




