FTP協議有兩種工做方式:
node
1)port方式:主動模式
port(主動)方式的鏈接過程是:客戶端向服務器的FTP端口(默認是21)發送鏈接請求 , 服務器接受鏈接 , 創建一條命令鏈路 當須要傳送數據時 , 服務器從20端口向客戶端的空閒端口發送鏈接請求 , 創建一條數據鏈路來傳送數據
2)pasv方式:被動模式
pasv(被動)方式的鏈接過程是:客戶端向服務器的FTP端口(默認是21)發送鏈接請求 , 服務器接受鏈接 , 創建一條命令鏈路 當須要傳送數據時 , 客戶端向服務器的空閒端口發送鏈接請求 , 創建一條數據鏈路來傳送數據
FTP是僅基於tcp的服務 , 不支持udp FTP使用2個端口 , 一個數據端口和一個命令端口(也可叫作控制端口) 一般來講這兩個端口是21(命令端口)和20(數據端口) 但FTP工做方式的不一樣 , 數據端口並不老是20 這就是主動與被動FTP的最大不一樣之處
一)主動FTP模式
主動方式的FTP工做流程:客戶端從一個任意的非特權端口N(N>1024)鏈接到FTP服務器的命令端口 , 也就是21端口 而後客戶端開始監聽端口N+1 , 併發送FTP命令「portN+1」到FTP服務器 接着服務器會從它本身的數據端口(20)鏈接到客戶端指定的數據端口(N+1)
針對FTP服務器前面的防火牆來講 , 必須容許如下通信才能支持主動方式FTP:
1)任何大於1024的端口到FTP服務器的21端口 (客戶端初始化的鏈接)
2)FTP服務器的21端口到大於1024的端口 (服務器響應客戶端的控制端口)
3)FTP服務器的20端口到大於1024的端口 (服務器端初始化數據鏈接到客戶端的數據端口)
4)大於1024端口到FTP服務器的20端口(客戶端發送ACK響應到服務器的數據端口)
二)被動FTP模式
FTP被動模式的鏈接方式有效解決了服務器發起到客戶的鏈接問題 , 這種方式由叫作PASV , 當客戶端通知服務器它處於被動模式時才啓用 在被動方式FTP中 , 命令鏈接和數據鏈接都由客戶端發起 , 這樣就能夠解決從服務器到客戶端的數據端口的入方向鏈接被防火牆過濾掉的問題 當開啓一個FTP鏈接時 , 客戶端打開兩個任意的非特權本地端口(N>1024和N+1) 第一個端口鏈接服務器的21端口 , 但與主動方式的FTP不一樣 , 客戶端不會提交PORT命令並容許服務器來回連它的數據端口 , 而是提交PASV命令 這樣作的結果是服務器會開啓一個任意的非特權端口(P>1024) , 併發送PORTP命令給客戶端 而後客戶端發起從本地端口N+1到服務器的端口P的鏈接用來傳送數據
對於服務器端的防火牆來講 , 必須容許下面的通信才能支持被動方式的FTP:
1)從任何大於1024的端口到服務器的21端口(客戶端初始化的鏈接)
2)服務器的21端口到任何大於1024的端口(服務器響應到客戶端的控制端口的鏈接)
3)從任何大於1024端口到服務器的大於1024端口(客戶端初始化數據鏈接到服務器指定的任意端口)
4)服務器的大於1024端口到遠程的大於1024的端口(服務器發送ACK響應和數據到客戶端的數據端口)
主動FTP:
命令鏈接:客戶端>1023端口 ------> 服務器 21端口
數據鏈接:客戶端>1023端口 <------ 服務器 20端口
被動FTP:
命令鏈接:客戶端>1023端口 ------> 服務器 21端口
數據鏈接:客戶端>1023端口 ------> 服務器>1023端口
三)主動與被動FTP優缺點:
主動FTP對FTP服務器的管理有利 , 但對客戶端的管理不利 由於FTP服務器企圖與客戶端的高位隨機端口創建鏈接 , 而這個端口頗有可能被客戶端的防火牆阻塞掉
被動FTP對FTP客戶端的管理有利 , 但對服務器端的管理不利 由於客戶端要與服務器端創建兩個鏈接 , 其中一個連到一個高位隨機端口 , 而這個端口頗有可能被服務器端的防火牆阻塞掉
隨着WWW的普遍流行 , 許多人習慣用web瀏覽器做爲FTP客戶端 大多數瀏覽器只在訪問
ftp
:
//
這樣的URL時才支持被動模式 這究竟是好仍是壞取決於服務器和防火牆的配置
一般我會選用被動模式的FTP
[root@ftp ~]# yum -y install vsftpd # 備份配置文件 [root@ftp ~]# cp /etc/vsftpd/vsftpd.conf{,.bak} # 簡化配置文件內容 [root@ftp ~]# grep -Ev '^#|^$' /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf # 修改配置文件 anonymous_enable=NO # 是否禁止匿名用戶登陸 local_enable=YES # 是否容許本地用戶登陸 write_enable=YES # 是否容許寫入 local_umask=022 # 本地用戶文件掩碼 xferlog_enable=YES # 是否在上傳/下載文件時記錄日誌 connect_from_port_20=NO # 是否使用20端口傳輸數據(是否使用主動模式) xferlog_std_format=YES # 是否使用標準日誌格式 xferlog_file=/var/log/xfer.log # 日誌文件路徑 chroot_local_user=NO # 是否限制全部的本地用戶在本身的家目錄 chroot_list_enable=YES # 是否指定不能離開家目錄的用戶 chroot_list_file=/etc/vsftpd/chroot_list # 指定不能離開家目錄的用戶名單文件
allow_writeable_chroot=YES # 是否開啓家目錄可寫 listen=YES # 是否開啓ipv4監聽 listen_ipv6=NO # 是否開啓ipv6監聽 pam_service_name=vsftpd # 使用pam模塊控制,vsftpd文件在/etc/pam.d/目錄下 userlist_enable=YES # 是否開啓用戶本地用戶名單, 當userlist_deny=NO時 , userlist_file名單內的用戶爲白名單,反則反之 userlist_deny=YES # 決定禁止/容許userlist_file名單內的用戶登陸 tcp_wrappers=YES # 是否容許tcp_wrappers管理 pasv_enable=YES # 是否容許pasv模式 pasv_min_port=22226 # pasv模式使用的最小端口號 pasv_max_port=22228 # pasv模式使用的最大端口號 download_enable=NO # 是否容許下載 userlist_file=/etc/vsftpd/user_list # 用戶名單文件 user_config_dir=/etc/vsftpd/vsftpd_user_conf # 用戶配置文件
建立本地用戶web
# 建立本地用戶指定家目錄 [root@ftp ~]# useradd -d /var/ftp/pub/user1 -s /sbin/nologin user1 # 設置密碼 [root@ftp ~]# passwd user1 # 添加到禁止離開家目錄的列表中 [root@ftp ~]# echo user1 >> /etc/vsftpd/chroot_list # 修改權限 [root@ftp ~]# chown -R user1.user1 /var/ftp/pub/user1/ [root@ftp ~]# ll -d /var/ftp/pub/user1/ drwx------. 2 user1 user1 62 10月 12 16:52 /var/ftp/pub/user1/ # 添加防火牆策略 [root@ftp ~]#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT [root@ftp ~]#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22226:22228 -j ACCEPT [root@ftp ~]# getenforce Permissive [root@ftp ~]# systemctl start vsftpd
最後就能夠經過
ftp
:
//ip
在瀏覽器裏訪問上面的
ftp
(只有被動模式的
ftp
才能再瀏覽器裏訪問)
也可以使用Filezilla等工具鏈接
ftp
,不過要在客戶端裏手動修改爲被動模式
ftp
登錄後的路徑鎖定到帳號家目錄下
ftp傳輸數據是明文,弄個抓包軟件就能夠經過數據包來分析到帳號和密碼,爲了搭建一個安全性比較高ftp,能夠結合SSL來解決問題
# 若是沒有輸出此類消息 那麼說明該版本的svftp不支持ssl加密 [root@ftp user1]# ldd /usr/sbin/vsftpd |grep libssl libssl.so.10 => /lib64/libssl.so.10 (0x00007f17c0622000) # 生成加密證書 [root@ftp ~]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 \-keyout /etc/vsftpd/vsftpd.pem \-out /etc/vsftpd/vsftpd.pem Generating a 1024 bit RSA private key .....................................++++++ ......++++++ writing new private key to '/etc/vsftpd/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]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:haidian Organization Name (eg, company) [Default Company Ltd]:ftpssl Organizational Unit Name (eg, section) []:ftpssl Common Name (eg, your name or your server's hostname) []:ftp Email Address []:damowang.cn@gmail.com # 修改配置文件 [root@ftp user1]# vim /etc/vsftpd/vsftpd.conf ssl_enable=YES # 是否啓用ssl加密 allow_anon_ssl=NO # 是否容許匿名用戶使用ssl加密 force_local_data_ssl=YES # 非匿名用戶傳輸數據時是否加密 force_local_logins_ssl=NO # 匿名用戶登陸時是否加密 ssl_tlsv1=YES # 是否激活tls v1加密 ssl_sslv2=NO # 是否激活sslv2加密 ssl_sslv3=NO # 是否激活sslv3加密 rsa_cert_file=/etc/vsftpd/vsftpd.pem # rsa證書的位置
重啓vsftpd服務算法
[root@ftp ~]# systemctl restart vsftpd
使用Filezilla鏈接查看是否爲TSL加密vim
什麼是SSL、TSL、HTTPS?瀏覽器
SSL 的全名是 Secure Sockets Layer,即安全套接字層,簡而言之,這是一種標準技術,用於保持網際網絡鏈接安全以及防止在兩個系統之間發送的全部敏感資料被罪犯讀取及修改任何傳輸的信息,包括潛在的我的詳細信息 兩個系統能夠是伺服器與客戶端 (例如購物網站與瀏覽器),或者伺服務器至伺服務器 (例如,含有我的身份信息或含有薪資信息的應用程序)安全
這樣作是爲了確保使用者與網站、或兩個系統之間傳輸的任何信息保持沒法被讀取的狀態 此技術可以使用加密算法以混淆傳輸中的信息,防止駭客在信息公國鏈接發送時讀取信息 此信息多是任何敏感或我的細信息,包括信用卡號與其餘財務信息、姓名與地址等等bash
TSL (Transport Layer Security,傳輸層安全協議) 是更新、更安全的 SSL 版本 咱們仍將安全性憑證成爲 SSL,由於這是比較經常使用的詞服務器
HTTPS (Hyper Text Transfer Protocol Secure,超文本傳輸協議安全) 會在網站受到 SSL 憑證保護時在網址中出現 該憑證的詳細信息包括髮行機構與網站擁有人的企業名稱,能夠經過點擊瀏覽器網址欄上的鎖定標記進行查看網絡