Active FTP và Passive FTP
- Giới thiệu
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 không thật sự là chính xác đến tuyệt đối mà nó là kinh nghiệm và hiểu biết của mình. Mình vẫn cố gắng bổ sung từng ngày cho bài viết thêm đầy đủ, Nếu các bạn thấy chổ nào không đúng hoặc là cần làm rỏ hơn thì comment bên dưới cho mình biết nhé.
[+] Bài viết gồm các phần như sau.
–> Basic FTP Service.
–> Ví dụ về Active và Passive Mode FTP bằng command. Ở những ví dụ bạn sẽ thấy rỏ hơn vấn đề mà chúng ta đang đề cập tới. Vài tấm hình cho việc hiểu vấn đề càng thêm rỏ ràng. ok, Let’s go.
- Cơ bản FTP Service
FTP sử dụng TCP ( TCP hiểu đơn giản nó là Giao thức vận chuyển gói tin đáng tin cậy), không có thành phần nào của FTP sử dụng UDP (Không tin cậy).
FTP sử dụng 2 port 21 ( Port command hay còn gọi là Control port) và Port 20 ( 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
Active FTP thì client sẽ random unprivileged port ( là port N > 1023 ) để connect tới port command trên server là port 21. Sau đó Client sẽ lắng nghe trên port N+1 và gửi command port “port N+1” tới server. FTP server sẽ connect tới Client bằng data port mặt định của nó là port 20.
Đứng ở gốc độ Firewall Server thì để hổ trợ cho Mode Active FTP này cần phải mở những luồng xử lý sau.
+ FTP Server phải mở port 21 để đón nhận tất cả connect tới của Client.
+ FTP Server phải mở kết nối từ port 21 đến ports > 1023 để trả lời request của Client.
+ FTP Server phải mở kết nối từ port 20 đến ports > 1023 để tạo kết nối truyền dữ liệu với Client.
+ FTP Server phải mở kết nối từ ports > 1023 đến port 20 để xác nhận kết nối với Client
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ì đôi khi connection sẽ bị Blocked.
- Passive FTP
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.
Ở phía Server, để support Passive mode FTP này thì cần phải mở những luồng connect như sau.
+ FTP Server phải mở port 21 nhận kết nối từ mọi Client.
+ FTP Server phải mở các kết nối từ port 21 đi tới các port > 1023 để trả lời (response) cho Client.
+ FTP Server phải mở các port > 1023 để nhận kết nối tới data port từ phía Client.
+ FTP Server phải mở các port > 1023 tới các port > 1023 để trả lời chấp nhận kết nối và truyền dữ liệu với Client.
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.
- Một chú ý khác.
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.
- Tổng hợp
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.
Bài viết tiếp theo mình sẽ hướng dẫn các bạn cài đặt và cấu hình Vsftpd FTP sử dụng Passive Mode. 🙂
Cho m hỏi, nếu thay đổi port mặc định (21) của ftp server thành 1 port x bất kỳ thì làm tnao để fix đc cái data port? Vấn đề m gặp là phía admin k cho mở range port vì bảo mật hệ thống, do đó về lý thuyết là k thể mở passsive mode, vậy để mở ftp m phải fix 2 port (Cmd port = x và data port = y), sau đó nhờ admin mở 2 port x,y trên route, Có cách nào xử lý k?
data port la port 20, bạn chỉ cần bảo admin mở port 20 trên router là được, mình chưa hiểu ý bạn lắm. bạn có thể giải thích thêm k