Cấu hình FTP Passive cho dịch vụ Haproxy forward | Vietnix

Cấu hình FTP Passive cho dịch vụ Haproxy forward

22/02/2021

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

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments