Sự khác biệt giữa FTP chủ động và thụ động là gì?


312

Ai đó có thể cho tôi biết sự khác biệt giữa FTP chủ động và thụ động không?
Cái nào thích hợp hơn?

Câu trả lời:


474

Chủ động và thụ động là hai chế độ mà FTP có thể chạy.

Đối với nền, FTP thực sự sử dụng hai kênh giữa máy khách và máy chủ, kênh lệnh và dữ liệu, thực sự là các kết nối TCP riêng biệt .

Kênh lệnh dành cho các lệnh và phản hồi trong khi kênh dữ liệu thực sự là truyền tệp.

Việc phân tách thông tin và dữ liệu lệnh này thành các kênh riêng biệt một cách tiện lợi để có thể gửi lệnh đến máy chủ mà không phải chờ quá trình truyền dữ liệu hiện tại kết thúc. Theo RFC, điều này chỉ bắt buộc đối với một tập hợp con các lệnh, chẳng hạn như bỏ, hủy bỏ chuyển khoản hiện tại và nhận trạng thái.


Trong chế độ hoạt động , máy khách thiết lập kênh lệnh nhưng máy chủ chịu trách nhiệm thiết lập kênh dữ liệu. Đây thực sự có thể là một vấn đề nếu, ví dụ, máy khách được bảo vệ bởi tường lửa và sẽ không cho phép các yêu cầu phiên trái phép từ các bên ngoài.

Trong chế độ thụ động , khách hàng thiết lập cả hai kênh. Chúng ta đã biết nó thiết lập kênh lệnh trong chế độ hoạt động và nó cũng làm như vậy ở đây.

Tuy nhiên, sau đó nó yêu cầu máy chủ (trên kênh lệnh) bắt đầu nghe trên một cổng (theo quyết định của máy chủ) thay vì cố gắng thiết lập kết nối trở lại máy khách.

Là một phần của việc này, máy chủ cũng trả về cho máy khách số cổng mà nó đã chọn để nghe, để máy khách biết cách kết nối với nó.

Khi khách hàng biết điều đó, nó có thể tạo thành công kênh dữ liệu và tiếp tục.

Thông tin chi tiết có sẵn trong RFC: https://www.ietf.org/rfc/rfc959.txt


1
Tôi không nghĩ câu lệnh xung quanh cổng Y là đúng, ở chế độ hoạt động, máy khách không xác định cổng Y, máy chủ cố gắng chọn ngẫu nhiên một cổng # và thử xem liệu máy khách có cho phép giao tiếp qua cổng đã chọn không . Lý do tôi nói điều này là, nếu điều này không đúng (đối số của tôi) thì phía máy khách ngay cả khi nó ở phía sau tường lửa luôn có thể tạo hai quy tắc tường lửa một cho kết nối đi và một cho kết nối đến.
arun.raj.mony

1
@arun, khách hàng không nhất thiết phải kiểm soát tường lửa. Ví dụ: trong môi trường doanh nghiệp, thường có tường lửa giữa mạng toàn công ty và thế giới bên ngoài, qua đó khách hàng chạy FTP không có điện.
paxdiablo

Ở chế độ thụ động, tại sao máy chủ gửi máy khách một cổng ngẫu nhiên cho máy khách thay vì máy khách kết nối trực tiếp với cổng máy chủ 20?
chengbo

@paxdiablo Trong chế độ thụ động, tại sao máy chủ chỉ định một cổng ngẫu nhiên không và gửi nó đến máy khách để kết nối dữ liệu? Tại sao máy khách không thể trực tiếp mở kênh dữ liệu từ cổng máy khách sang cổng số 20 ở phía máy chủ?
Zephyr

1
Tôi đã đặt câu hỏi ở đây bây giờ networkengineering.stackexchange.com/q/43680/37406
Zephyr

166

Gần đây tôi gặp phải câu hỏi này tại nơi làm việc của mình vì vậy tôi nghĩ rằng tôi nên nói gì đó hơn ở đây. Tôi sẽ sử dụng hình ảnh để giải thích cách FTP hoạt động như một nguồn bổ sung cho câu trả lời trước đó.

Chế độ hoạt động:

chế độ hoạt động


Chế độ thụ động:

nhập mô tả hình ảnh ở đây


Trong cấu hình chế độ hoạt động, máy chủ sẽ cố gắng kết nối với cổng phía máy khách ngẫu nhiên. Vì vậy, rất có thể, cổng đó sẽ không phải là một trong những cổng được xác định trước. Do đó, một nỗ lực kết nối với nó sẽ bị chặn bởi tường lửa và không có kết nối nào được thiết lập.

nhập mô tả hình ảnh ở đây


Một cấu hình thụ động sẽ không có vấn đề này vì máy khách sẽ là người khởi tạo kết nối. Tất nhiên, phía máy chủ cũng có thể có tường lửa. Tuy nhiên, do máy chủ dự kiến ​​sẽ nhận được số lượng yêu cầu kết nối lớn hơn so với máy khách, nên sẽ rất hợp lý khi quản trị viên máy chủ thích ứng với tình huống và mở ra một lựa chọn cổng để đáp ứng cấu hình chế độ thụ động.

Vì vậy, tốt nhất bạn nên cấu hình máy chủ để hỗ trợ FTP chế độ thụ động. Tuy nhiên, chế độ thụ động sẽ khiến hệ thống của bạn dễ bị tấn công vì các máy khách được cho là kết nối với các cổng máy chủ ngẫu nhiên. Do đó, để hỗ trợ chế độ này, không chỉ máy chủ của bạn phải có sẵn nhiều cổng, tường lửa của bạn cũng nên cho phép kết nối với tất cả các cổng đó đi qua!

Để giảm thiểu rủi ro, một giải pháp tốt sẽ là chỉ định một phạm vi cổng trên máy chủ của bạn và sau đó chỉ cho phép phạm vi cổng đó trên tường lửa của bạn.

Để biết thêm thông tin, xin vui lòng đọc tài liệu chính thức .


Tôi chỉ đoán đó là vấn đề bảo mật. Nếu máy chủ nghe cùng một cổng (20) thì nó không thể hiểu máy khách nào đang nói, vì vậy nó chọn một cổng ngẫu nhiên và gửi nó đến máy khách, bắt đầu lắng nghe cổng đó. Khi máy khách kết nối với cổng đó, máy chủ sẽ biết nó thuộc về máy khách nào. Nhưng nó đủ để một MITM kết nối với cùng một khách hàng. (tốt, tấn công mitm ở đây dù sao cũng khó khăn ...)
Daniele Cruciani

2
Câu trả lời tuyệt vời, đặc biệt là thông tin về vấn đề tường lửa
Anh Tuấn

14

Phiên bản được điều chỉnh lại của bài viết Chế độ kết nối FTP của tôi (Hoạt động so với thụ động) :

Chế độ kết nối FTP (hoạt động hoặc thụ động), xác định cách thiết lập kết nối dữ liệu. Trong cả hai trường hợp, máy khách tạo kết nối điều khiển TCP tới cổng lệnh máy chủ FTP 21. Đây là kết nối đi tiêu chuẩn, như với bất kỳ giao thức truyền tệp nào khác (SFTP, SCP, WebDAV) hoặc bất kỳ ứng dụng khách TCP nào khác (ví dụ: trình duyệt web ). Vì vậy, thường không có vấn đề khi mở kết nối điều khiển.

Trong đó giao thức FTP phức tạp hơn so với các giao thức truyền tệp khác là truyền tệp. Mặc dù các giao thức khác sử dụng cùng một kết nối cho cả điều khiển phiên và truyền tệp (dữ liệu), giao thức FTP sử dụng một kết nối riêng cho việc truyền tệp và danh sách thư mục.

Trong chế độ hoạt động , máy khách bắt đầu nghe trên một cổng ngẫu nhiên cho các kết nối dữ liệu đến từ máy chủ (máy khách gửi lệnh FTP PORTđể thông báo cho máy chủ biết cổng nào đang nghe). Ngày nay, thông thường, máy khách đứng sau tường lửa (ví dụ: tường lửa Windows tích hợp) hoặc bộ định tuyến NAT (ví dụ modem ADSL), không thể chấp nhận các kết nối TCP đến.

Vì lý do này, chế độ thụ động đã được giới thiệu và chủ yếu được sử dụng ngày nay. Sử dụng chế độ thụ động là tốt hơn vì phần lớn cấu hình phức tạp chỉ được thực hiện một lần ở phía máy chủ, bởi quản trị viên có kinh nghiệm, thay vì cá nhân ở phía máy khách, bởi (có thể) người dùng thiếu kinh nghiệm.

Trong chế độ thụ động , máy khách sử dụng kết nối điều khiển để gửi PASVlệnh đến máy chủ và sau đó nhận địa chỉ IP của máy chủ và số cổng máy chủ từ máy chủ, sau đó máy khách sử dụng để mở kết nối dữ liệu đến địa chỉ IP máy chủ và máy chủ số cổng nhận được.

Cấu hình mạng cho chế độ thụ động

Với chế độ thụ động , phần lớn gánh nặng cấu hình nằm ở phía máy chủ. Quản trị viên máy chủ nên thiết lập máy chủ như được mô tả dưới đây.

Tường lửa và NAT ở phía máy chủ FTP phải được cấu hình không chỉ cho phép / định tuyến các kết nối đến trên cổng FTP 21 mà còn là một loạt các cổng cho các kết nối dữ liệu đến. Thông thường, phần mềm máy chủ FTP có tùy chọn cấu hình để thiết lập một loạt các cổng, máy chủ sẽ sử dụng. Và phạm vi tương tự phải được mở / định tuyến trên tường lửa / NAT.

Khi máy chủ FTP đứng sau NAT, nó cần biết địa chỉ IP bên ngoài của nó, vì vậy nó có thể cung cấp nó cho máy khách để đáp lại PASVlệnh.

Cấu hình mạng cho Chế độ hoạt động

Với chế độ hoạt động , phần lớn gánh nặng cấu hình nằm ở phía máy khách.

Tường lửa (ví dụ tường lửa Windows) và NAT (ví dụ quy tắc định tuyến modem ADSL) ở phía máy khách phải được cấu hình để cho phép / định tuyến một loạt các cổng cho các kết nối dữ liệu đến. Để mở các cổng trong Windows, hãy đi tới Bảng điều khiển> Hệ thống và bảo mật> Tường lửa Windows> Cài đặt nâng cao> Quy tắc trong nước> Quy tắc mới . Để định tuyến các cổng trên NAT (nếu có), hãy tham khảo tài liệu của nó.

Khi có NAT trong mạng của bạn, máy khách FTP cần biết địa chỉ IP bên ngoài mà WinSCP cần cung cấp cho máy chủ FTP bằng PORTlệnh. Để máy chủ có thể kết nối chính xác trở lại máy khách để mở kết nối dữ liệu. Một số máy khách FTP có khả năng tự động phát hiện địa chỉ IP bên ngoài, một số phải được cấu hình thủ công.

Tường lửa thông minh / NAT

Một số tường lửa / NAT cố gắng tự động mở / đóng cổng dữ liệu bằng cách kiểm tra kết nối điều khiển FTP và / hoặc dịch các địa chỉ IP kết nối dữ liệu trong lưu lượng kết nối điều khiển.

Với tường lửa / NAT như vậy, cấu hình trên là không cần thiết đối với FTP không được mã hóa đơn giản. Nhưng điều này không thể hoạt động với FTPS, vì lưu lượng kết nối điều khiển được mã hóa và tường lửa / NAT không thể kiểm tra cũng như không sửa đổi nó.


11

Chế độ hoạt động: -server khởi tạo kết nối.

Chế độ thụ động: -client khởi tạo kết nối.


1

Chế độ hoạt động, Máy khách phát lệnh PORT cho máy chủ báo hiệu rằng nó sẽ tích cực cung cấp một số IP và số cổng để mở Kết nối dữ liệu trở lại máy khách.

Chế độ thụ động, Máy khách đưa ra lệnh PASV để chỉ ra rằng nó sẽ chờ đợi một cách thụ động, để máy chủ cung cấp IP và số cổng, sau đó máy khách sẽ tạo Kết nối dữ liệu cho máy chủ.

Có rất nhiều câu trả lời hay ở trên, nhưng bài đăng trên blog này bao gồm một số đồ họa hữu ích và đưa ra một lời giải thích khá chắc chắn: https://titanftp.com/2018/08/23/what-is-the-difference-b between -active- and -passive-ftp /

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.