2023年12月12日 星期二

(Centos-7) 架設 Proftpd Server

好累! 局域內試用個 proftpd Server. 要搞得那麼累. 實在懷疑要不要繼續學用 Centos7了... _ 本篇教學文. 以我對 Linux現有的知識. 依樣畫葫. 稍略參考修改後, 設定大致上還蠻順利的 _ 文章後段的 [使用 SQL 來當 Backend !!]. 暫時還不想搞到那麼複雜, 後續再斟酌試用情況. 另行決定要不要參考加入 _因為擔心後續 po文失聯. 自行留存一份在自管網頁裡. 純屬備份.
 

在 CentOS7/RHEL7 上架設 Proftpd Server

基本安裝流程:
  1. 安裝 EPEL 套件:
    #rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm  
  2. 安裝 proftpd 相關套件:
    #yum install -y proftpd-*  
  3. 開啟防火牆:
    #firewall-cmd --permanent --add-service=ftp  #firewall-cmd --reload  
  4. 啟動與執行 proftpd :
    #systemctl enable proftpd.service  #systemctl start proftpd  
  5. 取消與關閉 proftpd :
    #systemctl disable proftpd.service  #systemctl stop proftpd  
  6. 重新執行 proftpd :
    #systemctl restart proftpd  

基本設定方式:

  • 修改 /etc/proftpd.conf 檔案內容:
    #基本功能設定項目:  ServerName           "猛鬼小紀的 FTP Server"  ServerIdent     on   "歡迎光臨本站!本站正在監視你!不爽,可以離開!"  ServerAdmin     antallen@gmail.com    ##指定為預設的站台,如果有不明的連線,亦會連進預設站台!  DefaultServer   on    ##設定使用者 chroot 功能,除了 adm 之外,其餘使用者均登入自己家目錄  DefaultRoot     ~ !adm    ##使用系統 PAM 功能,進行功能授權與身份驗證  AuthPAMConfig   proftpd  AuthOrder       mod_auth_pam.c* mod_auth_unix.c    ##不使用 DNS 反查功能  UseReverseDNS   off    ##以何種身份在系統上執行 proftpd 程序  User            nobody  Group           nobody    ##限定連線數量,以預防 DDoS 攻擊  MaxInstances    20    ##預防使用 ftpwho 及 ftptop 指令時,會中斷檔案傳輸  UseSendfile     off    ##定義記錄檔格式  LogFormat       default "%h %l %u %t \"%r\" %s %b"  LogFormat       auth    "%v [%P] %h %t \"%r\" %s"    ##定義預設的記錄檔  TransferLog     /var/log/proftpd/xferlog  ExtendedLog     /var/log/proftpd/access_log    WRITE,READ write  ExtendedLog     /var/log/proftpd/auth_log      AUTH auth  ExtendedLog     /var/log/proftpd/paranoid_log  ALL default    ##限制只有 root 才能掛載與缷載模組!一般使用者只能查詢掛載哪些模組  ModuleControlsACLs    insmod,rmmod allow user root  ModuleControlsACLs    lsmod allow user *    
    導入模組方式:
    ##導入管理控制模組,管理人員可使用 ftpdctl 指令進行管理行為  LoadModule      mod_ctrls_admin.c    ##開啟上述功能模組,啟動 ftpdctl 指令的基本控制項目  ControlsEngine        on  ControlsACLs          all allow user root  ControlsSocketACL     allow user *  ControlsLog           /var/log/proftpd/controls.log    ##經由 ftpdctl 指令,開啟管理控制項目  <IfModule mod_ctrls_admin.c>    AdminControlsEngine      on    AdminControlsACLs        all allow user root  </IfModule>    ##導入限制目錄模組,使登入的人,限制在指定的家目錄內  LoadModule      mod_vroot.c    ###啟動上述模組,其功能相容性好過 PAM 功能   <IfModule mod_vroot.c>    VRootEngine         on  </IfModule>  
  • 開啟 SELinux 限制:
    # setsebool -P allow_ftpd_full_access=1  
  • 啟動 Proftp 測試:
    # systemctl start proftpd  
安全連線設定:

<TLS 加密連線機制:>
  1. 安裝 openssl 套件:
    # yum -y install openssl  
  2. 產生金鑰對:
    # openssl req -x509 -newkey rsa:1024 -keyout   /etc/proftpd.d/proftpd.key -out /etc/proftpd.d/proftpd.crt -nodes -days 365    產生下列資料:  Generating a 1024 bit RSA private key  ............................................++++++  .++++++  writing new private key to '/etc/proftpd.d/proftpd.key'  -----  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]:TW  State or Province Name (full name) []:Taiwan  Locality Name (eg, city) [Default City]:Kaohsiung  Organization Name (eg, company) [Default Company Ltd]:  Organizational Unit Name (eg, section) []:  Common Name (eg, your name or your server's hostname) []:  Email Address []:  
  3. 修改安全權限:
    # chmod 600 proftpd.*  
    在 /etc/proftpd.conf 檔案中,加入TLS模組功能:
    ##導入TLS模組,啟動 FTPs 功能!    ##定義 PASV 模式所需使用的 port 號    PassivePorts  6000 6100    <IfModule mod_tls.c>    TLSEngine           on    TLSLog              /var/log/proftpd/tls.log      ##定義 SSL/TLS 協助應該使用哪一個版本,共有SSLv23 SSLv3 TLSv1 等三種    TLSProtocol         SSLv23      ##定義公私鑰放置目錄位置    TLSRSACertificateFile     /etc/proftpd.d/proftpd.crt    TLSRSACertificateKeyFile  /etc/proftpd.d/proftpd.key      ##定義 mod_tls 行為模式    TLSOptions     NoCertRequest EnableDiags NoSessionReuseRequired      ##建立 SSL/TLS session之後,不再驗證認證功能    TLSVerifyClient     off      ##開啟 ftp 控制與資料通道均使用 SSL/TLS 功能    TLSRequired         on      ##開啟 SSL/TLS 重議功能    TLSRenegotiate      required on  </IfModule>  
  4. 設定防火牆:
    # firewall-cmd --permanent --add-port=6000-6100/tcp  # firewall-cmd --reload  
  5. 重新啟動:
    # systemctl restart proftpd  

<基本安全連線限制:>
  1. 修改 /etc/proftpd.conf 檔案內容:
    #密碼錯誤次數  MaxLoginAttempts  3    #最大連線數量(可減緩DDoS攻擊造成的影響)  MaxInstances      100    #每個使用者最大連線數,最後一個參數是顯示訊息!  MaxHostsPerUser   1 "Sorry, you may not connect more than one time."    #每一部主部,最大的連線數量!  MaxClientsPerHost 1 "Sorry, Only %m connections per host allowed."    #每秒新增多少個 TCP 連線數!  MaxConnectionRate 5  
  2. 重新啟動 Proftpd 服務
    # systemctl restart proftpd  

使用 SQL 來當 Backend !!
  1. 修改 /etc/proftpd.conf 檔案內容:
    #使用動態導入模組,引入 SQL 模組  <IfModule mod_dso.c>     LoadModule mod_sql.c     LoadModule mod_sql_mysql.c  </IfModule>    ##設定記錄檔  SQLLogFile      /var/log/proftpd/mysql    ##設定驗證模組使用順序  AuthOrder       mod_sql.c    ##驗證時的密碼資料形態  SQLAuthTypes    Plaintext    ##設定 SQL 身份驗證查詢  SQLAuthenticate users groups    ##連接資料庫的帳密與資料庫名稱,[資料庫@主機][帳號][密碼]  SQLConnectInfo  ftp@localhost ftpuser ftpuser@1234    ##指定使用者表格與欄位名稱  SQLUserInfo     ftpuser userid passwd uid gid homedir shell    ##指定群組表格與欄位名稱  SQLGroupInfo ftpgroup groupname gid members    ##指定登入系統後的使用者ID號碼  SQLMinID 1000    
  2. 登入資料庫後,新增下列表格:
    CREATE TABLE ftpgroup (  groupname varchar(16) NOT NULL default '',  gid smallint(6) NOT NULL default '5500',  members varchar(16) NOT NULL default '',  KEY groupname (groupname)  ) TYPE=MyISAM COMMENT='ProFTP group table';  

    CREATE TABLE ftpuser (  id int(10) unsigned NOT NULL auto_increment,  userid varchar(32) NOT NULL default '',  passwd varchar(32) NOT NULL default '',  uid smallint(6) NOT NULL default '5500',  gid smallint(6) NOT NULL default '5500',  homedir varchar(255) NOT NULL default '',  shell varchar(16) NOT NULL default '/sbin/nologin',  count int(11) NOT NULL default '0',  accessed datetime NOT NULL default '0000-00-00 00:00:00',  modified datetime NOT NULL default '0000-00-00 00:00:00',  PRIMARY KEY (id),  UNIQUE KEY userid (userid)  ) TYPE=MyISAM COMMENT='ProFTP user table';  
  3. 重新啟動 proftpd 服務,即可驗證看看!

沒有留言:

張貼留言

(Centos-7s) 更新: 網卡名稱改回 eth0 的方法

將 CentOS 7 網卡名稱修改, 用回 Eth0 的方法:   1) # vi /etc/sysconfig/grub 內容大概是這樣:   GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release...