KATEGORI: FTP SERVER
Membandingkan komunikasi FTP dengan TLS dan tidak
Membahas cara konfigurasi ProFTPd secara mendasar sekaligus sampai ke tahap menambahkan fitur TLS pada ProFTPd. Tidak hanya itu, sesuatu yang terjadi dibalik TLS juga dibahas.
Ditkala pembelajaran linux server paling awal kita pernah menemui materi proftpd untuk dipahami sekaligus praktikan, apakah kalian pernah sampai ke tahap konfigurasi FTP disertai dengan TLS? Beberapa diantaranya pasti belum pernah, dan saya akan menjelaskan cara mengonfigurasinya sekaligus membandingkan komunikasi yang dilakukan oleh keduanya.
Paket layanan server FTP yang terpopuler ada 2 yaitu VSFTPd (Very Secure FTP daemon) dan ProFTPd (Pro FTP daemon). Keduanya memiliki keunggulan masing-masing, lihat pada gambar dibawah ini.
Artinya:
Setiap layanan server bekerja sesuai situasi, namun pada umumnya:
- Server dengan opsi konfigurasi fleksibel dan memiliki module external, pilihlah ProFTPd.
- Server FTP berskala besar/banyak pengguna dan lebih aman, pilihlah VSFTPd.
Lain waktu kita akan bahas cara konfigurasi TLS di VSFTPd, saat ini kita akan menggunakan ProFTPd saja, karena dalam soal-soal perlombaan juga masih umum ditemukannya ProFTPd.
1. Konfigurasi IP Address
Sebelum itu kita harus menyepakati alamat IP yang ingin digunakan, dalam contoh ini saya memiliki Windows 10 (HostOS & Klien) dan Linux Debian 9.12 (FTP Server). Perhatikan gambar dibawah ini;
Keterangan:
- Linux Server: 192.168.169.1
- Windows Klien: 192.168.169.2
- HostOS, sistem operasi yang menginstall software virtualisasi VMware Workstation.
- ens33 (Opsional), nama adapter linux yang tersambung ke klien.
- VMnet2 (Opsional), nama adapter windows klien yang tersambung ke server.
- VMware Workstation, wadah virtualisasi dari installasi FTP Server.
Linux Server
Ketik perintah dibawah ini untuk mengonfigurasi IP Address.
# nano /etc/network/interfaces
Lalu pastikan konfigurasinya mirip seperti gambar dibawah.
Setelah itu kita restart layanan jaringan untuk memperbarui konfigurasi yang baru saja kita buat.
# service networking restart
Pastikan kembali hasilnya sudah serupa seperti gambar dibawah ini.
# ip add
Windows Klien
Pasti kalian telah mengerti cara konfigurasi IP Address di Windows, jadi sesuaikan IP Address menjadi 192.168.169.2, jika sudah pastikan outputnya sudah sama seperti gambar dibawah.
> ipconfig
2. Membuat user untuk koneksi FTP
Kita membutuhkan user yang dikhususkan untuk melakukan koneksi FTP ke server linux, ketiklah perintah dibawah ini untuk membuatnya.
# adduser sesiftp
Adding user `sesiftp' ...
Adding new group `sesiftp' (1001) ...
Adding new user `sesiftp' (1001) with group `sesiftp' ...
Creating home directory `/home/sesiftp' ...
Copying files from `/etc/skel' ...
New password: sesiftp
Retype new password: sesiftp
passwd: password updated successfully
Changing the user information for sesiftp
Enter the new value, or press ENTER for the default
Full Name []: (ENTER)
Room Number []: (ENTER)
Work Phone []: (ENTER)
Home Phone []: (ENTER)
Other []: (ENTER)
Is the information correct? [Y/n] Y
3. Mengonfigurasi ProFTPd dasar tanpa TLS
Sebelum membuat konfigurasi yang disertai TLS, kita perlu mengonfigurasinya secara dasar dulu, dan juga untuk membandingkannya dengan yang disertai TLS. Pertama pastikan server FTP telah tersambung ke internet, pergi kesini jika belum. Ketiklah perintah dibawah ini untuk menginstall paket layanan ProFTPd.
# apt-get install proftpd-basic
Lalu selanjutnya masuk ke dalam file konfigurasi ProFTPd untuk di sesuaikan dengan pembelajaran kita.
# nano /etc/proftpd/proftpd.conf
ServerName "Debian FTP Server"
...
DefaultRoot ~
...
Port 21
...
<Anonymous ~sesiftp>
User sesiftp
Group sesiftp
...
UserAlias sesiftp
</Anonymous>
Keterangan:
- ServerName, nama host server debian, ini akan kalian ketahui setelah melakukan login pada server FTP nya dari klien.
- DefaultRoot, jadi kita tidak memperbolehkan user yang login bebas berkelian ke direktori manapun, hanya bisa bergerak dalam home direktorinya sendiri. Misal, rumah sesiftp di /home/sesiftp maka user tersebut tidak bisa berpindah ke /etc, /root dan direktori manapun selain di rumahnya sendiri. Keuntungannya adalah server akan lebih aman, dan kita pun tenang jika ada user yang melakukan remote melalui FTP.
- Port, menentukan port yang akan mendengarkan semua permintaan FTP dari klien, dalam contoh ini kita menggunakan default port yaitu 21. Bisa diganti ke 844, 29 dan semacamnya.
- Anonymous, artinya klien nanti dapat login menggunakan user anonymous dan password <kosong>. Sehabis login, klien akan berubah dari user anonymous menjadi user sesiftp dan terkurung di home direktori sesiftp.
Jika terdapat (#) sebelum setiap kalimat konfigurasi diatas, hilangkan saja dan pastikan seperti hasilnya sudah sesuai dengan konfigurasi diatas tersebut.
Setelah itu restart layanan ProFTPd nya agar dapat mengaktifkan konfigurasi yang baru saja kita buat.
# service proftpd restart
4. Verifikasi dan cek komunikasi FTP Server tanpa TLS
Sebelum itu kalian perlu download wireshark dan filezilla di komputer klien, ini adalah alat untuk membaca setiap komunikasi yang terjadi asalkan melewati komputer kita.
Jika sudah menginstall, silahkan buka dan lihat adapter yang menuju ke arah server debian. Dalam contoh ini yang terhubung langsung ke server FTP adalah Ethernet 5.
Saat kalian lihat mungkin tidak ada lalu lintas yang terjadi, atau bisa saja ada juga, tapi tenang saja tidak akan mempengaruhinya. Setelah itu buka Filezilla dan masukkan parameter yang dibutuhkan untuk melakukan remote FTP, sekaligus membaca komunikasi yang terjadi di dalamnya antara Server FTP dan Windows Klien.
Setelah dilihat-lihat, ternyata kita dapat membaca komunikasi yang terjadi secara plain text, seperti yang kalian lihat terdapat USER sesiftp dan PASS sesiftp. Artinya memang tidak ada tanda-tanda melakukan enkripsi dalam komunikasi tersebut.
Gimana bahaya bukan, ambil kesimpulanmu terhadap akibat apa saja yang bisa terjadi nanti?
5. Menambahkan fitur TLS ProFTPd
Sekarang kita akan menambahkan fitur enkripsi TLS pada komunikasi FTP selanjutnya, kita buat sertifikat SSL untuk server FTP dengan perintah;
# mkdir /home/sesiftp/FTP-TLS
# cd /home/sesiftp/FTP-TLS
# openssl req -x509 -newkey rsa:2048 -keyout proftpd.key -out proftpd.crt -nodes -days 365
Keterangan:
- Parameter req untuk menentukan bahwa ingin membuat Sertifikat SSL standar PKCS#10.
- ~ X509, merupakan format dari sertifikat SSL yang dibuat nanti, ini digunakan untuk mem-verifikasi apakah sertifikat / publik key ini milik komputer / server yang kita hubungi? Parameter inilah sebabnya kenapa kita harus menambahkan informasi setelah mengetik perintah diatas tersebut.
- ~ newkey, merupakan parameter untuk menentukan jenis kunci yang ingin diterapkan kedalam file .key dan .crt. Dalam contoh ini yaitu yang digunakan RSA-2048.
- ~ keyout, merupakan parameter yang menentukan nama file .key nanti dan lokasinya juga. Ini yang disebut private key.
- ~ out, sama dengan parameter sebelumnya, tapi yang ini adalah public key nya.
- ~ nodes, membiarkan private key tidak dienkripsi berdasarkan passphrase.
- ~ days, menentukan limit expired / kadaluarsa sertifikat SSL.
Setelah dibuatnya, kalian bisa memastikannya menggunakan perintah ls. Kemudian langsung saja kita tambahkan konfigurasi TLS di ProFTPd server. Ketiklah perintah dibawah ini untuk mengubah konfigurasinya, lalu ikuti konfigurasi yang ada digambar;
nano /etc/proftpd/tls.conf
Keterangan:
- TLSEngine, mengaktifkan fitur TLS.
- TLSLog, menentukan lokasi file untuk menyimpan riwayat penggunaan TLS.
- TLSProtocol, menentukan protokol yang digunakan untuk mengamankan komunikasi data.
- TLSRSACertificateFile, menentukan letak sertifikat (public key) yang akan digunakan oleh klien sebagai dasar dari komunikasi ter-enkripsi.
- TLSRSACertificateKeyFile, menentukan letak private key yang akan digunakan oleh server untuk membuka pesan ter-enkripsi dari klien.
- TLSRequired, menentukan kapan sesi terbaik untuk mengamankan komunikasi. Dalam hal ini saya hanya ingin saat autentikasi saja maka pilihannya adalah auth+data. Namun jika kalian ingin melindungi seluruh komunikasi, ganti opsi menjadi on.
service proftpd restart
Sehabis itu kita restart layanannya agar server ProFTPd dapat menggunakan konfigurasi yang baru saja dibuat.
6. Verifikasi dan cek komunikasi FTP Server dengan TLS
Sekarang buka lagi wireshark seperti sebelumnya untuk melihat apa yang terjadi dalam komunikasi mereka. Lalu gunakan filezilla untuk tersambung ke server ProFTPd, pasti kalian masih ingat kan Let’s we did it again! Kalau lupa bisa lihat nomor 4. See!
Pasti terdapat pemberitahuan bahwa kita akan menggunakan sertifikat sebagai dasar untuk melakukan pengamanan komunikasi, lihat lebih lanjut dibawah.
Sangat jauh berbeda dengan komunikasi tanpa TLS, disini terlihat begitu banyak huruf / karakter asing. Itulah tandanya!
Namun konfigurasi yang dibuat hanya untuk mengamankan komunikasi saat pengguna login saja, tidak saat mengirim file atau mengambil file. Itu karena penentuan pada parameter TLSRequired auth+data, lihatlah keterangannya jika kalian melewatinya.
Apa yang terjadi saat TLS hadir dalam komunikasi FTP?
TLS adalah salah satu protokol keamanan jaringan yang paling penting, banyak digunakan oleh komunikasi antara browser web (Mozilla, Chrome dst) dan server web. Tetapi protokol ini tetap bisa digunakan oleh ProFTPd termasuk layanan-layanan lainnya.
- Klien FTP mengirim pesan “client hello” yang meminta koneksi dan menampilkan daftar cipher yang didukung (sekumpulan algoritma enkripsi yang digunakan untuk membuat koneksi aman), seperti RSA, AES dan DES. Juga ada kumpulan byte acak yang dikenal sebagai Client Random.
- Server merespon dengan pesan “server hello” yang berisi versi protokol TLS (1.0, 1.2, dst.), sekaligus cipher yang dipilih. Juga ada kumpulan byte acak yang dikenal sebagai Server Random
- Server mengirimkan sertifikat SSL-nya ke klien untuk digunakan klien sebagai dasar dari dia melakukan enkripsi, agar nanti pesan yang dikirim oleh klien bisa di dekripsi / buka oleh server.
- Setelah itu klien melakukan otentikasi untuk mengamankan komunikasi ke server tapi di verifikasi terlebih dahulu sertifikat SSL tersebut. Apakah sertifikat tersebut asli milik server?
- Klien mengirim string lagi yang dikenal sebagai premaster secret. Klien menggunakan kriptografi asimetris untuk membuat public key berdasarkan sertifikat SSL server, yang kemudian digunakan untuk mengenkripsi premaster secret. Premaster secret tersebut hanya dapat didekripsi oleh private key milik server.
- Server mendekripsi premaster secret dengan private key.
- Bersamaan keduanya (klien dan server) membuat session key berdasarkan kombinasi dari client random, server random dan premaster secret.
- Lalu klien mengirimkan pesan “selesai” yang telah dienkripsi dengan session key.
- Server merespon dengan pesan “selesai” yang telah dienkripsi dengan session key.
- Akhirnya klien dan server telah berhasil, yang berarti koneksi untuk mencapai keamanan telah selesai. Selanjutnya komunikasi lebih dalam lagi dapat menggunakan enkripsi berdasarkan session key yang ditetapkan sebelumnya.
Prosedur komunikasi untuk mencapai keamanan diatas itu mungkin terlalu padat, sehingga kalian sulit memahaminya. Bisa pergi kesini untuk memahaminya lebih teknis lagi, walaupun itu membahas koneksi TLS dibalik website HTTPS tapi tidak jauh berbeda kok. Pasti kalian bisa paham, tenang aja oke!