Làm chủ Centos 7 trong 30 ngày – Ngày 7: Bảo mật kết nối FTP với FTP over SSL và SFTP trong Centos 7
FASTER - STRONGER - SAVER
sales@vietdata.com.vn   0914 83 55 22
Trang Chủ > Kiến thức dịch vụ > Làm chủ Centos 7 >Làm chủ Centos 7 trong 30 ngày – Ngày 7: Bảo mật kết nối FTP với FTP over SSL và SFTP trong Centos 7

Làm chủ Centos 7 trong 30 ngày – Ngày 7: Bảo mật kết nối FTP với FTP over SSL và SFTP trong Centos 7

FTP over SSL và SFTP trong Centos 7

Đôi khi vì mục đích chia sẻ file, ta cần thuê vps để setup dịch vụ FTP và lưu trữ file trên đó. Tuy nhiên, do tính chất quan trọng của các file tài liệu mà ta phải nâng cao tính bảo mật cho hệ thống FTP này, đặc biệt là trong quá trình transfer dữ liệu giữa server và người dùng. FTP over SSL và SFTP ra đời với mục địch nhằm tăng cường khả năng bảo vệ luồng dữ liệu giữa hàng vô số các con mắt ngày đêm xăm soi trên Internet.

Bảo mật kết nối FTP với FTP over SSL trên VPS Linux Centos 7

FTP over SSL hay còn gọi là FTPS là cách thức sử dụng giao thức FTP truyền thống kết hợp với mã hóa dữ liệu sử dụng SSL. Cũng giống như HTTPS, bản chất của FTPS sử dụng các cặp khóa (public/ private key) để encrypt luồng dữ liệu được transfer giữa client và server. Với cách thức hoạt động như vậy, không có gì khó để hiểu mà hơn nữa, cách setup lại vô cùng đơn giản. Nào ta hãy làm như sau:

yum install vsftpd

Thiết lập các thông số sau để bảo mật cho FTP Server. Đầu tiên là loại bỏ anonymous user trong file cấu hình /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

Tiếp theo là chỉ cho phép các user thực trên hệ thống Linux Centos 7 được phép login vào FTP Server

local_enable=YES

Cho thêm quyền ghi/xóa cho các user FTP

write_enable=YES

Giới hạn các user chỉ được phép hoạt động trong thư mục của nó

chroot_local_user=YES

Vậy cơ bản là xong, ta tạo user với thư mục tương ứng mặc định của nó nữa là được, tất nhiên có cả password để còn điền vào thông tin chứng thực trên FTP client

adduser ftpuser 

passwd ftpuser

Nào tiếp theo ta sẽ setup SSL cho VSFTPD

mkdir /etc/ssl/private

Tạo certificate và key

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Để có được thông tin như sau:

Generating a 2048 bit RSA private key
.........................................................+++
......................................+++
writing new private key to '/etc/ssl/private/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:VN
State or Province Name (full name) []:HaNoi
Locality Name (eg, city) [Default City]:HaNoi
Organization Name (eg, company) [Default Company Ltd]:ANZDATA.,JSC
Organizational Unit Name (eg, section) []:VPS and Hosting
Common Name (eg, your name or your server's hostname) []:1hosting.com.vn
Email Address []:admin@1hosting.com.vn

Thêm các tùy chọn cấu hình sau để sử dụng SSL với TLS

ssl_enable=YES
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO

Add key và Certificate

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

Và cuối cùng là 

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
pasv_min_port=50000
pasv_max_port=50009
debug_ssl=YES

Không quên restart lại vsftpd

systemctl restart vsftpd

Và mở cổng 990 và các FTP passive port từ 50000-50009

# firewall-cmd --zone=public --permanent --add-port=990/tcp

# firewall-cmd --zone=public --permanent --add-port=50000-50009/tcp

# firewall-cmd --reload

Nào ta thử kết nối xem sao

Mọi thứ tưởng ổn, thế mà lại xuất hiện cái dòng đỏ gì đây?

Ôi lỗi gì rồi? Lúc này chỉ có 1Hosting mới cứu được. Hãy thêm tùy chọn ” thần thánh” này vào

allow_writeable_chroot=YES

Và khởi động lại vsftpd service. Oh yeah, hãy nhìn kìa!

Vậy là ta đã cấu hình thành công, hãy transfer file dữ liệu để thấy kết quả của 1/2 ngày làm việc

Bảo mật kết nối FTP với SFTP trên VPS Linux Centos 7

SFTP viết tắt của SSH FTP. Đúng như tên gọi của nó, đó là cách thức sử dụng FTP để truyền file thông qua kết nối SSH đã được mã hóa. Nó gần như là một giao thức hoàn toàn khác so với FTP truyền thống. 

SFTP mặc định không được cấu hình sẵn trên các server dù đã có SSH daemon. Tuy bảo mật tốt và dễ sử dụng song nó cũng có những nhược điểm như đối với cấu hình chuẩn, SSH server sẽ tạo quyền truy nhập file và truy nhập shell cho các user thông qua một account trên hệ thống, và đôi khi ta chỉ muốn một vài user cụ thể được phép truyền file mà không có quyền SSH. Chính vì thế, việc cấu hình SSH Server để giới hạn truy nhập SFTP sẽ mất thêm đôi chút thời gian. Không vấn đề gì, 1Hosting sẽ hướng dẫn các bạn qua các bước đơn giản như sau:

Trước tiên là tạo user và đặt password

adduser sftpfiles
passwd sftpfiles

Để giới hạn truy cập SFTP, trước tiên phải đảm bảo thư mục và các thư mục trong cấu trúc filesystem phải được own bởi root và không thể ghi đè bới các user khác, tiếp nữa là không thể chỉ đơn giản gán quyền truy nhập đến thư mục gốc của user bị các thư mục này own bới user chứ không phải root.

Trong trường hợp này ta phải làm như sau

mkdir -p /var/sftp/uploads

Set owner cho /var/sftp là root

chown root:root /var/sftp

chmod 755 /var/sftp

Sau đó change owner của uploads là sftpfiles

chown sftpfiles:sftpfiles /var/sftp/uploads

Bước tiếp theo ta sẽ setup SSH để giới hạn truy nhập SFTP, trong ví du này ta sẽ cho phép sftpfiles được phép transfer file nhưng không được access vào hệ thống. Ta làm như sau:

vi /etc/ssh/sshd_config

thêm các dòng sau:

Match User sftpfiles
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

Trong đó ta chú ý như sau:

* Match User: SSH Server chỉ phục vụ user sftpfiles

* ForceCommand internal-sftp: Buộc SSH Server chạy SFTP khi login và không cho phép truy cập shell, user có shell nhưng hoàn toàn không khởi tạo được.

* ChrootDirectory /var/sftp/: đảm bảo user sẽ được giới hạn trong thư mục này

*  AllowAgentForwarding no, AllowTcpForwarding no. and X11Forwarding no: Disable port fowarding, tunnel và X11 forwarding

Sau đó apply thay đổi và restart lại service:

systemctl restart sshd
 Vậy là ta đã làm xong, giờ bật FileZilla để thử như sau:

Thật tuyệt vời, lần này kết quả gần như không có trở ngại gì

Như vậy, ta đã hoàn thành xong 2 cách để bảo mật các kết nối FTP thông thường trên các server hay VPS cài Linux Centos 7. Ngoài giao thức FTP, ta cũng nên chú ý để bảo mật các giao thức phổ biến của các dịch vụ khác như dịch vụ Email với POP –> POPs, IMAP–> IMAPs; SMTP –>SMTPs hay dịch vụ web HTTP–>HTTPs