Active và Passive FTP: Đây là 2 chế độ hoạt động của FTP server. Bài viết này sẽ giải thích về sự ảnh hưởng khác nhau của Firewall lên 2 chế độ Active và Passive. Bài viết này được viết theo kinh nghiệm của mình.
FTP chỉ sử dụng TCP để truyền tải, FTP server sẽ listen trên 2 port 20 và 21, sử dụng port 21 để xác thực, điều khiển ( gọi là control port) và Port 20 để truyền tải dữ liệu ( data Port ). Nhưng data port không hẳn luôn luôn là 20 mà nó phụ thuộc vào FTP mode. Sau khi đọc xong hết bài viết các bạn sẽ hiểu được điều này.
Active FTP thì client sẽ đi tới FTP server bằng 1 port ngẫu nhiên unprivileged port ( là port có số lớn hơn 1023 ), sau đây sẽ gọi là port S, để connect tới port command trên server là port 21. Sau đó Client sẽ listen trên port S+1 và gửi command port “port S+1” cho thằng server: tao đang chờ mày ở port S+1. FTP server sẽ connect tới port S+1 của Client bằng data port mặt định của nó là port 20.
Hình ví dụ minh họa cho Active FTP mode.
Ở bước 1, từ command port 1026 Client kết nối tới command port 21 của Server và gửi command port PORT 1027. Server gửi gói tin ACK (hiểu đơn giản là chấp nhận ) về cho Client ở bước 2. Bước 3 Server khởi tạo kết nối từ port data 20 tới port 1027 của Client ( port 1027 là port Client gửi cho Server ở bước 1 ). Và cuối cùng là Client gửi gói tin ACK về cho Server.
Vấn đề chính gặp phải khi sử dụng Active FTP là có thể bị mất kết nối ở phía Client. Client không khởi tạo kết nối tới port data của Server mà nó đơn giản chỉ nói với Server là tôi đang lắng nghe trên port 1027 và chờ Server kết nối tới. Nếu có tồn tại Firewall đứng trước Client thì có thể thằng client listen port 1027 chờ server gửi dữ liệu nhưng bị firewall ở ngoài chặn mất.
Thay vì tập trung giải quyết vấn đề bị firewall chặn ở Active mode, thì một different method (một phương thức kết nối mới cho FTP ) for FTP connections được xây dựng. đó là Passive mode.
Trong passive mode FTP Client khởi tạo 2 connections đến Server, như vậy là giải quyết được vấn đề bên phía Client Blocked connection từ Server đến data port của Client. Passive mode hoạt động như sau.
Khi khởi tạo kết nối thì Client mở 2 ports random unprivileged port local (N > 1023 and N+1 ). Port đầu tiên Client mở connect tới port 21 của Server. Nhưng thay thì gửi PORT command như ở Active mode thì Client sẽ gửi câu lệnh PASV command. Lúc đó Server sẽ khởi tạo a random unprivileged port ( P > 1023)
và gửi P đến Client trong cái response PASV command. Lúc này Client khởi tạo connection từ port N+1 của nó tới port P trên Server và transfer data.
Tại Step 1. Client liên lạc với Server trên command port và đưa ra câu lệnh PASV. Server trả lời ở Step 2 với PORT 1024 và nói với Client đây là port dữ liệu tối đang lắng nghe. Step 3 Client khởi tạo data connection từ port Data của nó tới port 1024 mà Server đã gửi cho nó. Cuối cùng là Server gửi lại gói tin ACK chấp nhận.
Với Passive mode ta giải quyết được nhiều vấn đề ở phía Client, nhưng nó đã mở ra một range port lớn tạo nên các lổ hỏng nguy hiểm cho phía Server. Vấn đề lớn nhất ở đây là phải chấp nhận hầu hết các kết nối port > 1023 trên Server
Vì lý do này nên hầu hết các FTP Service đều được khai báo một range port nhất định, để dễ dàng Control hơn. và tránh rũi ro.
Vấn đề lớn thứ 2 là phía Client không hổ trợ Passive Mode. Ví Dụ như nếu ai sài Solaris thì commandline FTP không hổ trợ cơ chế Passive này mà phải sử dụng FTP software client của hãng khác. ví dụ như ncftp.
Một số lượng lớn người dùng sử dụng Browser (Trình duyệt) của mình để đăng nhập vào FTP server. và trên Browser chỉ hổ trợ Passive mode.
Active FTP Mode không thể hoạt động được với mô hình Client-side NAT Device. Vì thiết bị này không có khả năng thay thế thông tin IP trong FTP Packets.
Dưới đây là một biểu đồ nhỏ để giúp chúng ta nhớ được 2 mode FTP trên.
Active FTP :
command : client >1023 –> server 21
data : client >1023 <– server 20
Passive FTP :
command : client >1023 –> server 21
data : client >1024 –> server >1023
Như vậy, với Active FTP thì có lợi cho FTP Server admin, nhưng lại ảnh hưởng tới Client side. Server tạo connetion tới random hight ports trên Client. Có thể sẽ bị Firewall Client Side Blocked. Còn với Passive FTP thì có lợi cho phía Client nhưng thiệt bên FTP Server admin. Client khởi tạo 2 kết nối tới Server với Hight Ports có thể sẽ bị Server Blocked.
Tuy vậy nhưng với kinh nghiệm và hiểu biết của mình thì nếu Support cho một hệ thống với nhiều truy cập FTP từ Client. thì Nên setup Passive mode. Việc Control trên một Server để giúp tất cả Client có thể connect tới thì dễ hơn là việc Control trên Firewall của Từng Client Side.