Trong quá trình setup dịch vụ Haproxy forward về server backend, chắc hẳn chúng ta đôi lúc gặp trường hợp cần cho dịch vụ FTP qua Haproxy. Nếu chỉ thao tác listen port 20 và 21, sau đó forward về server backend sẽ gặp lỗi.
Nguyên nhân lỗi do cơ chế mặc định của FTP sẽ là mode Actice, ở mode này, sau khi kết nối port 21 (FTP control port) thì cả client và server đều ngầm hiểu đây là mode Active. Sau quá trình này, client tự động gửi dữ liệu lên server với port 20 (FTP data port).
Sơ đồ quá trình trao đổi dữ liệu FTP mode Active Bước 1: FTP control Client:<random port X> -------------------> <Port 21>:Server Bước 2: Cả 2 bên thống nhất mode Active, ngắt port 21. Bước 3: FTP transfer Client:<random port Y> -------------------> <Port 20>:Server
Chú ý khi cấu hình Haproxy forward
Lúc này sẽ nảy sinh vấn đề, do giữa client và server có Bước 1: FTP control nên server mới chấp nhận mở sẵn port 20 để tiếp nhận dữ liệu mà client gửi lên. Còn khi xuất hiện proxy ở giữa (Haproxy) thì proxy không có bước này, do đó không có quá trình bắt tay 3 bước với port 20 của proxy => gói tin transfer mà client gửi lên bị đánh INVALID. Để giải quyết vấn đề này, chúng ta chuyển sang dùng mode Passive:
- Chạy ở mode passive, để client chủ động connect lên port range mình quy định
- Haproxy muốn chạy cho FTP phải cấu hình cho cả port 21 và range port passive của ftp
Các bước thực hiện dịch vụ Haproxy forward
- Ở haproxy:
listen sv1_21 <IP_proxy>:21 mode tcp server sv1 <IP_backend> listen sv1_12000-12100 <IP_proxy>:12000-12100 mode tcp server sv1 <IP_backend>
- Ở FTP backend, edit file /etc/vsftpd/vsftpd.conf với nội dung như sau:anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=002
anon_upload_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
dual_log_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
force_dot_files=YES
ascii_upload_enable=YES
ascii_download_enable=YES
pasv_enable=YES
pasv_max_port=12100
pasv_min_port=12000
pasv_address=<IP_proxy>
Hi vọng những chia sẻ trên sẽ giúp các bạn cấu hình FTP Passive cho dịch vụ Haproxy forward dễ dàng hơn. Cảm ơn các bạn đã theo dõi bài viết của chúng tôi. Nếu có bất kỳ thắc mắc nào, các bạn có thể viết ở phần bình luận. Chúc các bạn thành công.