Panduan lengkap ganti port SSH di Ubuntu, Debian, AlmaLinux, dan Rocky Linux. Termasuk konfigurasi UFW, firewalld, SELinux, dan socket activation Ubuntu 22.10+.
Halo, Kawan Belajar! Kalau kamu punya VPS yang baru saja dibeli, ada satu langkah keamanan sederhana yang sering dilewatkan: mengganti port SSH dari default-nya, yaitu port 22. Port ini sudah terlalu terkenal di kalangan bot scanner otomatis yang gentayangan di internet setiap hari. Dengan mengganti ke port yang berbeda, kamu langsung mencegah sebagian besar upaya brute force yang menyerang servermu.
Panduan ini mencakup tiga skenario utama: Ubuntu/Debian lawas yang pakai cara klasik, Ubuntu 22.10 ke atas yang sudah pakai systemd socket activation (banyak yang bingung soal ini!), dan CentOS/AlmaLinux/Rocky Linux yang perlu konfigurasi tambahan karena SELinux aktif.
Port 22 adalah port SSH yang sudah distandardisasi sejak 1995. Artinya, semua bot dan script kiddie di luar sana sudah otomatis men-scan port ini ke miliaran IP setiap hari. Dengan mengganti ke port lain, kamu tidak hanya membuat server lebih aman, tapi kamu langsung mengurangi kebisingan di log akibat percobaan brute force yang tiada henti.
Bukan berarti rumahmu tidak bisa ditembus, tapi minimal tamu tak diundang perlu usaha lebih keras.
Sebelum menyentuh konfigurasi apapun, lakukan dua hal ini:
1. Backup file konfigurasi SSH
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
2. Pilih nomor port yang tepat
Hindari port di bawah 1024 (sudah "diprioritaskan" untuk layanan sistem lain). Port di kisaran 1025 hingga 65535 bebas dipakai, tapi hindari port yang umum dikenal seperti 3306 (MySQL), 8080 (HTTP alt), atau 5432 (PostgreSQL). Port seperti 2222, 2200, atau 33022 adalah pilihan yang populer.
lsb_release -a, atau untuk distro RHEL-based pakai cat /etc/os-release.
Pilih cara yang sesuai dengan distromu di bawah ini.
Cara ini berlaku untuk Ubuntu yang menggunakan ssh.service secara tradisional, yaitu Ubuntu 20.04 (Focal), 22.04 (Jammy), serta semua versi Debian (Buster, Bullseye, Bookworm, dst).
Buka file konfigurasi SSH dengan editor teks:
sudo nano /etc/ssh/sshd_config
Cari baris yang berbunyi #Port 22. Baris ini biasanya di bagian atas file. Hapus tanda # di depannya, lalu ganti angka 22 dengan port pilihanmu. Contoh menggunakan port 2222:
Port 2222
Simpan dan keluar (di nano: Ctrl+X, lalu Y, lalu Enter).
Sebelum restart apapun, validasi dulu konfigurasi kamu:
sudo sshd -t
Kalau tidak ada output, berarti tidak ada error. Kalau ada pesan error, kembali ke file konfigurasi dan perbaiki.
sudo ufw allow 2222/tcp
Verifikasi rules-nya sudah masuk:
sudo ufw status
sudo systemctl restart ssh
Jangan tutup sesi SSH yang sedang aktif! Buka terminal baru, lalu coba koneksi ke port baru:
ssh -p 2222 user@ip-server-kamu
Kalau berhasil masuk, lanjutkan ke langkah berikutnya. Kalau gagal, gunakan sesi lama untuk troubleshoot.
Setelah kamu yakin port baru berfungsi, cabut akses ke port 22:
sudo ufw delete allow ssh
# atau
sudo ufw delete allow 22/tcp
Mulai Ubuntu 22.10 (Kinetic), Ubuntu mengubah cara SSH bekerja: alih-alih langsung menjalankan sshd terus-menerus, systemd menggunakan mekanisme bernama socket activation. Artinya, ssh.socket yang "menunggu" koneksi masuk, dan baru membangunkan ssh.service saat ada yang menghubungi.
Dampaknya: mengedit Port di /etc/ssh/sshd_config saja tidak cukup untuk mengubah port. Kamu juga harus memberi tahu ssh.socket tentang perubahan ini. Banyak yang bingung kenapa port tidak berubah padahal sudah edit config, ini penyebabnya.
systemctl is-active ssh.socketactive, kamu masuk kategori ini. Kalau inactive atau not-found, gunakan Cara 1.
Buka file konfigurasi SSH dan tambahkan atau ubah baris port seperti biasa:
sudo nano /etc/ssh/sshd_config
Cari #Port 22, uncomment dan ubah:
Port 2222
Simpan dan keluar.
Lalu lakukan validasi konfigurasi:
sudo sshd -t
Jika tidak ada output, berarti konfigurasi valid.
Di sinilah bedanya. Kamu perlu membuat file override systemd yang memberitahu ssh.socket untuk mendengarkan di port baru.
Buat direktori override:
sudo mkdir -p /etc/systemd/system/ssh.socket.d
Lalu buat file konfigurasi:
sudo nano /etc/systemd/system/ssh.socket.d/listen.conf
Isi file tersebut dengan:
[Socket]
ListenStream=
ListenStream=0.0.0.0:2222
ListenStream=[::]:2222
Baris ListenStream= yang kosong itu sengaja dikosongkan untuk membersihkan nilai default (port 22).
Kemudian:
0.0.0.0:2222 → listen IPv4[::]:2222 → listen IPv6Tanpa baris kosong tersebut, SSH akan mendengarkan di dua port sekaligus (22 dan 2222).
sudo systemctl daemon-reload
ssh.socket dan ssh.service tidak bisa berjalan bersamaan. Jika ssh.service masih aktif, biasanya akan muncul error seperti:
ssh.socket: Socket service ssh.service already active, refusing.
Stop dan disable service klasik terlebih dahulu:
sudo systemctl stop ssh.service
sudo systemctl disable ssh.service
Restart socket SSH:
sudo systemctl restart ssh.socket
Lalu enable agar otomatis aktif setelah reboot:
sudo systemctl enable ssh.socket
Jika menggunakan UFW:
sudo ufw allow 2222/tcp
Jika menggunakan firewall provider/cloud security group, pastikan port 2222/TCP juga sudah dibuka.
Cek apakah SSH sekarang sudah mendengarkan di port yang benar:
sudo ss -tlnp | grep 2222
Outputnya harus menunjukkan port 2222, misalnya:
LISTEN 0 4096 0.0.0.0:2222
LISTEN 0 4096 [::]:2222
Perhatikan bahwa proses yang listen adalah systemd, bukan sshd. Ini normal pada mode socket activation.
Jangan logout session aktif terlebih dahulu.
Buka terminal baru dan test koneksi:
ssh -p 2222 user@ip-server-kamu
Jika berhasil login, berarti konfigurasi sudah berjalan normal.
Cek:
sudo ss -tlnp | grep :22
Jika tidak ada output, berarti SSH sudah tidak lagi mendengarkan di port 22.
Jika sebelumnya membuka port SSH default:
sudo ufw delete allow ssh
atau:
sudo ufw delete allow 22/tcp
sudo systemctl disable --now ssh.socketsudo systemctl enable --now ssh.servicesshd_config saja sudah cukup, persis seperti Cara 1.
Di distro keluarga Red Hat, ada dua hal ekstra yang harus dikonfigurasi selain file SSH: SELinux dan firewalld.
SELinux punya daftar port yang diizinkan untuk setiap layanan, termasuk SSH. Kalau kamu ganti port SSH tanpa memberi tahu SELinux, service bisa gagal restart meski konfigurasi sshd_config sudah benar.
semanage adalah alat untuk mengelola kebijakan SELinux, termasuk izin port.
Kalau belum terinstall:
sudo dnf install -y policycoreutils-python-utils
Beri tahu SELinux bahwa port baru SSH (contoh: 2222) boleh digunakan untuk service SSH:
sudo semanage port -a -t ssh_port_t -p tcp 2222
Verifikasi hasilnya:
sudo semanage port -l | grep ssh
Kamu harus melihat port 2222 muncul bersama port 22 dalam daftar ssh_port_t.
ValueError: Port already defined, artinya port tersebut sudah pernah didaftarkan di SELinux.-m (modify) alih-alih -a (add):
sudo semanage port -m -t ssh_port_t -p tcp 2222
sudo nano /etc/ssh/sshd_config
Cari baris #Port 22, lalu uncomment dan ubah menjadi:
Port 2222
Simpan dan keluar.
Lalu validasi sintaks konfigurasi:
sudo sshd -t
Kalau tidak ada output, berarti konfigurasi valid.
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
Verifikasi:
sudo firewall-cmd --list-ports
Port 2222/tcp harus muncul dalam daftar.
Di CentOS, AlmaLinux, Rocky Linux, dan RHEL, nama service-nya adalah sshd, bukan ssh.
Restart service:
sudo systemctl restart sshd
Lalu cek statusnya:
sudo systemctl status sshd
Kalau status menunjukkan active (running), berarti SSH berhasil dijalankan ulang.
Pastikan SSH sekarang sudah mendengarkan di port baru:
sudo ss -tlnp | grep sshd
Outputnya harus menunjukkan port 2222, misalnya:
LISTEN 0 128 0.0.0.0:2222
LISTEN 0 128 [::]:2222
Jangan logout session aktif terlebih dahulu.
Buka terminal baru dan test koneksi:
ssh -p 2222 user@ip-server-kamu
Kalau berhasil login, berarti konfigurasi sudah berjalan normal.
Jangan lakukan langkah ini sebelum memastikan login ke port baru berhasil.
Hapus akses firewall untuk port lama:
sudo firewall-cmd --permanent --remove-port=22/tcp
sudo firewall-cmd --reload
failedKemungkinan besar ada error di konfigurasi SSH.
Lakukan validasi konfigurasi:
sudo sshd -t
Kalau ada error, biasanya akan ditampilkan lengkap beserta nomor baris yang bermasalah.
Untuk melihat log detail service:
sudo journalctl -xeu sshd
Di Ubuntu versi baru yang menggunakan socket activation, gunakan:
sudo journalctl -xeu ssh.socket
Biasanya ada salah satu dari kondisi berikut:
Port 22 aktif di sshd_configssh.socket masih listen di port 22Cek konfigurasi port:
grep -R "^Port" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*
Lalu cek port yang sedang listen:
sudo ss -tlnp | grep ssh
Kalau port 22 masih muncul, periksa kembali konfigurasi dan restart service SSH.
sshd_configDi Ubuntu versi baru, OpenSSH bisa menggunakan mode socket activation melalui ssh.socket.
Dalam mode ini, port tidak dikontrol langsung oleh sshd_config, melainkan oleh systemd socket.
Kamu perlu membuat file override:
/etc/systemd/system/ssh.socket.d/listen.conf
Contoh isi:
[Socket]
ListenStream=
ListenStream=0.0.0.0:2222
ListenStream=[::]:2222
Setelah itu reload systemd:
sudo systemctl daemon-reload
Lalu restart socket:
sudo systemctl restart ssh.socket
Kalau muncul error seperti:
ssh.socket: Socket service ssh.service already active, refusing.
artinya ssh.service masih aktif dan harus dihentikan terlebih dahulu:
sudo systemctl stop ssh.service
sudo systemctl disable ssh.service
Kalau sshd sudah running tetapi tetap muncul error seperti:
Connection refused
atau:
Connection timed out
kemungkinan penyebabnya:
[::]) dan belum listen di IPv4 (0.0.0.0)Cek port listening:
sudo ss -tlnp | grep ssh
Pastikan muncul:
0.0.0.0:2222
[::]:2222
Kalau hanya muncul [::]:2222, tambahkan bind IPv4 pada konfigurasi socket:
ListenStream=0.0.0.0:2222
Kemungkinan besar SELinux memblok port baru SSH.
Tambahkan port baru ke policy SELinux:
sudo semanage port -a -t ssh_port_t -p tcp 2222
Kalau muncul:
ValueError: Port already defined
gunakan mode modify:
sudo semanage port -m -t ssh_port_t -p tcp 2222
Lalu restart SSH:
sudo systemctl restart sshd
Dan cek statusnya:
sudo systemctl status sshd
Mengganti port SSH default memang bukan solusi keamanan utama, tetapi cukup efektif untuk mengurangi noise dari bot scanner otomatis yang terus mencoba login ke port 22. Log server jadi jauh lebih bersih, dan percobaan brute force acak biasanya langsung berkurang drastis.
Kunci paling pentingnya adalah urutan konfigurasi yang benar: validasi konfigurasi, buka firewall, restart service SSH, lalu test dari terminal lain sebelum menutup sesi aktif. Jangan sampai terkunci dari server sendiri hanya dikarenakan lupa membuka port baru atau salah konfigurasi.
Perlu diingat juga bahwa tiap distro punya perlakuan berbeda. Pada Ubuntu versi baru yang menggunakan ssh.socket (socket activation), perubahan port perlu dilakukan lewat override systemd. Sementara di CentOS, AlmaLinux, Rocky Linux, dan RHEL, SELinux juga perlu diberi izin tambahan menggunakan semanage.
Selain mengganti port, kamu juga sangat disarankan melanjutkan hardening SSH dengan:
Semua langkah kecil ini akan membuat server Linux jauh lebih aman untuk penggunaan jangka panjang.
Semangat terus, Kawan Belajar!
Jangan ragu untuk menghubungi tim support kami jika Anda memiliki pertanyaan atau masalah terkait layanan CloudKilat.