当前位置:首页 » 文件传输 » 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服务器有两大部分组成:一个主进程,负责接受新的请求;还有若干从属进程,负责处理单个请求。