Đô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.
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
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
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