Lab010: CentOS - Thiết lập hệ thống chia sẻ file bằng FTP/FTPS

"FTP - File Transfer Protocol"
**
**

I Thiết lập môi trường thực hành

1.1 Topo mạng

Để cấu hình hệ thống chia sẻ file FTP, ta sẽ thiết lập hệ thống như sau:
  • FTP-Server (số hiệu CentOS8-05) có địa chỉ IP tĩnh 10.1.1.20/24 kết nối với Switch thông qua Interface eth1.
  • FTP-Client (số hiệu CentOS8-06) nhận địa chỉ IP động 10.1.1.xxx/24 từ FTP-Server kiêm DHCP-Server kết nối với Switch thống qua Interface eth1.
**

1.2 Các bước thực hiện

Đối với FTP-Server:
  • Cài đặt gói vsftpd.
  • Chỉnh sửa HostName của FTP-Server để trong tương lai Client có thể truy cập FTP-Server thông qua tên miền.
  • Cấu hình dịch vụ FTP bằng cách chỉnh sửa file /etc/vsftpd/vsftpd.conf.
  • Tạo User chuyên dùng cho dịch vụ FTP. User này về sau sẽ được cấp phát cho Clients để đăng nhập vào FTP-Server. Khai báo User vừa tạo vào chroot_list của dịch vụ FTP.
  • Khai báo dịch vụ FTP với 2 đồng chí bảo vệ là FirewallDSELinux để các kết nối từ Client đến Server trong tương lai sẽ không bị chặn
Đối với FTP-Client chạy HDH Linux:
  • Cài đặt gói lftp.
  • Chỉnh sửa file /etc/host của Client để phục vụ việc truy cập FTP-Server thông qua tên miền. Bước này có thể bỏ qua nếu trong hệ thống của chúng ta có DNS-Server.
Đối với Client chạy hệ điều hành Windows, ta có thể dùng các phần mềm chuyên dụng để truy cập FTP-Server.
**

II Cấu hình dịch vụ FTP

2.1 Cấu hình FTP-Server

Cài đặt gói FTP:
sudo dnf install -y vsftpd
Chỉnh sửa lại HostName của FTP-Server để trong tương lai Client có thể truy cập vào Server thông qua tên miền:
sudo nvim /etc/hostname
Ở trong ví dụ này, mình lấy HostName là lpi và Domain là tlu.vn:
Tiếp tục chỉnh sửa file /etc/hosts:
sudo nvim /etc/hosts
Thay đổi các giá trị "localhost" và "localhost.domain" thành "lpi" và "lpi.tlu.vn"
Tiến hành chỉnh sửa file config của FTP bằng trình soạn thảo Neovim:
sudo nvim /etc/vsftpd/vsftpd.conf
Trong nội dung file config này, ta tiến hành un-comment các dòng sau để các tham số có hiệu lực.:
# line 12: make sure value is [NO] (no anonymous)
anonymous_enable=NO
# line 83,84: uncomment ( allow ascii mode )
ascii_upload_enable=YES
ascii_download_enable=YES
# line 101,102: uncomment ( enable chroot )
chroot_local_user=YES
chroot_list_enable=YES
# line 104: uncomment ( chroot list file )
chroot_list_file=/etc/vsftpd/chroot_list
# line 110: uncomment
ls_recurse_enable=YES
# line 115: change (if listening IPv4 only)
# if listning IPv4 and IPv6 both, specify [NO]
listen=YES
# line 124: change (if listening IPv6 only)
# if listning IPv4 and IPv6 both, specify [YES]
listen_ipv6=NO
Và thêm đoạn mã sau vào cuối file config, sau đó lưu nội dung file config và thoát khỏi trình soạn thảo:
# add to the end
# specify root directory (if don't specify, users' home directory become FTP home directory)
local_root=public_html
# use local time
use_localtime=YES
# turn off for seccomp filter (if cannot login, add this line)
seccomp_sandbox=NO
Tiếp theo, ta sẽ tạo một User chuyên dùng để cấp phát cho Clients đăng nhập vào FTP-Server trong tương lai với UserName/Password là ftp-usr01/ftp:
sudo useradd ftp-usr01
sudo passwd ftp-usr01
Khai báo User vừa được tạo bằng cách tạo mới một file config theo đường dẫn sau:
sudo nvim /etc/vsftpd/chroot_list
Và điền UserName dành cho dịch vụ FTP vào đây sau đó lưu và thoát file:
Khai báo dịch vụ FTP với SELinux và FirewallD:
sudo setsebool -P ftpd_full_access on
sudo firewall-cmd --add-service=ftp --permanent
sudo firewall-cmd --reload
Cuối cùng, ta khởi động dịch vụ FTP bằng câu lệnh. Lưu ý, nếu gặp lỗi khi khởi động dịch vụ FTP, hãy mở lại file config của dịch vụ FTP (/etc/vsftpd/vsftpd.conf) tìm đến dòng #123 "listen_ipv6=.." và thay đổi qua lại giữa 2 giá trị YES/NO rồi chạy lại câu lệnh khởi động dịch vụ:
sudo systemctl start --now vsftpd
sudo systemctl enable vsftpd
Kiểm tra kết quả bằng câu lệnh:
sudo systemctl status vsftpd
**

2.2 Cấu hình FTP-Client Linux

Trên máy ảo Client, ta tiến hành cài đặt gói lftp để có thể kết nối đến FTP-Server:
sudo dnf install -y lftp
Chỉnh sửa lại file /etc/hosts để phân giải tên miền đến IP của FTP-Server:
sudo nvim /etc/hosts
Và thêm cấu hình với cú pháp <Server-IPAddress> <Server-DomainName> <Server-HostName>:
10.1.1.20 lpi.tlu.vn lpi
Sau khi lưu và thoát file config của lftp, ta đã có thể đứng trên Client đăng nhập vào FTP-Server thông qua tên miền được gắn với vừa cấu hình với câu lệnh lftp -u <FTP-UserName> <Server-DomainName>.
lftp -u ftp-usr01 lpi.tlu.vn
Sau khi đăng nhập vào FTP-Server thành công, ta sẽ sử dụng lệnh lspwd để kiểm tra vị trí đứng hiện tại. Ở trong ví dụ này, có thể thấy ta đang đứng ở thư mục /home/ftp-usr01 - chính là HomeDirectory của User ftp-usr01 mà ta đã tạo trên FTP-Server phần trước.
Kiểm tra kết quả bằng cách thử đẩy file /home/l06/PowerlineSymbols.otf trên máy Client lên thư mục /home/ftp-usr01 trên Server:
put /home/l06/PowerlineSymbols.otf
Và đứng trên máy FTP-Server list ra các file trong thư mục /home/ftp-usr01:
sudo ls -la /home/ftp-usr01
Ta thấy tệp PowerlineSymbols.otf đã được truyền thành công từ Client lên FTP-Server.
Lưu ý, khi đăng nhập vào FTP-Server, nếu gặp lỗi reconnecting liên tục thì ta có thể khắc phục bằng cách chỉnh sửa file config của lftp:
sudo nvim /etc/lftp.conf
Và thêm vào đoạn mã sau vào phần cuối của file:
set net:timeout 5
set net:max-retries 2
set net:reconnect-interval-base 5
**

2.3 Cấu hình FTP-Client Windows

Đối với các Client dùng HDH Windows, ta có thể tải và cài đặt phần mềm Filezilla tại đường link:
https://filezilla-project.org/download.php?type=client
Sau đó mở Filezilla lên, và điền các thông tin:
  • Host: địa chỉ IP của FTP-Server hoặc chúng ta có thể chỉnh sửa file hosts của Windows để truy cập FTP-Server bằng tên miền tương tự như phần trước.
  • Username/Password: điền thông tin tài khoản được cấp phát cho dịch vụ FTP, trong ví dụ này thì là ftp-usr01ftp.
  • Port: có thể không điền, Filezilla sẽ lấy giá trị mặc định là 22.
Vậy là chúng ta đa đăng nhập thành công vào FTP-Server:
**

III Gia tăng tính bảo mật với FTPS

Như chúng ta đã biết (hoặc không) dịch vụ FTP mặc định không có bước mã hóa dữ liệu, tức là trong trường hợp tin tặc chặn bắt các gói tin trao đổi giữa FTP-Server và FTP-Client là có thể đọc được nội dung thông tin mà không gặp khó khăn gì. Để khắc phục nhược điểm này, ta sẽ bổ sung thêm cơ chế mã hóa dữ liệu (TLS/SSL) cho dịch vụ FTP. Lúc này, gói tin trước khi được truyền tải đi từ Server hay Client đều sẽ được mã hóa.
Cần lưu ý, việc bổ sung TLS/SSL là nhằm mục đích mã hóa dữ liệu, không bao gồm xác thực giữa Client và Server. Việc xác thực được thực hiện thông qua đăng nhập vào FTP-Server.
Để cho dễ hình dung, khi Client gõ cửa FTP-Server, Server sẽ xác thực bằng cách hỏi:
- Mày là thằng nào? 
Client sẽ trả lời FTP-Server bằng cách đăng nhập bằng UserName/Password cho trước. Khi phát sinh truyền tải file giữa FTP-Server và Client (ví dụ như Client muốn tải file về) Server sẽ:
- Để tao lấy TLS/SSL gói ghém lại cho kín đáo rồi mày cầm về, ai lại hớ hênh thế!!! 

3.1 Các bước thực hiện

Để thực hiện cấu hình TSL/SSL trên FTP-Server, ta cần thực hiện các bước sau:
  • Cài đặt gói Openssl, bật tính năng TLS/SSL.
  • Tạo key SSL Certificate.
  • Bổ sung file cấu hình dịch vụ FTP.
  • Khai báo thêm các port dành cho SSL với FirewallD.
**

3.2 Cấu hình SSL trên FTP-Server

Cài đặt gói Openssl:
sudo dnf install -y openssl
Tạo key SSL Certificate:
sudo cd /etc/pki/tls/certs
openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/pki/tls/certs/vsftpd.pem -out /etc/pki/tls/certs/vsftpd.pem
Một dấu nhắc điền thông tin sẽ hiện ra, thông tin chúng ta nhập vào đây sẽ tạo ra key dùng để mã hóa dữ liệu sau này.
Kiểm tra key vừa được tạo tại thư mục:
ls -la /etc/pki/tls/certs/
Cấp quyền thực thi cho file key .pem bằng câu lệnh:
sudo chmod 600 /etc/pki/tls/certs/vsftpd.pem
Sau đó, chứng ta sẽ tiến hành cấu hình SSL cho dịch vụ FTP bằng cách chỉnh sửa file config:
sudo nvim /etc/vsftpd/vsftpd.conf
Và thêm vào cuối file đoạn mã sau:
# Enable SSL/TLS
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
Cũng trong file cấu hình này, thêm các port dành cho SSL:
# fix passive ports with any range you like
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100
Cuối cùng, ta sẽ khởi động lại dịch vụ FTP để nhận cấu hình mới:
sudo systemctl restart vsftpd
sudo systemctl status vsftpd
Khai báo các port của SSL với FirewallD:
sudo firewall-cmd --add-port=60000-60100/tcp --permanent
sudo firewall-cmd --reload
Đến đây chúng ta đã hoàn thành việc bổ sung phương thức mã hóa cho FTP-Server, ở phần sau ta sẽ tiến hành cấu hình trên Client chạy HDH Linux.
**

3.3 Thiết lập SSL trên Client Linux

Để FTP-Clietnt tiếp nhận cơ chế mã hóa SSL, ta cần chỉnh sửa file cấu hình của lftp:
sudo nvim /etc/lftp.conf
Và thêm đoạn mã sau vào file cấu hình:
# SSL
set ftp:ssl-auth TLS
set ftp:ssl-force true
set ftp:ssl-protect-list yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-fxp yes
set ssl:verify-c:ertificate no
Sau đó, ta đã có thể đăng nhập vào FTP-Server:
lftp -u ftp-usr01 lpi.tlu.vn
**

3.4 Thiết lập SSL trên Client Windows

Ở trên Client chạy HDH Windows, khi dùng Filezilla để dăng nhập vào FTP-Server, ta sẽ nhận được hộp thoại hỏi có chấp nhận phương thức mã hóa SSL không. Lúc này chỉ cần tick chọn Allways trust -> OK là chúng ta có thể kết nối được với FTP-Server.
**

Nhận xét

Bài đăng phổ biến