FTP (File Transfer Protocol) là một giao thức mạng dùng để truyền tải dữ liệu giữa máy khách (client) và máy chủ (server) qua mạng Internet hoặc mạng nội bộ. FTP cho phép người dùng tải lên(upload) và tải xuống(download) các tệp tin, đồng thời hỗ trợ quản lý tệp tin từ xa, giúp chia sẻ và lưu trữ dữ liệu dễ dàng.
FTP hoạt động theo mô hình client-server, nơi máy chủ FTP chịu trách nhiệm lưu trữ các tệp tin, và máy khách kết nối tới máy chủ để truyền tải hoặc quản lý dữ liệu.
FTP sử dụng 2 kết nối là FTP Control (Port 21) và FTP Data (Port 20):
FTP Control: luôn mở ở mọi thời điểm khi dữ liệu hoặc lệnh được gửi
FTP Data: chỉ mở khi có trao đổi dữ liệu thực
Quy trình:
FTP Client mở Control Connection đến FTP Server (Port 21) chỉ để truyền lệnh.
Client gửi username, password để xác thực; Server phản hồi chấp nhận hoặc từ chối.
Client gửi lệnh với tên tệp và kiểu dữ liệu; Server trả lời bằng mã chấp nhận hoặc từ chối.
Khi sẵn sàng, hai bên mở kết nối TCP trên Port 20 để truyền dữ liệu (định dạng ASCII hoặc binary).
Sau khi truyền dữ liệu, Data Connection (Port 20) đóng, Control Connection (Port 21) vẫn giữ để tiếp tục truyền dữ liệu khác hoặc đóng liên kết.
Active Data Connection và Passive Data Connection.
FTP mode Passive
Client mở Data và Control Port.
Control Connection: Client mở port bất kỳ gửi gói tin đến Port 21 Server; Server phản hồi bằng quy trình bắt tay ba bước.
Data Connection: Client gửi lệnh PASV trên Control Connection, trao đổi với Server qua High Port.
FTP Client khởi tạo cả hai kết nối và nhận dữ liệu, không sử dụng Port 20.
Username và password được gửi dưới dạng plaintext, dễ bị bắt gói tin qua Wireshark.
Nhận xét: Passive mode giúp Client, nhưng mở nhiều port cao (>1023) trên Server, gây rủi ro. Giải pháp là giới hạn range port trên Server để kiểm soát và giảm thiểu nguy cơ.
FTP mode Active
Thông thường, FTP Server khởi tạo yêu cầu dữ liệu, nhưng có thể bị chặn nếu Firewall của Client khóa Port Server cần dùng.
Nếu Firewall/Router chặn gói SYN từ Port 20 của Server, FTP chỉ thực hiện lệnh trên Control Connection, không thể truyền dữ liệu.
Control Connection: giống mode Passive.
Data Connection: Server dùng Port 20, Client dùng High Port.
FTP Client tạo Control Connection, FTP Server tạo Data Connection và chủ động gửi dữ liệu.
Cài đặt và cấu hình FTP Server với ProFTPD.
Bước 1: Cài đặt ProFTPD
Để cài đặt ProFTPD trên Ubuntu, bạn SSH vào server và thực hiện các lệnh sau bên dưới.
Sau khi cài đặt thành công, kiểm tra trạng thái của dịch vụ ProFTPD:
sudo systemctl status proftpd
Nếu dịch vụ chưa chạy, bạn có thể khởi động ProFTPD:
sudo systemctl start proftpd
Để dịch vụ tự động khởi động cùng hệ thống, chạy lệnh sau:
sudo systemctl enable proftpd
Bước 3: Cấu hình ProFTPD
Tệp cấu hình chính của ProFTPD nằm ở đường dẫn /etc/proftpd/proftpd.conf. Bạn có thể chỉnh sửa tệp này bằng cách sử dụng một trình soạn thảo như nano hoặc vim:
sudo nano /etc/proftpd/proftpd.conf
Dưới đây là một số cấu hình cơ bản:
Đổi tên máy chủ FTP: Tìm dòng ServerName và thay đổi theo ý bạn:
ServerName "My FTP Server"
Cho phép hoặc không cho phép người dùng ẩn danh (Để không cho phép người dùng ẩn danh truy cập, tìm và sửa):
<Anonymous ~ftp>User ftpGroup ftp# Comment out the following lines:# UserAlias anonymous ftp# <Directory *># <Limit WRITE># DenyAll# </Limit># </Directory></Anonymous>
Cấu hình user và group cho FTP:
User ftpGroup ftp
Cấu hình chế độ Passive Mode (cần thiết nếu server của bạn nằm sau tường lửa):
PassivePorts 60000 65535MasqueradeAddress 1.2.3.4 # Thay 1.2.3.4 bằng địa chỉ IP của bạn.
Bước 4: Tạo người dùng FTP
Tạo người dùng FTP mới:
sudo useradd -m ftpusersudo passwd ftpuser
Sau đó, đảm bảo thư mục home của người dùng có quyền truy cập phù hợp:
sudo chown -R ftpuser:ftpuser /home/ftpuser
Bước 5: Kiểm tra cấu hình
Sau khi cấu hình xong, bạn nên kiểm tra tính hợp lệ của tệp cấu hình bằng lệnh sau:
sudo proftpd --configtest
Nếu không có lỗi, hãy khởi động lại dịch vụ:
sudo systemctl restart proftpd
Bước 6: Kiểm tra FTP Server
Sử dụng ftp để kiểm tra kết nối đến FTP Server:
Sử dụng FTP qua CLI
Đăng nhập FTP: Sử dụng lệnh ftp <hostname>.
Liệt kê tệp: Lệnh ls để xem danh sách tệp trong thư mục.
Di chuyển thư mục: Dùng lệnh cd <thư_mục> để chuyển đến thư mục khác.
Tải file xuống: Sử dụng lệnh lcd <local_directory> để đặt vị trí tải xuống trước khi dùng get <tên_file>.
Tải file lên: Dùng lệnh put <tên_file> để upload file lên server.
Xóa file: Lệnh delete <tên_file> để xóa file.
Kết thúc phiên FTP: Gõ bye hoặc quit để kết thúc session FTP.
Ngoài ra, có thể đăng nhập và sử dụng FTP FileZilla hoặc trình duyệt web.
Bảo mật trong FTP
FTP truyền dữ liệu không an toàn khi để lộ thông tin đăng nhập dưới dạng plaintext, dễ bị tấn công. Để giải quyết, có thể bổ sung bảo mật bằng TLS/SSL (FTPS) hoặc sử dụng giao thức SFTP.
FTPS bổ sung mã hóa TLS/SSL vào FTP truyền thống, giúp bảo vệ thông tin đăng nhập và dữ liệu trong quá trình truyền tải. Tuy nhiên, FTPS yêu cầu mở nhiều port, gây khó khăn khi cấu hình tường lửa.
SFTP, dựa trên giao thức SSH, cung cấp bảo mật toàn diện hơn với việc mã hóa toàn bộ thông tin và yêu cầu chỉ một port, giúp dễ dàng hơn trong việc triển khai và quản lý.
Để tăng cường bảo mật, có thể áp dụng xác thực hai yếu tố (2FA) hoặc xác thực bằng key pair kết hợp với username và password, thêm một lớp phòng thủ quan trọng chống lại các cuộc tấn công brute-force hay phishing. Các cơ chế này không chỉ bảo vệ quá trình đăng nhập mà còn đảm bảo tính toàn vẹn và bảo mật của dữ liệu trong suốt quá trình truyền tải.