簡介

FTP 是屬於 TCP 服務的一種, FTP 是所有通訊協定裡最特殊的,其他的通訊協定例如 HTTPSMTPPOP3...都只需要一個通訊埠,然而 FTP 卻需要兩個通訊埠,一個用來傳遞客戶端與伺服器之間的命令,一般設在 port 21,稱之為命令通訊埠(Command Port);另一個是真正用來傳遞資料的,一般都設在 port 20,稱之為資料通訊埠(Data Port)FTP資料傳送的模式又分二種:PORTPASV。兩者主要分別在於它們會向FTP伺服器發出不同的FTP Command

安裝 TOP

1.執行<應用程式><副屬應用程式><終端機>

輸入指令:sudo apt-get install proftpd

輸入指令

2.按 Y 鍵執行

安裝中

3.點選 standalone

選擇

inetd:表示使用 super daemon。 伺服器將由系統程序 inetd 執行;啟動伺服器使                用的命令加在 /etc/inetd.conf 檔案裡。

在這兩個選項裡比較少使用。因為接收到每個 http 連線就要重頭開始執行另一份新的伺服器程式拷貝;連線結束後,這支程式就會結束,所以每次連線要付出的代價很高,相對的使用者等待時間會加長。但是因為安全上的理由,某些管理者喜歡這個選項。

standalone:表示獨立啟動的意思。伺 服器將會以伺服程式〈daemon〉方式來執                        行;啟動伺服器使用的命令加在系統啟動指令稿裡〈/etc/rc.d/rc.local                         或 /etc/rc.d/init.d/httpd 裡〉。

是 ServerType 最普遍的設定,因為它是最有效率的執行方式。伺服器程式只啟動一次,而且服務所有的連線。如果我們想要利用 Apache Server 來服務一個忙碌的站臺,standalone 大概將會是唯一的選擇。

啟動 TOP

1.執行<應用程式><副屬應用程式><終端機>

輸入指令:sudo /etc/init.d/proftpd start

啟動

重新啟動 TOP

1.執行<應用程式><副屬應用程式><終端機>

輸入指令:sudo /etc/init.d/proftpd restart

重新啟動

停止 TOP

1.執行<應用程式><副屬應用程式><終端機>

輸入指令:sudo /etc/init.d/proftpd stop

停止

客戶端傳輸測試 TOP

1.設定FTP伺服器只讓匿名者讀取
   指令:sudo cp /etc/proftpd/proftpd.conf /etc/proftpd/protpd.conf_back (複製一份)
               sudo gedit /etc/proftpd/proftpd.conf (開啟gedit 軟體)

指令

2.
把以下敘述複製至檔案最後面,然後存檔,重新啟動FTP

<Anonymous ~ftp>
User ftp
Group nogroup
 UserAlias anonymous ftp
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell off
MaxClients 10
DisplayLogin welcome.msg
DisplayFirstChdir .message
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
</Anonymous>

3.匿名登入

    3-1.使用FileZilla檔案傳輸軟體,輸入IP:192.168.1.200

輸入IP
   
    3-2.登入成功

匿名登入

    3-3.匿名使用者下載檔案至Client

下載

4. 一般使用者登入

    4-1.3-1.使用FileZilla檔案傳輸軟體,輸入IP:192.168.1.200、使用者帳號、密碼

登入

    4-2.登入成功

登入成功

4-3.使用者上載檔案至Server

        1.執行<應用程式><副屬應用程式><終端機>

底下使用 link 的方式將 /var/www/ 資料夾連結到 /home/server/web,這樣我們就可以用 server 帳號上傳網頁了

輸入以下指令

chmod 755 /home/server (更改資料夾權限)
mkdir /home/server/web (新建資料夾)
chown server.server /home/server/web (設定擁有者)
cp -rpf /var/www/ /home/server/web (複製資料)
sudo ln -s /home/server /web /var/www/ (連結資料夾)

    2.執行FileZilla上傳檔案,成功ok

上傳

主動傳輸模式 TOP

傳統式 FTP 連線方式是採用主動模式,由用戶端隨機使用一個大於 1023 (也就是1024以上)的通訊埠(為了方便說明我們以 port N 來代表),與 FTP 伺服器的命令通訊埠(port 21) 建立連線,同時用戶端自己開啟一個 N+1 的通訊埠等待伺服器連線。伺服器接到用戶端的命令之後,便使用資料通訊埠(port 20)主動與用戶端的 port N+1 建立資料連線。

伺服器必須提供以下幾個溝通管道:

FTP 伺服器開啟 port 21 接受來自外部任意通訊埠的連線(由用戶端要求建立連線)
FTP
伺服器使用 port 21 連線到外部任一大於 1023 的通訊埠(回應用戶端的命令埠)
FTP
伺服器使用 port 20 連線到外部任一大於 1023 的通訊埠(伺服器主動建立資料連線)
FTP
伺服器開啟 port 20 接受來自外部任一大於 1023 的通訊埠連線 (用戶端回覆伺服器資料連線)

主動式






被動傳輸模式 TOP

為了解決由伺服器連線到用戶端所產生的安全疑慮,因此發展出了另一種不同的連線模式,稱之為被動模式(Passive Mode, PASV)。讓用戶端程式可以在連線的時候,通知伺服器使用動模式連線。
使用被動模式 FTP ,不論命令連線或是資料連線都是由用戶端建立,以解決防火牆以及相關資安問題。當用戶端開啟 FTP 連線時,用戶端程式先在本機開兩個大於1023的通訊埠(N, N+1),利用 port N 與伺服器的 port 21 建立連線。不同於主動模式的連線方式,用戶端這次不再提供 N+1 port IP 位址給伺服器,而是送出 PASV 的命令。伺服器收到 PASV 的命令之後,即開啟一個大於 1023 的通訊埠(P),並將這個通訊埠連同伺服器 IP 回覆給用戶端,被動等待用戶端連線,用戶端即利用 port N+1與伺服器所提供的 port P 建立資料連線。

伺服器必須提供以下幾個溝通管道:

FTP 伺服器開啟 port 21 接受來自外部任意通訊埠的連線(由用戶端要求建立連線)
FTP
伺服器使用 port 21 連線到外部任一大於 1023 的通訊埠(回應用戶端的命令埠)
FTP
伺服器開啟一個大於 1023 的通訊埠,接受來自外部任一大於 1023 的通訊埠連線 (用戶端與伺服器建立資料連線)
FTP
伺服器使用一個大於 1023 的通訊埠,連線到外部任一大於 1023 的通訊埠(伺服器回復資料給用戶端)
被動式

傳輸模式設定

1.執行<應用程式><副屬應用程式><終端機>

輸入指令:cd /etc/proftpd
                    sudo gedit proftpd.conf~

找以下程式碼,修改PassivePorts 範圍,儲存,重新啟動服務
設定

封包觀察 TOP

1.利用FileZilla登入Server  封包下載

1-1.source:192.168.1.100 (發送端)   destination:192.168.1.200 (接收端)

        sequece number:0 (X)  

20

1-2.source:192.168.1.200   destination:192.168.1.100

    sequence number:0 (Y)  acknowledgement number:1

21

1-3.source:192.168.1.100   destination:192.168.1.200

    sequence number:1(X+1)  acknowledgement number:1 (Y+1)

22

1-4.source:192.168.1.200   destination:192.168.1.100

FTP server 發出協商以33819端為資料傳輸端

23

1-5.source:192.168.1.100   destination:192.168.1.200

Client 發出 ACK訊息

24

1-6.source:192.168.1.200   destination:192.168.1.100

FTP server 發出服務用 PROFTPD 


25

1-7.source:192.168.1.100   destination:192.168.1.200

Cliet 發出使用者帳號為 sever

26

1-8.source:192.168.1.200   destination:192.168.1.100

FTP server  發出 ACK訊息

1-9.source:192.168.1.200   destination:192.168.1.100

 
FTP server 要求使用者密碼?

1-10.source:192.168.1.100   destination:192.168.1.200

Cliet 發出使用者密碼為 1234


27


2.停止連線  封包下載

2-1.source:192.168.1.100 (發送端)   destination:192.168.1.200 (接收端)

        sequece number:1 (X)   acknowledgement number:1


停止1

2-2.source:192.168.1.200   destination:192.168.1.100

    sequence number:1 (Y)  acknowledgement number:2 (X+1)

停止2

2-3.source:192.168.1.100   destination:192.168.1.200

    sequence number:2 (X+1)  acknowledgement number:2 (Y+1)

停止3

三方交握各值統計表

seq
(X)
ack seq
(Y)
ack FIN
第一個
發送端 to 接收端
啟動 0 1
結束 1 1 1
第二個
接收端 to 發送端
啟動 0 X+1=1 1
結束 1 X+1=2 1

第三個
發送端 to 接收端
啟動 X+1=1 Y+1=1 0
結束 X+1=2 Y+1=2 0