2019年5月5日 星期日

centos7 架設 vsftpd (ftps 與 pasv mode)

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


沒有留言:

張貼留言