Lewati ke konten
NTHL.me

Tutorial Install RDP XFCE di Debian 13

Tampilan dari XFCE di Debian 13
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.

Rujukan teknis

Terakhir Diperbaharui:
Berkomentarlah dengan santun dan tetap pada topik. Komentar berisi spam, tautan promosi, atau ujaran kebencian dapat dihapus. Komentar baru mungkin tampil setelah dimoderasi.

Komentar