FTP atau File Transfer Protocol adalah protokol terkenal yang sangat tua untuk mentransfer file antara klien dan server. Ini juga merupakan protokol yang tidak aman hanya jika digunakan tanpa TLS. Dalam tutorial ini, kita akan mengonfigurasi vsftpd untuk TLS yang memungkinkan kita menggunakan FTP dengan aman. FTP telah sering diganti dengan protokol yang lebih aman seperti SFTP atau SCP akhir-akhir ini.
Namun, jika Anda perlu menggunakan FTP dengan server Anda, vsftpd (Very Secure FTP Daemon) adalah pilihan yang sempurna.
Dalam tutorial ini, kita akan belajar cara menginstal dan mengkonfigurasi Server FTP menggunakan vsftpd pada server berbasis Ubuntu 20.04. Kami juga akan mempelajari cara mengamankan koneksi menggunakan protokol SSL/TLS.
Prasyarat
- Server Ubuntu 20.04 dengan pengguna non-root yang memiliki hak sudo.
Langkah 1 - Instal vsftpd
Langkah pertama adalah menginstal vsftpd.
$ sudo apt update
$ sudo apt install vsftpd
Selanjutnya, kita perlu membuat cadangan file konfigurasi asli sehingga kita dapat memulai dengan konfigurasi baru.
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
Langkah 2 - Konfigurasi Firewall
Pada langkah ini, kami akan mengonfigurasi firewall UFW untuk mengizinkan akses ke port FTP.
Pertama, mari kita periksa status firewall.
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Seperti yang kami bisa, lihat hanya port SSH yang diizinkan sejauh ini. Mari kita buka port 20 (port perintah FTP), 21 (port data FTP), 990 untuk saat kita menggunakan TLS dan port 35000-40000 untuk kisaran port pasif yang mungkin kita perlukan di masa mendatang.
$ sudo ufw allow 20:21/tcp
$ sudo ufw allow 990/tcp
$ sudo ufw allow 35000:40000/tcp
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
990/tcp ALLOW Anywhere
20:21/tcp ALLOW Anywhere
35000:40000/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
20:21/tcp (v6) ALLOW Anywhere (v6)
990/tcp (v6) ALLOW Anywhere (v6)
35000:40000/tcp (v6) ALLOW Anywhere (v6)
Langkah 3 - Mengonfigurasi vsftpd
Sekarang kita akan membahas beberapa pengaturan penting agar vsftpd berfungsi.
Mulailah dengan membuka file konfigurasi.
$ sudo nano /etc/vsftpd.conf
1. Akses FTP
Dalam tutorial ini, kami akan mengizinkan akses FTP hanya untuk pengguna lokal dan menonaktifkan akses anonim apa pun. Untuk melakukannya, pastikan baris berikut ada dan sebagai berikut.
anonymous_enable=NO
local_enable=YES
2. Mengaktifkan Unggahan File
Tujuan tunggal yang paling penting dari FTP di sini adalah untuk dapat menulis ke server. Batalkan komentar pada baris berikut untuk mengaktifkan unggahan file dengan menghapus #
di depannya.
write_enable=YES
3. Penjara Chroot
FTP bekerja paling baik ketika pengguna dibatasi ke direktori tertentu. vsftpd mencapai itu dengan menggunakan jail chroot. Ketika chroot diaktifkan untuk pengguna lokal, mereka dibatasi ke direktori home mereka secara default. Untuk mencapai ini, batalkan komentar pada baris berikut.
chroot_local_user=YES
Untuk mencegah kerentanan keamanan apa pun, chroot saat diaktifkan tidak akan berfungsi selama direktori yang dibatasi pengguna dapat ditulis.
Untuk mengatasi batasan ini, kami memiliki dua metode untuk mengizinkan unggahan file saat chroot diaktifkan.
-
Metode 1 - Metode ini bekerja dengan menggunakan direktori yang berbeda untuk upload FTP. Untuk tutorial ini, kita akan membuat
ftp
direktori di dalam rumah pengguna untuk berfungsi sebagai chroot dan direktori kedua yang dapat ditulisiupload
untuk mengupload file. Untuk mencapai ini, tambahkan baris berikut di bagian bawah file.user_sub_token=$USER local_root=/home/$USER/ftp
-
Metode 2 - Metode kedua adalah dengan memberikan akses yang dapat ditulis ke direktori home secara keseluruhan. Tambahkan baris berikut untuk mencapai ini.
allow_writeable_chroot=YES
4. FTP pasif
vsftpd dapat menggunakan port apa saja untuk koneksi FTP pasif. Kami dapat menentukan kisaran untuk nomor port minimum dan maksimum yang dapat digunakan vsftpd. Ini adalah port yang kami konfigurasikan di firewall UFW kami sebelumnya.
Tambahkan baris berikut untuk mengizinkan koneksi FTP Pasif.
pasv_min_port=35000
pasv_max_port=40000
5. Membatasi Pengguna
Untuk mengizinkan hanya pengguna tertentu yang masuk ke server FTP, tambahkan baris berikut di bagian bawah.
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
Dengan mengaktifkan opsi ini, kita perlu menentukan pengguna mana yang diizinkan untuk menggunakan FTP dan menambahkan nama pengguna mereka di /etc/vsftpd.userlist
berkas.
Mulai ulang vsftpd untuk mengaktifkan konfigurasi.
$ sudo systemctl restart vsftpd
Langkah 4 - Mengonfigurasi Direktori Pengguna
Untuk tujuan tutorial ini, kami akan membuat akun pengguna baru untuk transaksi FTP. Jika Anda sudah memiliki akun pengguna untuk tujuan ini, Anda dapat melewati langkah 1. Juga, jika Anda telah menyetel allow_writeable_chroot=YES
di file konfigurasi sebelumnya, Anda dapat melewati langkah 3.
Langkah 1 - Tambahkan pengguna baru.
$ sudo adduser testuser
Tetapkan kata sandi yang kuat dan lewati semua petunjuk lainnya.
Langkah 2 - Tambahkan pengguna ke daftar pengguna FTP yang diizinkan.
$ echo "testuser" | sudo tee -a /etc/vsftpd.userlist
Langkah 3 - Buat FTP dan Direktori File
Langkah ini jika Anda menginginkan direktori yang berbeda sebagai root FTP dan direktori yang berbeda untuk mengunggah file untuk mengatasi batasan jail chroot.
Buat folder FTP.
$ sudo mkdir /home/testuser/ftp
Tetapkan kepemilikannya.
$ sudo chown nobody:nogroup /home/testuser/ftp
Hapus izin menulis.
$ sudo chmod a-w /home/testuser/ftp
Verifikasi izin sebelum melanjutkan.
$ sudo ls -al /home/testuser/ftp
total 8
dr-xr-xr-x 2 nobody nogroup 4096 Jun 7 13:08 .
drwxr-xr-x 3 testuser testuser 4096 Jun 7 13:08 ..
Sekarang mari kita buat direktori sebenarnya yang dapat ditulis untuk file tersebut.
$ sudo mkdir /home/testuser/ftp/upload
$ sudo chown testuser:testuser /home/testuser/ftp/upload
Uji izinnya.
$ sudo ls -al /home/testuser/ftp
total 12
dr-xr-xr-x 3 nobody nogroup 4096 Jun 7 13:10 .
drwxr-xr-x 3 testuser testuser 4096 Jun 7 13:08 ..
drwxr-xr-x 2 testuser testuser 4096 Jun 7 13:10 upload
Terakhir, mari tambahkan test.txt
file yang akan digunakan untuk pengujian.
$ echo "vsftpd test file" | sudo tee /home/testuser/ftp/upload/test.txt
Langkah 5 - Uji Akses FTP
Server FTP kami berfungsi penuh pada saat ini. Kita bisa melakukan sedikit tes sebelum melanjutkan.
Mari kita coba login sebagai pengguna anonim.
$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): anonymous
530 Permission denied.
ftp: Login failed.
ftp>
Tutup koneksi.
ftp> bye
Ini berfungsi sebagaimana mestinya, yaitu pengguna anonim tidak diizinkan.
Mari kita coba terhubung seperti pengguna sudo lainnya. Seharusnya tidak terhubung juga.
$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): sudo_user
530 Permission denied.
ftp: Login failed.
ftp>
Tutup koneksi.
ftp> bye
Mari kita akhirnya mencoba menghubungkan sebagai testuser
yang kami buat untuk FTP.
$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): testuser
331 Please specify the password.
Password: your_user's_password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
Mari kita beralih ke upload
direktori dan gunakan get
perintah untuk mentransfer file pengujian ke mesin lokal kami.
ftp> cd upload
250 Directory successfully changed.
ftp> get test.txt
227 Entering Passive Mode (136,244,105,99,165,42).
150 Opening BINARY mode data connection for test.txt (17 bytes).
226 Transfer complete.
16 bytes received in 0.0101 seconds (164.3719 kB/s)
ftp>
Selanjutnya mari kita upload file dengan nama baru menggunakan put
perintah untuk menguji izin menulis.
ftp> put test.txt upload.txt
227 Entering Passive Mode (136,244,105,99,163,102).
150 Ok to send data.
226 Transfer complete.
17 bytes sent in 0.000894 seconds (518.7988 kB/s)
Tutup koneksi.
ftp> bye
Langkah 6 - Mengamankan Transmisi menggunakan SSL/TLS
Untuk mengenkripsi transmisi FTP, kita perlu memiliki Sertifikat SSL dan mengkonfigurasi vsftpd untuk menggunakannya.
Jika Anda sudah memiliki domain atau subdomain yang mengarah ke server FTP Anda, Anda dapat membuat Sertifikat SSL Let's Encrypt gratis dan menggunakannya.
Untuk tujuan tutorial kami, kami akan menggunakan sertifikat SSL yang ditandatangani sendiri. Untuk membuatnya, gunakan openssl
perintah.
Perintah berikut akan membuat kunci pribadi 2048-bit dan sertifikat yang berlaku selama 1 tahun. Sertifikat dan kunci akan disimpan ke file yang sama.
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Anda dapat melewati perintah yang mengikuti atau mengisi nilai sesuai keinginan Anda.
Sekarang setelah sertifikat kita dibuat, sekarang saatnya untuk membuka file konfigurasi vsftpd lagi.
$ sudo nano /etc/vsftpd.conf
Temukan baris berikut dan beri komentar dengan meletakkan hash di depannya sebagai berikut.
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Sekarang, tambahkan baris berikut.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
Juga, ubah nilai ssl_enable
untuk YES
.
ssl_enable=YES
Mari kita tambahkan beberapa pengaturan lagi untuk meningkatkan keamanan SSL.
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
Sebagian besar pengaturan ini cukup jelas. Ini menonaktifkan SSL untuk pengguna Anonim dan memerlukan SSL untuk transfer data dan login. Kami juga menonaktifkan protokol SSL yang tidak aman dan akan tetap menggunakan TLSv1.0. Dan terakhir, kami telah menonaktifkan penggunaan kembali SSL dan memerlukan rangkaian sandi Enkripsi Tinggi.
Mulai ulang server agar pengaturan diterapkan.
$ sudo systemctl restart vsftpd
Sekarang, Anda tidak akan dapat menggunakan FTP melalui baris perintah. Anda harus terhubung menggunakan klien yang mendukung TLS.
Langkah 7 - Menguji TLS dengan FileZilla
Untuk tutorial kita, kita akan menguji kemampuan TLS menggunakan Filezilla.
Saat Anda membuka Filezilla, klik ikon Pengelola Situs tepat di atas kata Host di baris atas.
Sebuah jendela baru akan terbuka. Klik Situs Baru tombol di pojok kanan bawah.
Anda akan melihat ikon baru dengan nama Situs baru . Anda dapat mengganti namanya menggunakan Ganti Nama tombol.
Isi bidang Host dengan alamat IP server Anda. Karena port FTP kami adalah 21 yang merupakan port default untuk FTP sehingga Anda dapat meninggalkan port lapangan kosong. Untuk opsi Enkripsi, pilih Memerlukan FTP eksplisit melalui TLS dari menu tarik-turun.
Isi nama pengguna dan kata sandi FTP Anda dengan yang kami buat di atas. Klik tombol Hubungkan tombol untuk melanjutkan.
Setelah koneksi berhasil, Anda akan melihat sertifikat server yang terlihat seperti berikut.
Anda dapat mencentang opsi Selalu percayai sertifikat ini di sesi mendatang. agar Anda tidak ditanya setiap kali login. Klik Oke untuk melanjutkan.
Anda sekarang dapat melakukan operasi FTP normal.
Langkah 8 - Nonaktifkan Akses Shell
Langkah ini sepenuhnya opsional. Secara default, saat membuat pengguna FTP, jika tidak ditentukan secara eksplisit, pengguna akan memiliki akses SSH ke server.
Anda harus menonaktifkan akses shell ke pengguna FTP untuk meningkatkan keamanan. Untuk menonaktifkannya, kita perlu membuat shell baru yang akan mencetak pesan yang mengatakan bahwa akun pengguna terbatas hanya untuk akses FTP.
Buat /bin/ftponly
shell dan membuatnya dapat dieksekusi.
$ echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
$ sudo chmod a+x /bin/ftponly
Tambahkan shell baru ke daftar shell yang valid di /etc/shells
berkas.
$ echo "/bin/ftponly" | sudo tee -a /etc/shells
Ubah shell pengguna menjadi /bin/ftponly
.
$ sudo usermod newftpuser -s /bin/ftponly
Anda dapat menggunakan perintah yang sama untuk mengubah shell semua pengguna yang ingin Anda beri akses FTP.
Kesimpulan
Ini menyimpulkan tutorial kami di mana kami menginstal dan mengkonfigurasi vsftpd untuk menginstal server FTP pada server berbasis Ubuntu 20.04. Kami juga mengonfigurasi koneksi FTP agar berfungsi menggunakan SSL/TLS.
Jika Anda memiliki pertanyaan, tanyakan di komentar di bawah.