2018年3月6日 星期二

FreeBSD IPFILTER (IPF) 針對FTP的active mode及passive mode的設定方式



最近在開IPF讓ftp通過時,在passive mode 時吃了點虧,因此作個筆記記錄一下:

Active mode:

圖片的來源是:http://henrydu.com/blog/how-to/ftp-active-mode-vs-passive-mode-106.html



重點是在通訊過程中會使用到port這個指令,這個指令是由client往server發送的,它的目地是請server指派之後要用哪個port來傳資料。

Client Server要求要使用 port202*256+253 = 51965 port來傳資料

 
接著Server會用port 20client 51965 port3 way handshake
之後就開始傳資料 (server發起三向交握)
所以第一個sessionclient發起的,但第二個session是server發起的。
IPF的設定方式:
pass in log quick proto tcp from 126.1.65.11 to 126.1.60.91 port = 21 flags S keep state
pass in log quick proto tcp from 126.1.60.91 port = 20 to 126.1.65.11 flags S keep state

傳完之後再透過主通道看有沒有其它事要做,若還有其它檔要傳,會再起一個新的session,同樣由ftp server的tcp port 20發起。

實驗筆記:
1、 Windows cmdftp只能用active mode來傳,就算你有下quote pasvquote epsv也一樣。
2、有port指令的才是active mode


再來是passie mode:
圖片的來源是:http://henrydu.com/blog/how-to/ftp-active-mode-vs-passive-mode-106.html



client通知要用pasv mode之後, (之後FTP client用以傳輸的預設Port是原始port再加1)。接著server會回應他的port是:256*219+115=59179

接著做三向交握 (client發起)
所以兩個session都是由client發起的,而且source destination port不同
第一個是any to 21,第二個是 > 1023 to > 1023

確認後就可以用這個通道傳資料,傳完後關閉,若要傳其它檔案再用主通道來溝通。

IPF的設定方式:
pass in log quick proto tcp from 126.1.65.11 to 126.1.60.91 port = 21 flags S keep state
pass in log quick proto tcp from 126.1.65.11 port >1023 to 126.1.60.91 port > 1023flags S keep state
( or pass in log quick proto tcp from 126.1.65.11 to 126.1.60.91 flags S keep state)

沒有留言:

張貼留言