ftp登入時,會傳送帳密,即使資料沒有加密的必要,但帳密仍然需要安全。
因此建議使用 ftps (ftp 擴充 SSL 或 TLS) 的方式。
但因為使用不同的port傳輸,因此必須使用 pasv mode來開啟資料傳輸線,
因此也需要同時起用pasv mode。
1. 建立ssl的憑證:
假設將憑證存放在 /etc/vsftpd/certs/vsftpd.pem,
mkdir /etc/vsftpd/certs
cd /etc/vsftpd/certs
openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
chmod 400 vsftpd.pem
此處設定成只有root可以讀取憑證內容,避免憑證資訊外漏。
2. 調整設定檔:
ssl_enable=YES
require_ssl_reuse=NO
rsa_cert_file=/etc/vsftpd/certs/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/certs/vsftpd.pem
pasv_min_port=40100
pasv_max_port=40200
其裝 pasv_min_port 與 pasv_max_port 的設定,是在pasv mode的設定。
傳輸資料時,server會在 pasv_min_port ~ pasv_max_port 之間開啟一個port來接收連線。
PS: require_ssl_reuse 預設 YES,有些client會不支援,因此設定NO。
3. 配合著使用ssl 及 pasv mode,需要調整firewall,把對應的port打開,
其中 ftps的listen port 預設為990,及pasv mode需要40100~40200。
firewall-cmd --zone=public --permanent --add-port=990/tcp
firewall-cmd --zone=public --permanent --add-port=40100-40200/tcp
firewall-cmd --reload
4. 完成設定後請記得重開 vsftpd 進行測是。FTP client 可以觀察到 SSL 或 TLS 的轉換訊息。
5. 增加僅能存取自己local目錄的安全限制:
通常為了安全起見,會僅允許使用者存取自己的local目錄以下的東西。
chroot_local_user=YES
增加此項設定後,登入時,client可能會遇到錯誤訊息:
' 500 OOPS: chroot '
來自於 SELINUX (Security-Enhanced Linux)的限制,需要做一下設定:
使用getsebool 查看限制:
getsebool -a | grep ftp
通常 CentOS7 需要設定:
setsebool -P ftpd_full_access on
較早的linux 版本:
setsebool -P ftp_home_dir 1
接著可以登入後,可能會出現下面的錯誤訊息:
'500 OOPS: vsftpd: refusing to run with writable root inside chroot()'
請在 vsftpd.conf 增加
allow_writeable_chroot=YES
6. 其他情況:
如果遇到較為舊版的 client需要支援的情況,可以開啟一些SSL & TLS的支援協定:
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=NO
ssl_tlsv1_1=NO
沒有留言:
張貼留言