Tìm hiểu FTP và chế độ Active Mode – Passive Mode

FTP – File Transfer Protocol cái tên đã quá quen rồi. Bạn muốn truyền file, bạn muốn copy dữ liệu từ server về client hay đẩy dữ liệu từ PC lên Hosting/VPS đều phải dùng FTP cả.

Đây là bài đầu tiên trong series bài viết FTP Server. Mình sẽ giúp các bạn tìm hiểu về FTP, cách cài đặt cấu hình FTP và giải đáp một số thắc mắc thường gặp một cách dễ hiểu nhất.

Muốn tìm hiểu giao thức FTP bạn buộc phải có một chút kiến thức Network cơ bản, do đó mình sẽ ghép thêm vào bài để cho các bạn tiện theo dõi.

1. Tìm hiểu về FTP

Định nghĩa FTP các bạn lên Wikipedia mà search mình không nói ở đây nữa lại thành nhàm chán.

Các bạn cần hiểu FTP là một giao thức (Protocol) thuộc tầng ứng dụng (Application layer – OSI Model). Phải phân biệt rõ ràng giao thức FTP với các giao thức khác HTTP, SSH… Trong thực tế người ta thường kết hợp các giao thức lại với nhau làm nhiều người mông lung khó phân biệt.

Đơn giản như này, mình có xem một người cài FTP Server trên Windows Server, do khi cài FTP Server trên Windows phải cài IIS làm Web Server – HTTP). Và khi truy cập truy cập FTP Server có thể dùng Web Browser lấy được dữ liệu thành ra cứ nghĩ FTP là HTTP. Thực ra không phải vậy nó là hai giao thức khác nhau, do Web Browser như Firefox hay Chrome có chức năng làm FTP Client nên chúng ta có thể dùng nó để truy cập FTP Server được, giống Filezilla cũng là một FTP Client vậy.

Tìm hiểu FTP Protocol

Chính sự kết hợp giao thức đó mà chúng ta có FTPS, là sự kết hợp của FTP và SSL/TLS (FTP over SSL/TLS).

Còn như SFTP (SSH File Transfer Protocol), đây là một giao thức độc lập được phát triển từ SSH để bảo mật thông tin truyền đi trên internet, nó không liên quan gì đến giao thức FTP truyền thống đâu nhé.

Cách hoạt động của FTP khác biệt so với các giao thức khác. FTP sẽ tạo ra 2 connection khi làm việc. Một Connection Control để truyền Command , một Connection Data khác để truyền dữ liệu. Còn như giao thức HTTP thì chỉ cần một connection đã có thể làm việc được rồi.

FTP có hai chế đội hoạt động là độ Active ModePassive Mode.

Để hiểu cách hoạt động của giao thức FTP chúng ta phải nắm được một số vấn đề sau.

Port Number

Hai máy tính bất kỳ làm việc với nhau chúng phải khởi tạo một connection, đồng nghĩa với việc mỗi máy tính phải mở một port nào đó để truyền tin cho nhau.

Trên một máy tính có thể mở 65535 Port để chạy dịch vụ.

Port từ 1-1023 là các Port đặc biệt (Well-known ports) được dùng mặc định cho các dịch vụ được IANA quy định. Ví dụ Port 22 cho SSH, 25/SMTP, 53/DNS, 80/HTTP, 443/SSL… Tuy nhiên chúng ta vẫn có thể thay đổi được theo ý muốn.

Port từ 1024-65535 là những Port cao (High Port) được dùng cho các dịch vụ của cá nhân tổ chức nào đó, như 3306/MySQL, 3389/Remote Desktop, 11211/Memcached…

[alert-note]

Khi Client kết nối đến Server nó sẽ sử dụng port cao trong khoảng 1024-65535.

[/alert-note]

Tài liệu tham khảo

Three way handshake

Hay còn gọi là quá trình bắt tay 3 bước, dùng để đàm phán thiết lập connection giữa Client/Server. FTP hoạt động trên TCP nên cũng phải tuân theo Three way handshake.

Vắn tắt như này:

  • Client gửi một gói tin SYN đến  Server.
  • Server nhận gói SYN, rồi gửi lại gói SYS-ACK cho Client.
  • Client nhận SYN-ACK, rồi gửi lại gói ACK thông báo đồng ý tạo kết nối.

Sau bước đàm phán này connection giữa client với server mới được khởi tạo.

Kiến thức bắt tay 3 bước này rất quan trọng, nó được dùng ở khắp mọi nơi trong lĩnh vực công nghệ thông tin. Trong công tác quản trị Firewall/Monitoring càng quan trọng hơn. Hình thức tấn công SYN FLOOD  cũng được sinh ra từ lỗ hổng Three way handshake này.

Trong khuôn khổ bài này bạn chỉ cần biết nhiêu đó là đủ, giờ ta đi tiếp nội dung bài viết.

Sơ đồ dùng Demo trong bài

  • FTP Client – IP: 139.162.36.70 dùng IP Public.
  • FTP Server – IP: 192.168.0.2 đây là IP Private, vì mình cài WireShark trên chính FTP Server để bắt gói tin nên nó không nhận diện được IP Public của thiết bị NAT đưng đằng trước.

Cũng không cần để ý vấn đề này. Chỉ cần biết đó là hai IP khác nhau một cái của FTP Server một cái của FTP Client.

2. FTP Active Mode

Đây là chế độ hoạt động đầu tiên của FTP mình muốn nói đến, bạn xem sơ đồ tổng quát.

FTP Active Mode

FTP Active Mode

Cách hoạt động của FTP Active Mode như sau.

Tạo Connection Control

(1) FTP Client: Mở một port cao bất kỳ gửi gói tin SYN, ví dụ từ Port 39126 -> Port 21 trên FTP Server với mục đích thông báo.

(2) FTP Server: Đồng ý và gửi lại gói tin SYN/ACK từ Port 21 -> Port 39162 trên FTP Client.

(3) FTP Client: Sẽ gửi lại gói tín ACK từ Port 39162 -> Port 21 trên FTP Server đồng ý tạo kết nối. Tại thời điểm này Connection Control đã được khởi tạo xong.

SYN SYN/ACK ACK

Dùng WireShark bắt gói tin quá trình bắt tay 3 bước

Tạo Connection Data

(4) FTP Client: Sử dụng Connection Control được tạo trước đó để gửi command PORT yêu cầu FTP Server dùng Active Mode để truyền file,từ Port 39126 -> Port 21 trên FTP Server. Đồng thời thông báo cho FTP Server biết nó sẽ mở Port 38893 mới để chờ tạo Connection Data.

(5) FTP Server: Nhận được yêu cầu và tiến hành đàm phán bắt tay 3 bước với FTP Client. Nó sẽ gửi gói SYN từ Port 20 -> Port 38893,  rồi nhận lại SYN/ACK rồi tiếp tục gửi ACK đến khi quá trình bắt tay 3 bước hoàn tất.

Tạo Connection Data

 

Bạn để ý hình bên trên, khi quá trình đàm phán 3 bước đang diễn ra, thì FTP Client cũng gửi một Request: RETR test.txt trên Connection Control đến FTP Server để yêu cầu download file test.txt, đây là file mình dùng demo.

Quá trình tạo Connection Data diễn ra rất nhanh. Xong đâu đấy giờ FTP Server chỉ việc gửi data về cho FTP Client thôi.

(6) FTP Server: Gửi file cho FTP Client

Transfer Data

Trên hình bạn sẽ thấy data được truyền đi trên Connection Data từ Port 20 FTP Server -> Port 38893 FTP Client, file có dung lượng 57 Bytes có nội dung là:

*********Tim hieu FTP Server tai www.thuysys.com*********

Cách hoạt động của FTP Active Mode được tóm tắt lại như sau.

FTP Client khởi tạo Connection Control, còn FTP Server khởi tạo Connection Data. FTP Server là bên chủ động gửi Data cho FTP Client.

 

3. FTP Passive Mode

Do port cao được tạo ngẫu nhiên thành ra khi làm demo giữa hai mode các thông số port sẽ khác đi, các bạn chú ý theo dõi nhé.

Passive Mode

FTP Passive Mode

Tạo Connection Control

Quá trình đàm phán để tạo Connection Control cũng tuần tự theo các bước (1) -> (3) trong Active Mode mình không nói lại nữa.

Tạo Connection Data

Đến đây Connection Control đã tạo xong giữa FTP Client Port 47962 <-> FTP Server Port 21, bước tiếp theo mình gọi là bước (4).

(4) FTP Client: Để truyền dữ liệu theo Passive Mode, FTP Client chủ động gửi command PASV trên Connection Control.
(5) FTP Server: Nhận được yêu cầu phải dùng Passive Mode để truyền dữ liệu, nó mở Port 54157 và response lại cho FTP Client biết sẽ dùng Port 54157 để tạo Connection Data.

Passive Response

(6) FTP Client: Nhận được phản hồi, nó sẽ mở Port 52771 để tiến hành đàm phán 3 bước với FTP Server. Các bước diễn ra tuần tự như hình bên dưới.

Passive Mode SYN SYN/ACK ACK

Sau bước này Connection Data đã khởi tạo xong giữa FTP Client Port 52771 <-> FTP Server Port 54157.

(7) FTP Client: Muốn download file về máy FTP Client chỉ việc gửi Request: RETR test.txt đến FTP Server qua Connection Control. FTP Server sẽ truyền dữ liệu lại cho FTP Client qua Connection Data.

Passive Transfer Data

Mình tóm tắt quá trình tạo kết nối trong Passive Mode.

FTP Client khởi tạo cả hai connection, FTP Client là phía đòi nhận Data. Trong trường hợp này FTP Server sẽ không dùng Port 20 để truyền Data.

 

Đến đây chắc các bạn đã phân biệt được sự khác nhau giữa Active Mode và Passive Mode rồi đúng không! Có thời gian các bạn thử bắt gói tin rồi so sánh hai chế độ Active & Passive xem sao, sẽ vỡ ra nhiều điều đấy.

4. Chú ý khi sử dụng FTP

Phần này mình nói thêm, có thể một số bạn sẽ gặp phải.

Khi cài đặt hay sử dụng FTP đôi khi bạn sẽ gặp lỗi đăng nhập thành công mà không down/up được data. Đây là lỗi sử dụng Active Mode cụ thể là bước (5) khi tạo Connection Data.

Trong bước này FTP Server gửi gói SYN từ port thấp 20 đến port cao 38893 của FTP Client. Mà theo nguyên tắc hoạt động của Firewall/Router/Modem FTTH tất cả các gói tin mới (State NEW) nếu đi vào không được Public và Allow IN/OUT sẽ bị Drop hết. Do đó FTP không tạo được Connection Data mà chỉ thực hiện được command trên Connection Control thôi.

 

Firewall/Router/Modem mình gọi chung là Firewall cho dễ. Thời điểm hiện tại Firewall đã thông minh hơn, kể cả FTP Client nằm trong mạng LAN (Private Network) nó sẽ biết tự động Public Port ra internet để FTP Server kết nối đến. Việc bị Drop gói SYN thường xảy ra với Firewall cũ thôi.

Với người dùng VPS <-> VPS thì yên tâm, hầu hết các bạn đều sử dụng FTP trên môi trường trong suốt. Nghĩa là VPS của bạn dùng IP Public, giữa client/server không có bất cứ tường lửa nào. Thứ nữa các FTP Client bây giờ đều dùng Passive Mode làm mặc định bạn sẽ ít gặp lỗi hơn như FileZilla/Chrome/WinSCP…

Một chút thông tin về FTP muốn chia sẻ mong nhận được sư ủng hộ của các bạn.

Nội dung bài tiếp theo trong chủ đề FTP mình sẽ hướng dẫn cách cài đặt vsFTPD làm FTP Server hoàn chỉnh. Hẹn gặp lại ở bài kế tiếp.

5 Comments

  1. Lu Anh Hoa November 28, 2019 Reply
  2. hoaky86 October 17, 2018 Reply
    • Mr Thủy October 17, 2018 Reply
  3. tuấn February 22, 2018 Reply
  4. Tur Le July 14, 2017 Reply

Leave a Reply