GNU/Linux >> Belajar Linux >  >> Linux

FTP Aktif vs. FTP Pasif

Pengantar

Salah satu pertanyaan yang paling umum terlihat ketika berhadapan dengan firewall dan masalah konektivitas Internet lainnya adalah perbedaan antara FTP (Protokol Transfer File) aktif dan pasif dan cara terbaik untuk mendukung salah satu atau keduanya. Mudah-mudahan, teks berikut akan membantu menjernihkan beberapa kebingungan tentang cara mendukung FTP di lingkungan firewall.

Posting ini mencakup contoh sesi FTP baris perintah aktif dan pasif. Contoh sesi ini akan membantu membuat segalanya sedikit lebih jelas. Mereka juga memberikan gambaran yang bagus tentang apa yang terjadi di balik layar selama sesi FTP. Sekarang, ke informasinya…

Dasar-dasar

FTP adalah layanan berbasis TCP secara eksklusif. Tidak ada komponen UDP ke FTP. FTP adalah layanan yang tidak biasa karena menggunakan dua port, port 'data' dan port 'perintah' (juga dikenal sebagai port kontrol). Secara tradisional ini adalah port 21 untuk port perintah dan port 20 untuk port data. Kebingungan dimulai namun ketika kami menemukan bahwa tergantung pada mode, port data tidak selalu pada port 20.

FTP aktif

Dalam mode aktif FTP, klien terhubung dari port unprivileged acak (N> 1024) ke port perintah server FTP, port 21. Kemudian, klien mulai mendengarkan port N+1 dan mengirimkan perintah FTP PORT N+1 ke FTP server. Server kemudian akan terhubung kembali ke port data yang ditentukan klien dari port data lokalnya, yaitu port 20.

Dari sudut pandang firewall sisi server, untuk mendukung mode aktif FTP, saluran komunikasi berikut perlu dibuka:

  • Port 21 server FTP dari mana saja (Klien memulai koneksi)
  • Port 21 server FTP ke port> 1024 (Server merespons port kontrol klien)
  • Port server FTP 20 ke port> 1024 (Server memulai koneksi data ke port data klien)
  • Port 20 server FTP dari port> 1024 (Klien mengirimkan ACK ke port data server)

Saat ditarik keluar, koneksi muncul sebagai berikut:

  • Dari port Klien 1026 (Cmd) ke port Server 21 (Cmd)
  • Dari port Server 21 (Cmd) ke port Klien 1026 (Cmd)
  • Dari port Server 20 (Data) ke port Klien 1027 (Data)
  • Dari port Klien 1027 (Data) ke port Server 20 (Data)

Pada langkah 1, port perintah klien menghubungi port perintah server dan mengirimkan perintah PORT 1027. Server kemudian mengirimkan ACK kembali ke port perintah klien pada langkah 2. Pada langkah 3 server memulai koneksi pada port data lokalnya ke port data yang ditentukan klien sebelumnya. Terakhir, klien mengirimkan ACK kembali seperti yang ditunjukkan pada langkah 4.

Masalah utama dengan mode aktif FTP sebenarnya jatuh di sisi klien. Klien FTP tidak membuat koneksi sebenarnya ke port data server-itu hanya memberi tahu server port apa yang didengarkannya dan server menghubungkan kembali ke port yang ditentukan pada klien. Dari firewall sisi klien, ini tampaknya merupakan sistem luar yang memulai koneksi ke klien internal—sesuatu yang biasanya diblokir.

Contoh FTP Aktif

Di bawah ini adalah contoh aktual dari sesi FTP yang aktif. Satu-satunya hal yang telah diubah adalah nama server, alamat IP, dan nama pengguna. Dalam contoh ini, sesi FTP dimulai dari user01 (192.0.0.1), kotak solaris yang menjalankan klien baris perintah FTP standar, ke dest_serv (192.0.0.2), kotak solaris yang menjalankan solaris[TM] 9 ftpd . Bendera debugging (-d) digunakan dengan klien FTP untuk menunjukkan apa yang terjadi di balik layar. Semua yang dicetak miring adalah output debug yang menunjukkan perintah FTP aktual yang dikirim ke server dan respons yang dihasilkan dari perintah tersebut.

Ada beberapa hal menarik yang perlu diperhatikan dalam dialog ini. Perhatikan bahwa ketika perintah PORT dikeluarkan, itu menentukan port pada sistem klien (192.0.0.1), bukan server. Kita akan melihat perilaku sebaliknya ketika kita menggunakan FTP pasif. Sementara kita berada di subjek, catatan singkat tentang format perintah PORT. Seperti yang Anda lihat pada contoh di bawah ini, formatnya adalah rangkaian enam angka yang dipisahkan oleh koma. Empat oktet pertama adalah alamat IP sedangkan dua oktet kedua terdiri dari port yang akan digunakan untuk koneksi data. Untuk menemukan port yang sebenarnya, kalikan oktet kelima dengan 256 dan kemudian tambahkan oktet keenam ke total. Jadi pada contoh di bawah nomor port adalah ( (256*188) + 231), atau 48359. Pemeriksaan cepat dengan netstat akan mengkonfirmasi informasi ini.

$ ftp -d dest_serv
Connected to dest_serv.
220 dest_serv FTP server ready.
Name (dest_serv:boqueron): root
---> USER root
331 Password required for root.
Password:
---> PASS XXXX
230 User root logged in.
---> SYST
215 UNIX Type: L8 Version: SUNOS
Remote system type is UNIX.
---> TYPE I
200 Type set to I.
Using binary mode to transfer files.
ftp> ls
---> PORT 192,0,0,1,188,231
200 PORT command successful.
---> TYPE A
200 Type set to A.
---> NLST
150 Opening ASCII mode data connection for file list.
TT_DB
bin
(...)
var
vol
xfn
226 Transfer complete.
191 bytes received in 0.03 seconds (6.16 Kbytes/s)
---> TYPE I
200 Type set to I.
ftp> quit
---> QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 599 bytes in 1 transfers.
221-Thank you for using the FTP service on dest_serv.
221 Goodbye.
# netstat -a | grep 48359
dest_serv.ftp-data       user01.48359 33580      0 49640      0 TIME_WAIT

FTP Pasif

Untuk mengatasi masalah server yang memulai koneksi ke klien, metode yang berbeda untuk koneksi FTP dikembangkan. Ini dikenal sebagai mode pasif, atau PASV, setelah perintah yang digunakan oleh klien untuk memberi tahu server bahwa itu dalam mode pasif.

Dalam mode pasif FTP, klien memulai kedua koneksi ke server, memecahkan masalah firewall yang menyaring koneksi port data yang masuk ke klien dari server. Saat membuka koneksi FTP, klien membuka dua port unprivileged acak secara lokal (N> 1024 dan N+1). Port pertama menghubungi server pada port 21, tetapi alih-alih mengeluarkan perintah PORT dan mengizinkan server untuk terhubung kembali ke port datanya, klien akan mengeluarkan perintah PASV. Hasilnya adalah server kemudian membuka port unprivileged acak (P> 1024) dan mengirimkan perintah PORT P kembali ke klien. Klien kemudian memulai koneksi dari port N+1 ke port P di server untuk mentransfer data.

Dari sudut pandang firewall sisi server, untuk mendukung mode pasif FTP, saluran komunikasi berikut perlu dibuka:

  • Port 21 server FTP dari mana saja (Klien memulai koneksi)
  • Port 21 server FTP ke port> 1024 (Server merespons port kontrol klien)
  • Port server FTP> 1024 dari mana saja (Klien memulai koneksi data ke port acak yang ditentukan oleh server)
  • Port server FTP> 1024 ke port jarak jauh> 1024 (Server mengirimkan ACK (dan data) ke port data klien)

Saat ditarik, koneksi FTP mode pasif terlihat seperti ini:

  • Dari port Klien 1026 (Cmd) ke port Server 21 (Cmd)
  • Dari port Server 21 (Cmd) ke port Klien 1026 (Cmd)
  • Dari port Klien 1027 (Data) ke port Server 2024
  • Dari port Server 2024 (Cmd) ke port Klien 1027 (Data)

Pada langkah 1, klien menghubungi server pada port perintah dan mengeluarkan perintah PASV. Server kemudian membalas pada langkah 2 dengan PORT 2024, memberi tahu klien port mana yang didengarkan untuk koneksi data. Pada langkah 3 klien kemudian memulai koneksi data dari port datanya ke port data server yang ditentukan. Terakhir, server mengirimkan kembali ACK pada langkah 4 ke port data klien.

Sementara mode pasif FTP memecahkan banyak masalah dari sisi klien, ini membuka berbagai macam masalah di sisi server. Masalah terbesar adalah kebutuhan untuk mengizinkan koneksi jarak jauh ke port bernomor tinggi di server. Untungnya, banyak daemon FTP, termasuk daemon solaris in.ftpd memungkinkan administrator untuk menentukan kisaran port yang akan digunakan oleh server FTP. Lihat Lampiran 1 untuk informasi lebih lanjut.

Masalah kedua melibatkan dukungan dan pemecahan masalah klien yang (atau tidak) mendukung mode pasif. Sebagai contoh, utilitas FTP baris perintah yang disediakan dengan daemon ftp Solaris mendukung mode pasif sejak Solaris 9 (dimulai dengan sccs v1.20). Lihatlah halaman manual (in.ftpd), opsi -p.

Dengan popularitas besar World Wide Web, banyak orang lebih suka menggunakan browser web mereka sebagai klien FTP. Kebanyakan browser hanya mendukung mode pasif saat mengakses ftp:// URL. Ini bisa baik atau buruk tergantung pada server dan firewall yang dikonfigurasi untuk mendukung.

Contoh FTP Pasif

Di bawah ini adalah contoh aktual dari sesi FTP pasif. Satu-satunya hal yang telah diubah adalah nama server, alamat IP, dan nama pengguna. Dalam contoh ini, sesi FTP dimulai dari user01 (192.0.0.1), kotak solaris yang menjalankan klien baris perintah FTP standar, ke dest_serv (192.0.0.2), kotak solaris yang menjalankan solaris 9 ftpd. Bendera debugging (-d) digunakan dengan klien FTP untuk menunjukkan apa yang terjadi di balik layar. Semua yang dicetak miring adalah output debug yang menunjukkan perintah FTP aktual yang dikirim ke server dan respons yang dihasilkan dari perintah tersebut. Output server normal ditampilkan dalam warna hitam, dan input pengguna dicetak tebal .

Perhatikan perbedaan perintah PORT dalam contoh ini sebagai lawan dari contoh FTP aktif. Di sini, kita melihat port dibuka pada sistem server (192.0.0.2), bukan pada klien. Lihat pembahasan tentang format perintah PORT di atas, pada bagian Contoh FTP Aktif.

$ ftp -d dest_serv
Connected to dest_serv.
220 dest_serv FTP server ready.
Name (dest_serv:boqueron): root
---> USER root
331 Password required for root.
Password:
---> PASS XXXX
230 User root logged in.
---> SYST
215 UNIX Type: L8 Version: SUNOS
Remote system type is UNIX.
---> TYPE I
200 Type set to I.
Using binary mode to transfer files.
ftp> passive
Passive mode on.
ftp> ls
---> PASV
227 Entering Passive Mode (192,0,0,2,7,176)
---> TYPE A
200 Type set to A.
---> NLST
150 Opening ASCII mode data connection for file list.
TT_DB
bin
cdrom
(...)
vol
xfn
226 Transfer complete.
191 bytes received in 0.027 seconds (7.04 Kbytes/s)
---> TYPE I
200 Type set to I.
ftp> quit
---> QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 599 bytes in 1 transfers.
221-Thank you for using the FTP service on dest_serv.
221 Goodbye.

Ringkasan

Bagan berikut akan membantu admin mengingat cara kerja setiap mode FTP:

Active FTP : 
command : client >1024 -> server 21 
data :    client >1024 <- server 20 
Passive FTP : 
command : client >1024 -> server 21 
data :    client >1024 -> server >1024

Ringkasan singkat pro dan kontra dari FTP aktif vs. pasif juga berurutan:

FTP aktif bermanfaat bagi admin server FTP, tetapi merugikan admin sisi klien. Server FTP mencoba membuat koneksi ke port tinggi acak di klien, yang hampir pasti akan diblokir oleh firewall di sisi klien. FTP pasif bermanfaat bagi klien, tetapi merugikan admin server FTP. Klien akan membuat kedua koneksi ke server, tetapi salah satunya adalah ke port tinggi acak, yang hampir pasti akan diblokir oleh firewall di sisi server.

Untungnya, ada sedikit kompromi. Karena admin yang menjalankan server FTP perlu membuat server mereka dapat diakses oleh banyak klien, mereka hampir pasti perlu mendukung FTP pasif. Eksposur port tingkat tinggi di server dapat diminimalkan dengan menentukan rentang port terbatas untuk digunakan server FTP. Dengan demikian, semuanya kecuali untuk kisaran port ini dapat di-firewall di sisi server. Meskipun ini tidak menghilangkan semua risiko ke server, ini sangat menguranginya. Lihat Lampiran 1 untuk informasi lebih lanjut.


Linux
  1. Linux – Port Serial Raspberrypi?

  2. Ikhtisar FTP dan SFTP

  3. Cara Mentransfer File Dalam Mode Pasif dengan FTP

  1. Gitlab pada porta 8080

  2. Jenkins aktif (keluar)

  3. Apakah mungkin untuk melakukan ping ke alamat:port?

  1. Perbaiki masalah Mode Pasif FTP pada VM OpenStack &EC2

  2. Terowongan SSH HTTPS

  3. Periksa Jumlah koneksi aktif pada port 80?