GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Menginstal dan Mengonfigurasi server FTP (vsftpd) dengan SSL/TLS di Ubuntu 20.04

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.

  1. 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 ditulisi upload untuk mengupload file. Untuk mencapai ini, tambahkan baris berikut di bagian bawah file.

    user_sub_token=$USER
    local_root=/home/$USER/ftp
    
  2. 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.


Ubuntu
  1. Cara Menginstal Server FTP di CentOS 7 Dengan VSFTPD

  2. Cara Menginstal Server FTP vsftpd dan Mengamankannya dengan TLS di Debian 11

  3. Instal Vsftpd dengan SSL/TLS di Ubuntu 20.04

  1. Cara Menginstal Server FTP Di Ubuntu dengan vsftpd

  2. Cara Menginstal dan Mengonfigurasi Server NFS di Ubuntu 20.04

  3. Cara Menginstal dan Mengkonfigurasi VNC di Ubuntu 20.04

  1. Cara Mengatur Server FTP dengan VSFTPD di Ubuntu 20.04

  2. Cara Menginstal dan Mengkonfigurasi VNC di Ubuntu 18.04

  3. Cara Mengatur Server FTP dengan VSFTPD di Ubuntu 18.04