Tutorial Install RDP XFCE di Debian 13
Isi Tulisan
![]() |
| Tampilan XFCE. |
Desktop grafis pada VPS terdengar sedikit bertentangan dengan gagasan server minimalis. Namun ada keadaan ketika terminal saja terasa kurang praktis. Browser jarak jauh, aplikasi grafis ringan, pengujian antarmuka, atau sekadar kebutuhan mengoperasikan mesin Linux dari Windows tanpa membangun workstation penuh.
Kombinasi XFCE dan xrdp cukup masuk akal untuk kebutuhan itu.
XFCE relatif ringan, sementara xrdp memungkinkan Windows menggunakan klien RDP yang sudah
tersedia secara bawaan. Yang perlu dihindari adalah pola lama. Memasang xrdp, membuka
3389/tcp ke publik, lalu masuk sebagai root. Cepat, memang. Aman, tidak.
Panduan ini memakai Debian 13 sebagai basis dan memperlakukan RDP sebagai
layanan privat. xrdp hanya mendengarkan di 127.0.0.1, kemudian koneksi dibawa
melalui SSH tunnel. Port RDP publik tidak diperlukan.
1. Kebutuhan dasar
Debian 13 “trixie” adalah stable Debian saat artikel ini diperbarui. XFCE 4.20 tersedia pada rilis tersebut dan masih cukup ringan untuk VPS kecil. Secara praktis, konfigurasi berikut sudah nyaman untuk penggunaan desktop ringan:
| Resource | Minimum | Disarankan |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 2 GB | 4 GB |
| Storage | 20 GB | 40 GB SSD |
| OS | Debian 13 | |
Angka itu bukan batas keras. Sebuah sesi XFCE kosong bisa berjalan dengan lebih sedikit, tetapi browser modern biasanya jauh lebih rakus daripada desktopnya sendiri. Jika tujuan utamanya Chrome dengan banyak tab, RAM akan lebih cepat menjadi batas daripada XFCE. Direkomendasikan untuk memakai NVME daripada SSD biasa karena masalah mesin dan
2. Perbarui Debian sebelum menyentuh xrdp
Mulailah dari VPS yang akses SSH-nya sudah berfungsi dan firewall dasar sudah dipasang. Sebelum memasang layanan RDP, tarik indeks paket terbaru dan terapkan seluruh pembaruan yang tersedia.
apt update
apt full-upgrade -y
Karena xrdp adalah layanan jaringan, langkah ini bukan formalitas. Image VPS dari penyedia kadang tertinggal beberapa minggu atau bulan dari repositori keamanan aktif.
3. Buat pengguna khusus untuk desktop
Administrasi server tetap dilakukan melalui SSH. Desktop grafis memakai akun biasa yang
terpisah. Dalam contoh ini namanya desktop; ganti jika diperlukan.
adduser desktop
getent group rdpusers >/dev/null || addgroup --system rdpusers
adduser desktop rdpusers
Jika grup rdpusers sudah ada, perintah addgroup tentu tidak perlu
dijalankan lagi. Akun desktop juga tidak wajib menjadi anggota sudo. Semakin sedikit
hak yang dimiliki sesi grafis, semakin kecil pula kerusakan yang dapat terjadi bila sesi itu
suatu hari dikompromikan.
4. Pasang XFCE, xrdp, dan backend Xorg
apt install -y xfce4 xfce4-goodies xrdp xorgxrdp
xfce4 menyediakan desktop utama, xfce4-goodies menambahkan utilitas dan
plugin yang berguna, xrdp menerima koneksi RDP, sementara xorgxrdp
menyediakan modul Xorg yang dipakai sesi Xorg di layar login xrdp.
Setelah instalasi, lihat versi xrdp yang benar-benar dipilih APT:
apt-cache policy xrdp
Untuk Debian 13, jangan gunakan paket 0.10.1-3.1+deb13u1 yang tercatat rentan pada
DSA-6469-1. Repositori keamanan menyediakan 0.10.1-3.1+deb13u2; versi yang lebih baru
juga dapat dianggap menggantikannya selama berasal dari repositori Debian yang benar.
5. Beri tahu Xsession untuk menjalankan XFCE
Tutorial lama yang beredar sering menyuruh pengguna mengubah /etc/xrdp/startwm.sh. Untuk Debian,
itu tidak diperlukan. Skrip paket xrdp sudah meneruskan sesi ke /etc/X11/Xsession,
dan Xsession dapat membaca ~/.xsession milik pengguna.
printf '%s\n' 'startxfce4' > /home/desktop/.xsession
chown desktop:desktop /home/desktop/.xsession
chmod 700 /home/desktop/.xsession
Keuntungannya sederhana: file milik paket tidak perlu dimodifikasi. Pembaruan xrdp tidak akan bertabrakan dengan perubahan lokal hanya demi memilih desktop environment.
6. Larang root dan batasi siapa yang boleh masuk
Buat cadangan konfigurasi session manager terlebih dahulu:
cp /etc/xrdp/sesman.ini /etc/xrdp/sesman.ini.bak
nano /etc/xrdp/sesman.ini
Cari bagian [Security] yang sudah ada. Jangan membuat bagian kedua dengan nama yang
sama. Atur nilainya menjadi:
[Security]
AllowRootLogin=false
MaxLoginRetry=3
TerminalServerUsers=rdpusers
AlwaysGroupCheck=true
Dengan konfigurasi ini, akun root tidak dapat membuat sesi desktop dan hanya anggota
rdpusers yang diterima. Manual xrdp mencatat bahwa jika grup pada
TerminalServerUsers tidak ada atau tidak valid, akses justru dapat terbuka untuk
semua pengguna; itulah alasan grup dibuat secara eksplisit pada langkah sebelumnya.
7. Paksa xrdp memakai TLS
xrdp secara default dapat menegosiasikan beberapa lapisan keamanan. Untuk server yang kita kendalikan sendiri, tidak banyak alasan mempertahankan fallback ke Standard RDP Security. Beri akun layanan xrdp akses ke private key Debian, lalu paksa TLS.
adduser xrdp ssl-cert
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
nano /etc/xrdp/xrdp.ini
Di bagian [Globals], gunakan:
security_layer=tls
ssl_protocols=TLSv1.2, TLSv1.3
Tidak perlu menambahkan crypt_level=high untuk konfigurasi ini. Menurut manual xrdp,
crypt_level mengatur Standard RDP Security dan hanya efektif ketika
security_layer memakai rdp atau negotiate, bukan
tls.
8. Jangan dengarkan RDP pada seluruh interface
Inilah perubahan yang paling penting. Masih di /etc/xrdp/xrdp.ini, cari nilai
port pada [Globals] dan ubah menjadi:
port=tcp://127.0.0.1:3389
xrdp kini hanya menerima koneksi yang berasal dari mesin itu sendiri. Tidak ada alasan membuka port 3389 di UFW. Jika sebelumnya pernah membuat rule RDP publik, lihat daftar rule terlebih dahulu:
ufw status numbered
Hapus rule 3389/tcp ALLOW Anywhere berdasarkan nomor yang tampil pada server Anda.
Jangan menyalin nomor rule dari contoh orang lain karena indeks UFW berbeda pada setiap mesin.
9. Restart dan pastikan xrdp benar-benar hanya lokal
systemctl restart xrdp
systemctl --no-pager --full status xrdp
ss -ltnp | grep ':3389'
Status xrdp seharusnya active (running). Perintah terakhir harus memperlihatkan
listener pada 127.0.0.1:3389. Jika yang muncul 0.0.0.0:3389 atau
[::]:3389, jangan lanjut dulu: xrdp masih mendengarkan dari luar.
Jika service gagal setelah perubahan TLS, periksa journal:
journalctl -u xrdp -u xrdp-sesman -b --no-pager -n 100
Kesalahan certificate/private key sering berarti akun xrdp belum mendapat akses
melalui grup ssl-cert. Setelah memperbaikinya, restart xrdp lagi.
10. Hubungkan Windows melalui SSH tunnel
Windows modern sudah memiliki klien OpenSSH. Buka PowerShell atau Windows Terminal, lalu buat local forwarding. Ganti hostname dan akun SSH sesuai server Anda:
ssh -N -L 13389:127.0.0.1:3389 [email protected]
Biarkan terminal tersebut tetap terbuka. Setelah tunnel aktif, tekan Win +
R, jalankan mstsc, lalu hubungkan Remote Desktop Connection ke:
127.0.0.1:13389
Di layar login xrdp, pilih sesi Xorg dan masuk menggunakan akun
desktop yang dibuat sebelumnya. RDP melihat koneksi sebagai koneksi lokal, tetapi
trafik antara komputer Windows dan VPS tetap dibawa di dalam SSH.
Port lokal 13389 sengaja berbeda dari 3389 agar tidak berbenturan bila komputer
Windows sendiri sedang memakai layanan Remote Desktop pada port default.
11. Jika RDP memang harus dapat diakses langsung
SSH tunnel adalah pilihan utama untuk satu atau beberapa administrator. Tetapi ada keadaan ketika direct RDP memang dibutuhkan. Jika itu keputusan yang disengaja, kembalikan listener:
port=3389
Jangan langsung menggunakan ufw allow 3389/tcp. Batasi sumbernya ke IP publik yang
memang Anda gunakan:
ufw allow from 203.0.113.10 to any port 3389 proto tcp
ufw reload
ufw status verbose
203.0.113.10 di atas hanyalah alamat dokumentasi. Ganti dengan IP publik klien Anda.
Jika penyedia VPS memiliki cloud firewall sendiri, terapkan pembatasan sumber yang sama di
sana.
Opsional: Fail2Ban untuk xrdp publik
Debian 13 menyediakan Fail2Ban 1.1.0, tetapi paket stable tidak membawa filter xrdp bawaan.
Jika RDP benar-benar diekspos, buat filter lokal untuk baris AUTHFAIL milik
xrdp-sesman.
nano /etc/fail2ban/filter.d/xrdp.conf
[INCLUDES]
before = common.conf
[DEFAULT]
_daemon = xrdp-sesman
[Definition]
authfail_re = \[INFO \] AUTHFAIL: user=<F-USER>(?:\S+|.+)</F-USER> ip=<ADDR> time=\d+
failregex = ^%(__prefix_line)s%(authfail_re)s$
ignoreregex =
datepattern = ^\[?%%ExY%%Exm%%Exd-%%ExH:%%ExM:%%ExS\]?
^{DATE}
Kemudian buat jail terpisah:
nano /etc/fail2ban/jail.d/xrdp.local
[xrdp]
enabled = true
port = 3389
filter = xrdp
logpath = /var/log/xrdp-sesman.log
maxretry = 3
findtime = 10m
bantime = 1h
Uji regex sebelum mengaktifkannya:
fail2ban-regex /var/log/xrdp-sesman.log /etc/fail2ban/filter.d/xrdp.conf
systemctl restart fail2ban
fail2ban-client status xrdp
Jika log belum ada, lakukan satu percobaan login xrdp lebih dahulu. Selalu uji filter terhadap log aktual server; format log dapat berubah antarversi dan custom regex yang tidak pernah dites hanya menghasilkan rasa aman palsu.
12. Opsional: Google Chrome
Untuk VPS amd64, Chrome dapat dipasang dari paket Debian resmi milik Google. Jalankan instalasinya dari sesi administrasi SSH:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
apt install -y ./google-chrome-stable_current_amd64.deb
rm google-chrome-stable_current_amd64.deb
Setelah itu, buka Chrome dari sesi XFCE milik pengguna biasa. Jangan menjalankannya sebagai
root dengan --no-sandbox. Sandbox browser adalah batas keamanan nyata,
bukan gangguan yang sebaiknya dimatikan agar shortcut mau bekerja.
Jika ingin shortcut pada desktop XFCE, jalankan sebagai pengguna desktop:
mkdir -p ~/Desktop
cp /usr/share/applications/google-chrome.desktop ~/Desktop/
chmod +x ~/Desktop/google-chrome.desktop
13. Opsional: audio melalui RDP
Debian 13 menyediakan modul PipeWire khusus xrdp. Jika sesi membutuhkan output audio pada komputer klien:
apt install -y pipewire-module-xrdp
systemctl restart xrdp
Logout penuh dari XFCE lalu sambungkan kembali. Pada VPS kecil, biarkan fitur ini tidak terpasang jika tidak dibutuhkan; desktop jarak jauh sudah cukup sensitif terhadap latency dan bandwidth tanpa menambahkan audio yang tidak pernah digunakan.
14. Penutup
Pada akhirnya, xrdp bukan masalah keamanan dengan sendirinya. Masalah muncul ketika kenyamanan diubah menjadi alasan untuk memperlebar permukaan serangan. Root login dibiarkan, browser dijalankan tanpa sandbox, dan 3389 dilempar begitu saja ke internet.
Desain yang lebih tenang justru lebih sederhana. Satu akun desktop biasa, XFCE melalui Xorg, TLS dipaksa, xrdp hanya mendengarkan di loopback, dan SSH menjadi satu-satunya pintu dari luar. Remote Desktop tetap terasa seperti desktop biasa, sementara server tidak perlu mengumumkan keberadaan RDP-nya kepada setiap scanner yang melintas.

Komentar
Posting Komentar