當前位置:首頁 » 文件傳輸 » ftp連接跟蹤
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

ftp連接跟蹤

發布時間: 2023-05-19 03:04:24

1. centos7 ftp怎麼檢查

centos7中防火牆是一個非常的強大的功能了,但對於centos7中在防火牆中進行了升級了,下面我們一起來詳細的看看關於centos7中防火牆使用方法。FirewallD提供了支持網路/防火牆區域(zone)定義網路鏈接以及介面安全等級的動態防火牆管理工具。它支持IPv4,IPv6防火牆設置以及乙太網橋接,並且擁有運行時配置和永久配置選項。它也支持允許服務或者應用程序直接添加防火牆規則的介面。以前的system-config-firewall/lokkit防火牆模型是靜態的,每次修改都要求防火牆完全重啟。這個過程包括內核netfilter防火牆模塊的卸載和新配置所需模塊的裝載等。而模塊的卸載將會破壞狀態防火牆和確立的連接。相反,firewalldaemon動態管理防火牆,不需要重啟整個防火牆便可應用更改。因而也就沒有必要重載所有內核防火牆模塊了。不過,要使用firewalldaemon就要求防火牆的所有變更都要通過該守護進程來實現,以確保守護進程中的狀態和內核里的防火牆是一致的。另外,firewalldaemon無法解析由ip*tables和ebtables命令行工具添加的防火牆規則。守護進程通過D-BUS提供當前激活的防火牆設置信息,也通過D-BUS接受使用PolicyKit認證方式做的更改。「守護進程」應用程序、守護進程和用戶可以通過D-BUS請求啟用一個防火牆特性。特性可以是預定義的防火牆功能,如:服務、埠和協議的組合、埠/數據報轉發、偽裝、ICMP攔截或自定義規則等。該功能可以啟用確定的一段時間也可以再次停用。通過所謂的直接介面,其他的服務(例如libvirt)能夠通過iptables變元(arguments)和參數(parameters)增加自己的規則。amanda、ftp、samba和tftp服務的netfilter防火牆助手也被「守護進程」解決了,只要它們還作為預定義服務的一部分。附加助手的裝載不作為當前介面的一部分。由於一些助手只有在由模塊控制的所有連接都關閉後才可裝載。因而,跟蹤連接信息很重要,需要列入考慮范圍。靜態防火牆(system-config-firewall/lokkit)使用system-config-firewall和lokkit的靜態防火牆模型實際上仍然可用並將繼續提供,但卻不能與「守護進程」同時使用。用戶或者管理員可以決定使用哪一種方案。在軟體安裝,初次啟動或者是首次聯網時,將會出現一個選擇器。通過它你可以選擇要使用的防火牆方案。其他的解決方案將保持完整,可以通過更換模式啟用。firewalldaemon獨立於system-config-firewall,但二者不能同時使用。使用iptables和ip6tables的靜態防火牆規則如果你想使用自己的iptables和ip6tables靜態防火牆規則,那麼請安裝iptables-services並且禁用firewalld,啟用iptables和ip6tables:yuminstalliptables-...service靜態防火牆規則配置文件是/etc/sysconfig/iptables以及/etc/sysconfig/ip6tables.註:iptables與iptables-services軟體包不提供與服務配套使用的防火牆規則.這些服務是用來保障兼容性以及供想使用自己防火牆規則的人使用的.你可以安裝並使用system-config-firewall來創建上述服務需要的規則.為了能使用system-config-firewall,你必須停止firewalld.為服務創建規則並停用firewalld後,就可以啟用iptables與ip6tables服務了:systemctlstopfirewalld.servicesystemctlstartiptables..service什麼是區域?網路區域定義了網路連接的可信等級。這是一個一對多的關系,這意味著一次連接可以僅僅是一個區域的一部分,而一個區域可以用於很多連接。預定義的服務服務是埠和/或協議入口的組合。備選內容包括netfilter助手模塊以及IPv4、IPv6地址。埠和協議定義了tcp或udp埠,埠可以是一個埠或者埠范圍。ICMP阻塞可以選擇Internet控制報文協議的報文。這些報文可以是信息請求亦可是對信息請求或錯誤條件創建的響應。偽裝私有網路地址可以被映射到公開的IP地址。這是一次正規的地址轉換。埠轉發埠可以映射到另一個埠以及/或者其他主機。哪個區域可用?由firewalld提供的區域按照從不信任到信任的順序排序。丟棄任何流入網路的包都被丟棄,不作出任何響應。只允許流出的網路連接。阻塞任何進入的網路連接都被拒絕,並返回IPv4的icmp-host-prohibited報文或者IPv6的icmp6-adm-prohibited報文。只允許由該系統初始化的網路連接。公開用以可以公開的部分。你認為網路中其他的計算機不可信並且可能傷害你的計算機。只允許選中的連接接入。(..)外部用在路由器等啟用偽裝的外部網路。你認為網路中其他的計算機不可信並且可能傷害你的計算機。只允許選中的連接接入。隔離區(dmz)用以允許隔離區(dmz)中的電腦有限地被外界網路訪問。只接受被選中的連接。工作用在工作網路。你信任網路中的大多數計算機不會影響你的計算機。只接受被選中的連接。家庭用在家庭網路。你信任網路中的大多數計算機不會影響你的計算機。只接受被選中的連接。內部用在內部網路。你信任網路中的大多數計算機不會影響你的計算機。只接受被選中的連接。受信任的允許所有網路連接。我應該選用哪個區域?例如,公共的WIFI連接應該主要為不受信任的,家庭的有線網路應該是相當可信任的。根據與你使用的網路最符合的區域進行選擇。如何配置或者增加區域?你可以使用任何一種firewalld配置工具來配置或者增加區域,以及修改配置。工具有例如firewall-config這樣的圖形界面工具,firewall-cmd這樣的命令行工具,以及D-BUS介面。或者你也可以在配置文件目錄中創建或者拷貝區域文件。@PREFIX@/lib/firewalld/zones被用於默認和備用配置,/etc/firewalld/zones被用於用戶創建和自定義配置文件。如何為網路連接設置或者修改區域區域設置以ZONE=選項存儲在網路連接的ifcfg文件中。如果這個選項缺失或者為空,firewalld將使用配置的默認區域。如果這個連接受到NetworkManager控制,你也可以使用nm-connection-editor來修改區域。由NetworkManager控制的網路連接防火牆不能夠通過NetworkManager顯示的名稱來配置網路連接,只能配置網路介面。因此在網路連接之前NetworkManager將配置文件所述連接對應的網路介面告訴firewalld。如果在配置文件中沒有配置區域,介面將配置到firewalld的默認區域。如果網路連接使用了不止一個介面,所有的介面都會應用到fiwewalld。介面名稱的改變也將由NetworkManager控制並應用到firewalld。為了簡化,自此,網路連接將被用作與區域的關系。如果一個介面斷開了,NetworkManager也將告訴firewalld從區域中刪除該介面。當firewalld由systemd或者init腳本啟動或者重啟後,firewalld將通知NetworkManager把網路連接增加到區域。由腳本控制的網路對於由網路腳本控制的連接有一條限制:沒有守護進程通知firewalld將連接增加到區域。這項工作僅在ifcfg-post腳本進行。因此,此後對網路連接的重命名將不能被應用到firewalld。同樣,在連接活動時重啟firewalld將導致與其失去關聯。現在有意修復此情況。最簡單的是將全部未配置連接加入默認區域。區域定義了本區域中防火牆的特性:使用firewalld你可以通過圖形界面工具firewall-config或者命令行客戶端firewall-cmd啟用或者關閉防火牆特性。使用firewall-cmd命令行工具firewall-cmd支持全部防火牆特性。對於狀態和查詢模式,命令只返回狀態,沒有其他輸出。一般應用獲取firewalld狀態firewall-cmd--state此舉返回firewalld的狀態,沒有任何輸出。可以使用以下方式獲得狀態輸出:firewall-cmd--state&&echo"Running"||echo"Notrunning"在Fedora19中,狀態輸出比此前直觀:#rpm-qf$(whichfirewall-cmd)firewalld-0.3.3-2.fc19.noarch#firewall-cmd--statenotrunning在不改變狀態的條件下重新載入防火牆:firewall-cmd--reload如果你使用–complete-reload,狀態信息將會丟失。這個選項應當僅用於處理防火牆問題時,例如,狀態信息和防火牆規則都正常,但是不能建立任何連接的情況。獲取支持的區域列表firewall-cmd--get-zones這條命令輸出用空格分隔的列表。獲取所有支持的服務firewall-cmd--get-services這條命令輸出用空格分隔的列表。獲取所有支持的ICMP類型firewall-cmd--get-icmptypes這條命令輸出用空格分隔的列表。列出全部啟用的區域的特性firewall-cmd--list-all-zones輸出格式是:interfaces:..services:..ports:..forward-ports:..icmp-blocks:.輸出區域全部啟用的特性。如果生略區域,將顯示默認區域的信息。firewall-cmd[--zone=]--list-all獲取默認區域的網路設置firewall-cmd--get-default-zone設置默認區域firewall-cmd--set-default-zone=流入默認區域中配置的介面的新訪問請求將被置入新的默認區域。當前活動的連接將不受影響。獲取活動的區域firewall-cmd--get-active-zones這條命令將用以下格式輸出每個區域所含介面::..:..根據介面獲取區域firewall-cmd--get-zone-of-interface=這條命令將輸出介面所屬的區域名稱。將介面增加到區域firewall-cmd[--zone=]--add-interface=如果介面不屬於區域,介面將被增加到區域。如果區域被省略了,將使用默認區域。介面在重新載入後將重新應用。修改介面所屬區域firewall-cmd[--zone=]--change-interface=這個選項與–add-interface選項相似,但是當介面已經存在於另一個區域的時候,該介面將被添加到新的區域。從區域中刪除一個介面firewall-cmd[--zone=]--remove-interface=查詢區域中是否包含某介面firewall-cmd[--zone=]--query-interface=返回介面是否存在於該區域。沒有輸出。列舉區域中啟用的服務firewall-cmd[--zone=]--list-services啟用應急模式阻斷所有網路連接,以防出現緊急狀況firewall-cmd--panic-on禁用應急模式firewall-cmd--panic-off代碼如下復制代碼應急模式在0.3.0版本中發生了變化在0.3.0之前的FirewallD版本中,panic選項是–enable-panic與–disable-panic.查詢應急模式firewall-cmd--query-panic此命令返回應急模式的狀態,沒有輸出。可以使用以下方式獲得狀態輸出:firewall-cmd--query-panic&&echo"On"||echo"Off"處理運行時區域運行時模式下對區域進行的修改不是永久有效的。重新載入或者重啟後修改將失效。啟用區域中的一種服務firewall-cmd[--zone=]--add-service=[--timeout=]此舉啟用區域中的一種服務。如果未指定區域,將使用默認區域。如果設定了超時時間,服務將只啟用特定秒數。如果服務已經活躍,將不會有任何警告信息。例:使區域中的ipp-client服務生效60秒:firewall-cmd--zone=home--add-service=ipp-client--timeout=60例:啟用默認區域中的http服務:firewall-cmd--add-service=http禁用區域中的某種服務firewall-cmd[--zone=]--remove-service=此舉禁用區域中的某種服務。如果未指定區域,將使用默認區域。例:禁止home區域中的http服務:firewall-cmd--zone=home--remove-service=http區域種的服務將被禁用。如果服務沒有啟用,將不會有任何警告信息。查詢區域中是否啟用了特定服務firewall-cmd[--zone=]--query-service=如果服務啟用,將返回1,否則返回0。沒有輸出信息。啟用區域埠和協議組合firewall-cmd[--zone=]--add-port=[-]/[--timeout=]此舉將啟用埠和協議的組合。埠可以是一個單獨的埠或者是一個埠范圍-。協議可以是tcp或udp。禁用埠和協議組合firewall-cmd[--zone=]--remove-port=[-]/查詢區域中是否啟用了埠和協議組合firewall-cmd[--zone=]--query-port=[-]/如果啟用,此命令將有返回值。沒有輸出信息。啟用區域中的IP偽裝功能firewall-cmd[--zone=]--add-masquerade此舉啟用區域的偽裝功能。私有網路的地址將被隱藏並映射到一個公有IP。這是地址轉換的一種形式,常用於路由。由於內核的限制,偽裝功能僅可用於IPv4。禁用區域中的IP偽裝firewall-cmd[--zone=]--remove-masquerade查詢區域的偽裝狀態firewall-cmd[--zone=]--query-masquerade如果啟用,此命令將有返回值。沒有輸出信息。啟用區域的ICMP阻塞功能firewall-cmd[--zone=]--add-icmp-block=此舉將啟用選中的Internet控制報文協議(ICMP)報文進行阻塞。ICMP報文可以是請求信息或者創建的應答報文,以及錯誤應答。禁止區域的ICMP阻塞功能firewall-cmd[--zone=]--remove-icmp-block=查詢區域的ICMP阻塞功能firewall-cmd[--zone=]--query-icmp-block=如果啟用,此命令將有返回值。沒有輸出信息。例:阻塞區域的響應應答報文:firewall-cmd--zone=public--add-icmp-block=echo-reply在區域中啟用埠轉發或映射firewall-cmd[--zone=]--add-forward-port=port=[-]:proto={:toport=[-]|:toaddr=|:toport=[-]:toaddr=}埠可以映射到另一台主機的同一埠,也可以是同一主機或另一主機的不同埠。埠號可以是一個單獨的埠或者是埠范圍-。協議可以為tcp或udp。目標埠可以是埠號或者是埠范圍-。目標地址可以是IPv4地址。受內核限制,埠轉發功能僅可用於IPv4。禁止區域的埠轉發或者埠映射firewall-cmd[--zone=]--remove-forward-port=port=[-]:proto={:toport=[-]|:toaddr=|:toport=[-]:toaddr=}查詢區域的埠轉發或者埠映射firewall-cmd[--zone=]--query-forward-port=port=[-]:proto={:toport=[-]|:toaddr=|:toport=[-]:toaddr=}

2. 急求!ftp命令的全部命令集合

61sendport
說明:設置PORT命令的使用。
62)site arg1,arg2
說明:將參數作為SITE命令逐字發送至遠程ftp主機。
63)size file-name
說明:顯示遠程主機文件大小。
如site idle 7200。
64)status
說明:顯示當前ftp狀態。
65)struct[struct-name]
說明:將文件傳輸結構設置為struct-name,預設時使用 stream結構。
66)sunique
說明:將遠程主機文件名存儲設置為唯一(與runique對應)。
67)system
說明:顯示遠程主機的作系統類型。
68)tenex
說明:將文件傳輸類型設置為TENEX機所需的類型。
69)tick
說明:設置傳輸時的位元組計數器。
70)trace
說明:轉換報文跟蹤,運行ftp的命令時,trace將顯示沒個報文的理由。
71)type
說明:設置或顯示文件傳輸類型.
如type [type-name]其中type-name 的意思是文件傳輸的類型,默認是ASCII,沒加這個參數就是顯示當前的傳輸類型.
72umask[newmask]
說明:將遠程伺服器的預設umask設置為newmask,如umask 3。
73)user
說明:指定連接到遠程計算機的用戶.
如user user-name [passwd] [account]其中user-name不用說都是用來登陸計算機的用戶名了,passwd是指定user-name的密碼,不指定的話ftp會提示輸入密碼。account是指定用來登陸計算機的帳號,如不指定,ftp會提示輸入帳號.
74)verbose
說明:轉換冗餘模式,這里如果打開,會顯示所有ftp響應,文件傳輸結束的時候會顯示傳輸的效率和統計信息,默認的情況是打開的。

3. FTP使用詳解

1.什麼是FTP(文件傳輸協議)
FILE TRANSFERPROTOCOL(FTP)意為文件傳輸協議,用於管理計算機之間的文件傳送。FTP通常指文件傳輸服務。
FTP是Internet上使用非常廣泛的一種通訊協議。它是由支持Internet文件傳輸的各種規則所組成的集合,這些規則使 Internet用戶可以把文件從一個主機拷貝到另一個主機上,因而為用戶提供了極大的方便和收益。FTP通常也表示用戶執行這個協議所使用的應用程序(例如:凱屋「上當「),從而獲取所需的信息資料。
FTP和其它 Internet服務一樣,也是採用客戶機/伺服器方式。使用方法很簡單,啟動FTP客戶端程序先與遠程主機建立連接,然後向遠程主機發出傳輸命令,遠程主機在收到命令後就給予響應,並執行正確的命令。FTP有一個根本的限制,那就是,如果用戶未被某一FTP主機授權,就不能訪問該主機,實際上是用戶不能遠程登錄(Remote Login)進入該主機。也就是說,如果用戶在某個主機上沒有注冊獲得授權,沒有用戶名和口令,就不能與該主機進行文件的傳輸。而AnonymousFTP(匿名FTP)則取消了這種限制。

2.什麼是Anonymous FTP(匿名文件傳輸)
Anonymous(匿名文件傳輸)能夠使用戶與遠程主機建立連接並以匿名身份從遠程主機上拷貝文件,而不必是該遠程主機的注冊用戶。用戶使用特殊的用戶名「Anonymous」和「guest」就可有限制地訪問遠程主機上公開的文件。現在許多系統要求用戶將Emai1地址作為口令,以便更好地對訪問進行跟綜。出於安全的目的,大部分匿名FTP主機一般只允許遠程用戶下載(download)文件,而不允許上傳 (upload)文件。也就是說,用戶只能從匿名FTP主機拷貝需要的文件而不能把文件拷貝到匿名FTP主機。另外,匿名FTP主機還採用了其他一些保護措施以保護自己的文件不至於被用戶修改和刪除,並防止計算機病毒的侵入。在具有圖形用戶界面的WorldWide Web環境於1995年開始普及以前,匿名FTP一直是Internet上獲取信息資源的最主要方式,在Internet成千上萬的匿名PTP主機中存儲著無以計數的文件,這些文件包含了各種各樣的信息,數據和軟體。人們只要知道特定信息資源的主機地址,就可以用匿名FTP登但是匿名FTP仍是 Internet上傳輸分發軟體的一種基本方法。

3.什麼是Remote Login(遠程登錄)
Remote Login(遠程登錄)指用戶通過Internet登錄到遠程主機上。在這種連接建立之後,用戶所在的計算就可以作為遠程主機的終端一樣使用。 Internet上遠程登錄的主要方式是Telnet,匿名FTP也需要首先經過遠程登錄才能進行文件傳輸。

4.什麼是Upload(上傳)
Upload(上傳)指把數據從本地計算機傳到遠程主機上,因此受到嚴格的管理和控制,但Upload是提交用戶信息和要求以實現遠程交互應用的基礎。

5.何為FTP連接
進行FTP連接首先要給出目的FTP伺服器的名稱或地址,當連接到FTP伺服器後,一般要進行登錄,在檢驗用戶ID號和口令後,連接才得以建立,某些系統也允許用戶進行匿名登錄。與在所有的多用戶系統中一樣,對於同一目錄或文件,不同的用戶擁有不同的許可權,所以在使用過程中,如果發現不能下載或上載某些文件時,一般是因為用戶許可權不夠。

6.FTP文件傳輸方式
FTP可用多種格式傳輸文件,通常由系統決定,大多數系統(包括UNIX系統)只有兩種模式:文本模式(ASCII)和二進制模式(BIN/IMAGE)。
文本傳輸器使用ASCII字元,並由回車鍵和換行符分開,而二進制不用轉換或格式化就可傳字元,二進制模式比文本模式更快,並且可以傳輸所有ASCII值,所以系統管理員一般將FTP設置成二進制模式。應注意在用FIP傳輸文件前,必須確保使用正確的傳輸模式,按文本模式傳二進制文件必將導致錯誤。

7.FTP的可靠性問題
FTP建立在傳輸層TCP協議之上,TCP是面向連接的協議,負責保證數據從源計算機到目的計算機的傳輸。TCP採用校驗、確認接收和超時重傳等一系列措施提供可靠的傳輸,所以在傳輸過程中FTP程序如果沒有提示錯誤,就無需擔心傳輸問題。

4. FTP下載東西怎麼防止被跟蹤IP

加代理,越遠越好,不易跟蹤的那種。不推薦多層代理,又慢又麻煩。

5. 我有一個FTP站點文件目錄,如何記錄被人訪問我的FTP的IP地址,以及訪問次數

每個ftp server軟體都有相應的log記錄,記錄訪問者,訪問時間,訪問大概內容等

6. 連接跟蹤 (conntrack)

一般conntrack用來指代「Connection Tracking」,即連接跟蹤,是建立在 Netfilter框架之上的重要功能之一。 連接跟蹤允許內核跟蹤所有邏賣跡輯網路連接或會話,從而關聯可能構成該連接的所有數據包。 NAT 依賴此信息以相同的方式轉換所有相關數據包中派並,而 iptables 可以使用此信息充當有狀態防火牆。

Conntrack moles and hooks 這篇文章的概覽很清楚地介紹了連接跟蹤系統的作用,這里翻譯記錄在這里,對我來說其中最重要的一點是理解conntrack是一位「透明觀察者」:

連接跟蹤的目的是什麼,它有什麼作用?一旦激活連接跟蹤(Linux 內核中的 ct 系統),它會檢查 IPv4 和/或 IPv6 網路數據包及其有效負載,以確定哪些數據包相互關聯,例如在面向連接的協議(如 TCP)的范圍內。 ct 系統作為透明觀察者執行此任務,並不積極參與端點之間的通信。連接的端點是本地的還是遠程與 ct 系統無關。它們可以都位於遠程主機上,在這種情況下,ct 系統在給特定連接的數據包充當路由或橋接角色的主機上觀察它們。一個連接中的一個甚至兩個端點都可以是運行 ct 系統的同一主機上的本地套接字。羨蠢這對ct系統來說沒區別。 ct 系統維護所有跟蹤連接的最新(實時)列表。基於此,它通過為每個數據包提供一個指向其跟蹤連接實例之一的引用(指針)來給網路數據包遍歷內核網路堆棧時「分類」。因此,其他內核組件可以訪問此連接關聯並基於此做出決策。使用它的兩個最突出的候選者是 NAT 子系統以及Iptables和Nftables 的狀態包過濾模塊。 ct 系統本身從不改變/操縱數據包。它通常也不會丟棄數據包,只可能在極少數情況下發生這種情況。在檢查數據包內容時,它主要關注 OSI模型的第 3 層和第 4 層。它能夠跟蹤 TCP、UDP、ICMP、ICMPv6、SCTP、DCCP 和 GRE 連接。可見ct 系統對「連接」的定義不限於面向連接的協議,因為剛才提到的某些協議不是面向連接的。例如它將 ICMP echo 請求和echo回復 (ping) 視為「連接」並處理。 ct 系統提供了幾個輔助/擴展組件,將其跟蹤能力擴展到應用層,例如跟蹤協議,如 FTP、TFTP、IRC、PPTP、SIP等。

conntrack-tools 是一組用於 Linux 的免費軟體用戶空間工具,允許系統管理員與連接跟蹤系統進行交互,conntrack-tools包括用戶空間守護進程 conntrackd 和命令行界面 conntrack。

內核中關於conntrack模塊的配置參數及默認值可以參考 Kernel文檔 或者通過命令 sysctl -a | grep conntrack 來查看

7. 如何理解連接跟蹤機制

連接跟蹤定義很簡單:用來記錄和跟蹤連接的狀態。

為什麼又需要連接跟蹤功能呢?因為它是狀態防火牆和NAT的實現基礎。

Neftiler為了實現基於數據連接狀態仿老冊偵測的狀態防火牆功能和NAT地址轉換功能才開發出了連接跟蹤這套機制。那就意思是說:如果編譯內核時開啟了連接跟蹤選項,那麼Linux系統就會為它收到的每個數據包維持一個連接狀態用於記錄這條數據連接的狀態。接下來我們就來研究一下Netfilter的連接跟蹤的設計備宏思想和實現方式。

之前有一副圖,我們可以很明確的看到:用於實現連接跟蹤入口的hook函數以較高的優先順序分別被注冊到了netfitler的NF_IP_PRE_ROUTING和NF_IP_LOCAL_OUT兩個hook點上;用於實現連接跟蹤出口的hook函數以非常低的優先順序分別被注冊到了netfilter的NF_IP_LOCAL_IN和NF_IP_POST_ROUTING兩個hook點上。

其實PRE_ROUTING和LOCAL_OUT點可以看作是整個netfilter的入口,而POST_ROUTING和LOCAL_IN可以看作是其出口。在只考慮連接跟蹤的情況下,一個數據包無外乎有以下三種流程可以走:

一、發送給本機的數據包

流程:PRE_ROUTING----LOCAL_IN---本地進程,如果是新的包,在PREROUTING處生成連接記錄,通過POSTROUTING後加到hash表

二、需要本機轉發的數據包

流程:PRE_ROUTING---FORWARD---POST_ROUTING---外出,在PREROUTING處生成連接記錄,在LOCAL_IN處把生成的連接記錄加到hash表

三、從本機發出的數據包

流程:LOCAL_OUT----POST_ROUTING---外出,在LOCAL_OUT處生成連接記錄,在POSTROUTING處把生成的連接記錄加到hash表。

我們都知道在INET層用於表示數據包的結構是大名鼎鼎的sk_buff{}(後面簡稱skb),如果你不幸的沒聽說過這個東東,那麼我強烈的建議你先補一下網路協議棧的基礎知識再繼續閱讀這篇文章。在skb中有個成員指針nfct,類型是struct nf_conntrack{},該結構定義在include/linux/skbuff.h文件中。該結構記錄了連接記錄被公開應用的計數,也方便其他地方對連接跟蹤的引用。連接跟蹤在實際應用中一般都通過強制類型轉換將nfct轉換成指向ip_conntrack{}類型(定義在include/linux/netfilter_ipv4/ip_conntrack.h里)來獲取一個數據包所屬連接跟蹤的狀態信息的。即:Neftilter框架用ip_conntrack{}來記錄一個數據包與其連接的狀態關系。

同時在include/linux/netfilter_ipv4/ip_conntrack.h文件中還提供了一個非常有用的介面:struct ip_conntrack *ip_conntrack_get(skb, ctinfo)用於獲取一個skb的nfct指針,從而得知該數據包的連接狀態和該連接狀態的相關信息ctinfo。從連接跟蹤的角度來看,這個ctinfo表示了每個數據包的幾種連接狀態:

l IP_CT_ESTABLISHED

Packet是一個已建連接的一部分,在其初始方向。

l IP_CT_RELATED

Packet屬於一個已建連接的相關連接,在其初始方向。

l IP_CT_NEW

Packet試圖建立新的連接

l IP_CT_ESTABLISHED+IP_CT_IS_REPLY

Packet是一個已建連接的一部分,在其響應方含中向。

l IP_CT_RELATED+IP_CT_IS_REPLY

Packet屬於一個已建連接的相關連接,在其響應方向。

在連接跟蹤內部,收到的每個skb首先被轉換成一個ip_conntrack_tuple{}結構,也就是說ip_conntrack_tuple{}結構才是連接跟蹤系統所「認識」的數據包。那麼skb和ip_conntrack_tuple{}結構之間是如何轉換的呢?這個問題沒有一個統一的答案,與具體的協議息息相關。例如,對於TCP/UDP協議,根據「源、目的IP+源、目的埠」再加序列號就可以唯一的標識一個數據包了;對於ICMP協議,根據「源、目的IP+類型+代號」再加序列號才可以唯一確定一個ICMP報文等等。對於諸如像FTP這種應用層的「活動」協議來說情況就更復雜了。本文不試圖去分析某種具體協議的連接跟蹤實現,而是探究連接跟蹤的設計原理和其工作流程,使大家掌握連接跟蹤的精髓。因為現在Linux內核更新的太快的都到3.4.x,變化之大啊。就算是2.6.22和2.6.21在連接跟蹤這塊還是有些區別呢。一旦大家理解了連接跟蹤的設計思想,掌握了其神韻,它再怎麼也萬變不離其宗,再看具體的代碼實現時就不會犯迷糊了。俗話說「授人一魚,不如授人一漁」,我們教給大家的是方法。有了方法再加上自己的勤學苦練,那就成了技能,最後可以使得大家在為自己的協議開發連接跟蹤功能時心裡有數。這也是我寫這個系列博文的初衷和目的。與君共勉。

在開始分析連接跟蹤之前,我們還是站在統帥的角度來俯視一下整個連接跟蹤的布局。這里我先用比較粗略的精簡流程圖為大家做個展示,目的是方便大家理解,好入門。當然,我的理解可能還有不太准確的地方,還請大牛們幫小弟指正。

我還是重申一下:連接跟蹤分入口和出口兩個點。謹記:入口時創建連接跟蹤記錄,出口時將該記錄加入到連接跟蹤表中。我們分別來看看。
入口:

整個入口的流程簡述如下:對於每個到來的skb,連接跟蹤都將其轉換成一個tuple結構,然後用該tuple去查連接跟蹤表。如果該類型的數據包沒有被跟蹤過,將為其在連接跟蹤的hash表裡建立一個連接記錄項,對於已經跟蹤過了的數據包則不用此操作。緊接著,調用該報文所屬協議的連接跟蹤模塊的所提供的packet()回調函數,最後根據狀態改變連接跟蹤記錄的狀態。

出口:

整個出口的流程簡述如下:對於每個即將離開Netfilter框架的數據包,如果用於處理該協議類型報文的連接跟蹤模塊提供了helper函數,那麼該數據包首先會被helper函數處理,然後才去判斷,如果該報文已經被跟蹤過了,那麼其所屬連接的狀態,決定該包是該被丟棄、或是返回協議棧繼續傳輸,又或者將其加入到連接跟蹤表中。

連接跟蹤的協議管理:

我們前面曾說過,不同協議其連接跟蹤的實現是不相同的。每種協議如果要開發自己的連接跟蹤模塊,那麼它首先必須實例化一個ip_conntrack_protocol{}結構體類型的變數,對其進行必要的填充,然後調用ip_conntrack_protocol_register()函數將該結構進行注冊,其實就是根據協議類型將其設置到全局數組ip_ct_protos[]中的相應位置上。

ip_ct_protos變數里保存連接跟蹤系統當前可以處理的所有協議,協議號作為數組唯一的下標,如下圖所示。

結構體ip_conntrack_protocol{}中的每個成員,內核源碼已經做了很詳細的注釋了,這里我就不一一解釋了,在實際開發過程中我們用到了哪些函數再具體分析。

連接跟蹤的輔助模塊:

Netfilter的連接跟蹤為我們提供了一個非常有用的功能模塊:helper。該模塊可以使我們以很小的代價來完成對連接跟蹤功能的擴展。這種應用場景需求一般是,當一個數據包即將離開Netfilter框架之前,我們可以對數據包再做一些最後的處理。從前面的圖我們也可以看出來,helper模塊以較低優先順序被注冊到了Netfilter的LOCAL_OUT和POST_ROUTING兩個hook點上。

每一個輔助模塊都是一個ip_conntrack_helper{}結構體類型的對象。也就是說,如果你所開發的協議需要連接跟蹤輔助模塊來完成一些工作的話,那麼你必須也去實例化一個ip_conntrack_helper{}對象,對其進行填充,最後調用ip_conntrack_helper_register{}函數將你的輔助模塊注冊到全局變數helpers里,該結構是個雙向鏈表,裡面保存了當前已經注冊到連接跟蹤系統里的所有協議的輔助模塊。

全局helpers變數的定義和初始化在net/netfilter/nf_conntrack_helper.c文件中完成的。

最後,我們的helpers變數所表示的雙向鏈表一般都是像下圖所示的這樣子:

由此我們基本上就可以知道,注冊在Netfilter框架里LOCAL_OUT和POST_ROUTING兩個hook點上ip_conntrack_help()回調函數所做的事情基本也就很清晰了:那就是通過依次遍歷helpers鏈表,然後調用每個ip_conntrack_helper{}對象的help()函數。

期望連接:

Netfilter的連接跟蹤為支持諸如FTP這樣的「活動」連接提供了一個叫做「期望連接」的機制。我們都知道FTP協議服務端用21埠做命令傳輸通道,主動模式下伺服器用20埠做數據傳輸通道;被動模式下伺服器隨機開一個高於1024的埠,然後客戶端來連接這個埠開始數據傳輸。也就是說無論主、被動,都需要兩條連接:命令通道的連接和數據通道的連接。連接跟蹤在處理這種應用場景時提出了一個「期望連接」的概念,即一條數據連接和另外一條數據連接是相關的,然後對於這種有「相關性」的連接給出自己的解決方案。我們說過,本文不打算分析某種具體協議連接跟蹤的實現。接下來我們就來談談期望連接。

每條期望連接都用一個ip_conntrack_expect{}結構體類型的對象來表示,所有的期望連接存儲在由全局變數ip_conntrack_expect_list所指向的雙向鏈表中,該鏈表的結構一般如下:

結構體ip_conntrack_expect{}中的成員及其意義在內核源碼中也做了充分的注釋,這里我就不逐一介紹了,等到需要的時候再詳細探討。

連接跟蹤表:

說了半天終於到我們連接跟蹤表拋頭露面的時候了。連接跟蹤表是一個用於記錄所有數據包連接信息的hash散列表,其實連接跟蹤表就是一個以數據包的hash值組成的一個雙向循環鏈表數組,每條鏈表中的每個節點都是ip_conntrack_tuple_hash{}類型的一個對象。連接跟蹤表是由一個全局的雙向鏈表指針變數ip_conntrack_hash[]來表示。為了使我們更容易理解ip_conntrack_hash[]這個雙向循環鏈表的數組,我們將前面提到的幾個重要的目前還未介紹的結構ip_conntrack_tuple{}、ip_conntrack{}和ip_conntrack_tuple_hash{}分別介紹一下。

我們可以看到ip_conntrack_tuple_hash{}僅僅是對ip_conntrack_tuple{}的封裝而已,將其組織成了一個雙向鏈表結構。因此,在理解層面上我們可以認為它們是同一個東西。

在分析ip_conntrack{}結構時,我們將前面所有和其相關的數據結構都列出來,方便大家對其理解和記憶。

參考http://bbs.chinaunix.net/thread-1925862-1-1.html

該圖可是說是連接跟蹤部分的數據核心,接下來我們來詳細說說ip_conntrack{}結構中相關成員的意義。

l ct_general:該結構記錄了連接記錄被公開應用的計數,也方便其他地方對連接跟蹤的引用。

l status:數據包連接的狀態,是一個比特點陣圖。

l timeout:不同協議的每條連接都有默認超時時間,如果在超過了該時間且沒有屬於某條連接的數據包來刷新該連接跟蹤記錄,那麼會調用這種協議類型提供的超時函數。

l counters:該成員只有在編譯內核時打開了CONFIG_IP_NF_CT_ACCT開完才會存在,代表某條連接所記錄的位元組數和包數。

l master:該成員指向另外一個ip_conntrack{}。一般用於期望連接場景。即如果當前連接是另外某條連接的期望連接的話,那麼該成員就指向那條我們所屬的主連接。

l helper:如果某種協議提供了擴展模塊,就通過該成員來調用擴展模塊的功能函數。

l proto:該結構是ip_conntrack_proto{}類型,和我們前面曾介紹過的用於存儲不同協議連接跟蹤的ip_conntrack_protocol{}結構不要混淆了。前者是個枚舉類型,後者是個結構體類型。這里的proto表示不同協議為了實現其自身的連接跟蹤功能而需要的一些額外參數信息。目前這個枚舉類型如下:

如果將來你的協議在實現連接跟蹤時也需要一些額外數據,那麼可以對該結構進行擴充。

l help:該成員代表不同的應用為了實現其自身的連接跟蹤功能而需要的一些額外參數信息,也是個枚舉類型的ip_conntrack_help{}結構,和我們前面剛介紹過的結構體類型ip_conntrack_helpers{}容易混淆。ip_conntrack_proto{}是為協議層需要而存在的,而ip_conntrack_help{}是為應用層需要而存在。

l tuplehash:該結構是個ip_conntrack_tuple_hash{}類型的數組,大小為2。tuplehash[0]表示一條數據流「初始」方向上的連接情況,tuplehash[1]表示該數據流「應答」方向的響應情況,見上圖所示。

到目前為止,我們已經了解了連接跟蹤設計思想和其工作機制:連接跟蹤是Netfilter提供的一套基礎框架,不同的協議可以根據其自身協議的特殊性在連接跟蹤機制的指導和約束下來開發本協議的連接跟蹤功能,最後將其交給連接跟蹤機制來統一管理。
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦

8. FTP聯接或路由器設置問題

FTP命令是Internet用戶使用最頻繁的命令之一,熟悉並靈活應用FTP的內部命令,可以大大方便使用者,並收到事半功倍之效。

如果你想學習使用進行後台FTP下載,那麼就必須學習FTP指令。
FTP的命令行格式為: ftp -v -d -i -n -g [主機名] ,
其中 -v 顯示遠程伺服器的所有響應信息;
-n 限制ftp的自動登錄,即不使用;.n etrc文件;
-d 使用調試方式;
-g 取消全局文件名。
FTP使用的內部命令如下(中括弧表示可選項):
1.![cmd[args>:在本地機中執行交互shell,exit回到ftp環境,如:!ls*.zip
2.$ macro-ame[args]: 執行宏定義macro-name。
3.account[password]: 提供登錄遠程系統成功後訪問系統資源所需的補充口令。
4.append local-file[remote-file]:將本地文件追加到遠程系統主機,若未指定遠程系統文件名,則使用本地文件名。
5.ascii:使用ascii類型傳輸方式。
6.bell:每個命令執行完畢後計算機響鈴一次。
7.bin:使用二進制文件傳輸方式。
8.bye:退出ftp會話過程。
9.case:在使用mget時,將遠程主機文件名中的大寫轉為小寫字母。
10.cd remote-dir:進入遠程主機目錄。
11.cp:進入遠程主機目錄的父目錄。
12.chmod mode file-name:將遠程主機文件file-name的存取方式設置為mode,如:chmod 777 a.out。
13.close:中斷與遠程伺服器的ftp會話(與open對應)。
14.cr:使用asscii方式傳輸文件時,將回車換行轉換為回行。
15.delete remote-file:刪除遠程主機文件。
16.debug[debug-value]:設置調試方式, 顯示發送至遠程主機的每條命令,如:deb up 3,若設為0,表示取消debug。
17.dir[remote-dir][local-file]:顯示遠程主機目錄,並將結果存入本地文件
18.disconnection:同close。
19.form format:將文件傳輸方式設置為format,預設為file方式。
20.get remote-file[local-file]: 將遠程主機的文件remote-file傳至本地硬碟的local-file。
21.glob:設置mdelete,mget,mput的文件名擴展,預設時不擴展文件名,同命令行的-g參數。
22.hash:每傳輸1024位元組,顯示一個hash符號(#)。
23.help[cmd]:顯示ftp內部命令cmd的幫助信息,如:help get。
24.idle[seconds]:將遠程伺服器的休眠計時器設為[seconds]秒。
25.image:設置二進制傳輸方式(同binary)。
26.lcd[dir]:將本地工作目錄切換至dir。
27.ls[remote-dir][local-file]:顯示遠程目錄remote-dir, 並存入本地文件local-file。
28.macdef macro-name:定義一個宏,遇到macdef下的空行時,宏定義結束。
29.mdelete[remote-file]:刪除遠程主機文件。
30.mdir remote-files local-file:與dir類似,但可指定多個遠程文件,如 :mdir *.o.*.zipoutfile 。
31.mget remote-files:傳輸多個遠程文件。
32.mkdir dir-name:在遠程主機中建一目錄。
33.mls remote-file local-file:同nlist,但可指定多個文件名。
34.mode[modename]:將文件傳輸方式設置為modename, 預設為stream方式。
35.modtime file-name:顯示遠程主機文件的最後修改時間。
36.mput local-file:將多個文件傳輸至遠程主機。
37.newer file-name: 如果遠程機中file-name的修改時間比本地硬碟同名文件的時間更近,則重傳該文件。
38.nlist[remote-dir][local-file]:顯示遠程主機目錄的文件清單,並存入本地硬碟的local-file。
39.nmap[inpattern outpattern]:設置文件名映射機制, 使得文件傳輸時,文件中的某些字元相互轉換, 如:nmap $1.$2.$3[$1,$2].[$2,$3],則傳輸文件a1.a2.a3時,文件名變為a1,a2。 該命令特別適用於遠程主機為非UNIX機的情況。
40.ntrans[inchars[outchars>:設置文件名字元的翻譯機制,如ntrans1R,則文件名LLL將變為RRR。
41.open host[port]:建立指定ftp伺服器連接,可指定連接埠。
42.passive:進入被動傳輸方式。
43.prompt:設置多個文件傳輸時的交互提示。
44.proxy ftp-cmd:在次要控制連接中,執行一條ftp命令, 該命令允許連接兩個ftp伺服器,以在兩個伺服器間傳輸文件。第一條ftp命令必須為open,以首先建立兩個伺服器間的連接。
45.put local-file[remote-file]:將本地文件local-file傳送至遠程主機。
46.pwd:顯示遠程主機的當前工作目錄。
47.quit:同bye,退出ftp會話。
48.quote arg1,arg2...:將參數逐字發至遠程ftp伺服器,如:quote syst.
49.recv remote-file[local-file]:同get。
50.reget remote-file[local-file]:類似於get, 但若local-file存在,則從上次傳輸中斷處續傳。
51.rhelp[cmd-name]:請求獲得遠程主機的幫助。
52.rstatus[file-name]:若未指定文件名,則顯示遠程主機的狀態, 否則顯示文件狀態。
53.rename[from][to]:更改遠程主機文件名。
54.reset:清除回答隊列。
55.restart marker:從指定的標志marker處,重新開始get或put,如:restart 130。
56.rmdir dir-name:刪除遠程主機目錄。
57.runique:設置文件名只一性存儲,若文件存在,則在原文件後加後綴.1, .2等。
58.send local-file[remote-file]:同put。
59.sendport:設置PORT命令的使用。
60.site arg1,arg2...:將參數作為SITE命令逐字發送至遠程ftp主機。
61.size file-name:顯示遠程主機文件大小,如:site idle 7200。
62.status:顯示當前ftp狀態。
63.struct[struct-name]:將文件傳輸結構設置為struct-name, 預設時使用stream結構。
64.sunique:將遠程主機文件名存儲設置為只一(與runique對應)。
65.system:顯示遠程主機的操作系統類型。
66.tenex:將文件傳輸類型設置為TENEX機的所需的類型。
67.tick:設置傳輸時的位元組計數器。
68.trace:設置包跟蹤。
69.type[type-name]:設置文件傳輸類型為type-name,預設為ascii,如:type binary,設置二進制傳輸方式。
70.umask[newmask]:將遠程伺服器的預設umask設置為newmask,如:umask 3
71.user user-name[password][account]:向遠程主機表明自己的身份,需要口令時,必須輸入口令,如:user anonymous my@email。
72.verbose:同命令行的-v參數,即設置詳盡報告方式,ftp 伺服器的所有響 應都將顯示給用戶,預設為on.
73.?[cmd]:同help.

9. FTP的防範與攻擊如何實現

------------------------FTP安全考慮—RFC2577----------------------------------
1.簡介
文件傳輸協議規范(FTP)[PR85]提供了一種允許客戶端建立FTP控制連接並在兩台
FTP伺服器間傳輸文件的機制。這種「代理FTP」機制可以用來減少網路的流量,客戶端命
令一台伺服器傳輸文件給另一台伺服器,而不是從第一台伺服器傳輸文件給客戶端,然後從
客戶端再傳輸給第二台伺服器。當客戶端連接到網路的速度特別慢時,這是非常有用的。但
同時,代理FTP還帶來了一個安全問題——「跳轉攻擊(bounce attack)」[CERT97:27]。除
了「跳轉攻擊」,FTP伺服器還可以被攻擊者通過強力來猜測密碼。
本文檔並不考慮當FTP和一些強壯的安全協議(比如IP安全)聯合使用的情況。雖然
這些安全關注並不在本文檔的考慮范圍內,但是它們也應該被寫成文檔。
本文給FTP伺服器的實現者和系統管理員提供了一些信息,如下所示。第二章描述了
FTP「跳轉攻擊」。第三章提供了減少「跳轉攻擊」的建議。第四章給基於網路地址限制訪
問的伺服器提供了建議。第五章提供了限制客戶端強力「猜測密碼」的建議。接著,第六章
簡單的討論了改善保密性的機制。第七章給出了阻止猜測用戶身份的機制。第八章討論了端
口盜用。最後,第九章討論了其它跟軟體漏洞有關而跟協議本身無關的FTP安全問題。
2.跳轉攻擊(Bounce Attack)
RFC959[PR85]中規定的FTP規范提供了一種攻擊知名網路伺服器的一種方法,並且使
攻擊者很難被跟蹤。攻擊者發送一個FTP"PORT"命令給目標FTP伺服器,其中包含該主機
的網路地址和被攻擊的服務的埠號。這樣,客戶端就能命令FTP伺服器發一個文件給被
攻擊的服務。這個文件可能包括根被攻擊的服務有關的命令(如SMTP,NNTP等)。由於是
命令第三方去連接到一種服務,而不是直接連接,就使得跟蹤攻擊者變得困難,並且還避開
了基於網路地址的訪問限制。
例如,客戶端上載包含SMTP命令的報文到FTP伺服器。然後,使用正確的PORT命
令,客戶端命令伺服器打開一個連接給第三方機器的SMTP埠。最後,客戶端命令服務
器傳輸剛才上載的包含SMTP命令的報文給第三方機器。這就使得客戶端不建立任何直接
的連接而在第三方機器上偽造郵件,並且很難跟蹤到這個攻擊者。
3.避免跳轉攻擊
原來的FTP規范[PR85]假定使用TCP進行數據鏈接,TCP埠號從0到1023時報留給
一些眾所周知的服務的,比如郵件,網路新聞和FTP控制鏈接。FTP規范對數據鏈接沒有
限制TCP埠號。因此,使用代理FTP,客戶端就可以命令伺服器去攻擊任何機器上眾所
周知的服務。
為了避免跳轉攻擊,伺服器最好不要打開數據鏈接到小於1024的TCP埠號。如果服
務器收到一個TCP埠號小於1024的PORT命令,那麼可以返回消息504(對這種參數命
令不能實現)。但要注意這樣遺留下那些不知名服務(埠號大於1023)易受攻擊。
一些建議(例如[AOM98]和[Pis94])提供了允許使用除了TCP以外的其他傳輸協議來
建立數據連接的機制。當使用這些協議時,同樣要注意採用類似的防範措施來保護眾所周知
的服務。
另外,我們注意到跳轉攻擊一般需要攻擊者首先上載一個報文到FTP伺服器然後再下
載到准備攻擊的服務埠上。使用適當的文件保護措施就可以阻止這種情況發生。然而攻擊
者也可能通過從遠程FTP伺服器發送一些能破壞某些服務的數據來攻擊它。
禁止使用PORT命令也是避免跳轉攻擊的一種方法。大多數文件傳輸可以僅通過PASV
命令來實現。但這樣做的缺點就是喪失了使用代理FTP的能力,當然代理FTP並不是在所
有場合都需要的。
4.受限制的訪問
一些FTP伺服器希望有基於網路地址的訪問控制。例如,伺服器可能希望限制來自某
些地點的對某些文件的訪問(例如為了某些文件不被傳送到組織以外)。在這種情況下,服
務器在發送受限制的文件之前應該首先確保遠程主機的網路地址在本組織的范圍內,不管是
控制連接還是數據連接。通過檢查這兩個連接,伺服器就被保護避免了這種情況:控制連接
用一台可信任的主機連接而數據連接不是。同樣的,客戶也應該在接受監聽模式下的開放端
口連接後檢察遠程主機的IP地址,以確保連接是由所期望的伺服器建立的。
注意,基於網路地址的受限訪問留下了FTP伺服器易受「地址盜用(spoof)」攻擊。在
spoof攻擊中,攻擊機器可以冒用在組織內的機器的網路地址,從而將文件下載到在組織之
外的未授權的機器上。只要可能,就應該使用安全鑒別機制,比如在[HL97]中列出的安全鑒
別機制。
5.保護密碼
為了減少通過FTP伺服器進行強力密碼猜測攻擊的風險,建議伺服器限制嘗試發送正
確的密碼的次數。在幾次嘗試(3~5次)後,伺服器應該結束和該客戶的控制連接。在結束
控制連接以前,伺服器必須給客戶端發送一個返回碼421(「服務不可用,關閉控制連接」
[PR85])。另外,伺服器在相應無效的「PASS」命令之前應暫停幾秒來消減強力攻擊的有效
性。若可能的話,目標操作系統提供的機制可以用來完成上述建議。
攻擊者可能通過與伺服器建立多個、並行的控制連接破壞上述的機制。為了搏擊多個並
行控制連接的使用,伺服器可以限制控制連接的最大數目,或探查會話中的可疑行為並在以
後拒絕該站點的連接請求。然而上述兩種措施又引入了「服務否決」攻擊,攻擊者可以故意
的禁止有效用戶的訪問。
標准FTP[PR85]在明文文本中使用「PASS」命令發送密碼。建議FTP客戶端和伺服器
端使用備用的鑒別機制,這種鑒別機制不會遭受竊聽。比如,IETF公共鑒別技術工作組開
發的機制[HL97]。
6.私密性
在FTP標准中[PR85]中,所有在網路上被傳送的數據和控制信息(包括密碼)都未被
加密。為了保障FTP傳輸數據的私密性,應盡可能使用強壯的加密系統。在[HL97]中定義
了一個這樣的機制。
7.保護用戶名
當「USER」命令中的用戶名被拒絕時,在FTP標准中[PR85]中定義了相應的返回碼530。
而當用戶名是有效的但卻需要密碼,FTP將使用返回碼331。為了避免惡意的客戶利用USER
操作返回的碼確定一個用戶名是否有效,建議伺服器對USER命令始終返回331,然後拒絕
對無效用戶名合並用戶名和密碼。
8.埠盜用
許多操作系統以遞增的順序動態的分配埠號。通過合法的傳輸,攻擊者能夠觀察當前
由伺服器端分配的埠號,並「猜」出下一個即將使用的埠號。攻擊者可以與這個埠建
立連接,然後就剝奪了下一個合法用戶進行傳輸的能力。或者,攻擊者可以盜取給合法用戶
的文件。另外,攻擊者還可能在從授權用戶發出的數據流中插入偽造的文件。通過使FTP
客戶和伺服器隨機的給數據連接分配埠號,或者要求操作系統隨機分配埠號,或者使用
與系統無關的機制都可以減少埠盜用的發生。
9.基於軟體的安全問題
本文檔的重點是和協議相關的安全問題。另外還有一些成文的FTP安全問題是由於不
完善的FTP實現造成的。雖然這種類型的問題的細節超出本文檔的范圍,還是有必要指出
以下那些過去曾被誤用,今後的實現應該慎重考慮的FTP特性。
? 匿名FTP
匿名FTP服務使客戶端用最少的證明連接到FTP伺服器分享公共文件。如果這樣的用
戶能夠讀系統上所有的文件或者能建立文件,那麼問題就產生了。[CERT92:09] [CERT93:06]

? 執行遠程命令
FTP擴展命令"SITE EXEC"允許客戶端執行伺服器上任意的命令。這種特性顯然需要非
常小心的實現。已經有幾個成文的例子說明攻擊者利用FTP「SITE EXEC」命令可以破壞服
務器的安全性。[CERT94:08] [CERT95:16]

? 調試代碼
前面的一些跟FTP有關危及安全的問題是由於置入了調試特性的軟體造成的。
[CERT88:01]

本文建議有這些功能的FTP伺服器的實現者在發布軟體之前參閱所有的CERT有關這
些問題的攻擊以及類似機制的忠告。
10.結論
使用以上建議可以減少和FTP伺服器有關的安全問題的發生,而不用刪除其功能。

10. FTP 使用的是什麼協議

FTP(File Transfer Protocol,文件傳輸協議) 是 TCP/IP 協議組中的協議之一。FTP協議包括兩個組成部分。

1、FTP伺服器。

2、FTP客戶端。

其中FTP伺服器用來存儲文件,用戶可以使用FTP客戶端通過FTP協議訪問位於FTP伺服器上的資源。在開發網站的時候,通常利用FTP協議把網頁或程序傳到Web伺服器上。

(10)ftp連接跟蹤擴展閱讀

FTP屏蔽了各計算機系統的細節,因而適合在異構網路中任意計算機之間傳送文件。FTP只提供文件傳送的一些基本服務,它使用TCP可靠地運輸服務,FTP主要功能是減小或消除在不同系統下處理文件的不兼容性。

FTP使用客戶端-伺服器模型,一個FTP伺服器進程可以為多個客戶進程提供服務。FTP伺服器有兩大部分組成:一個主進程,負責接受新的請求;還有若干從屬進程,負責處理單個請求。