第1章Linux网络基础与Linux服务器的安全威胁本章要点Linux网络基础Linux的TCP/IP网络配置分级解析对Linux服务器的攻击开源软件网络安全概述1.1Linux网络基础1.1.1Linux网络结构的特点Linux在服务器领域已经非常成熟,其影响力日趋增大。Linux的网络服务功能非常强大,但是由于Linux的桌面应用和Windows相比还有一定差距,除了一些Linux专门实验室之外,大多数企业在应用Linux系统时,往往是Linux和Windows(或UNIX)等操作系统共存形成的异构网络。在一个网络系统中,操作系统的地位是非常重要的。Linux网络操作系统以高效性和灵活性而著称。它能够在PC上实现全部的UNIX特性,具有多任务、多用户的特点。Linux的组网能力非常强大,它的TCP/IP代码是最高级的。Linux不仅提供了对当前的TCP/IP协议的完全支持,也包括了对下一代Internet协议IPv6的支持。Linux内核还包括了IP防火墙代码、IP防伪、IP服务质量控制及许多安全特性。Linux的网络实现是模仿FreeBSD的,它支持FreeBSD的带有扩展的Sockets(套接字)和TCP/IP协议。它支持两个主机间的网络连接和Sockets通信模型,实现了两种类型的Sockets:BSD(BerkeleySoftwareDistribution,伯克利软件套件是,Unix的衍生系统)Sockets和INETSockets。它为不同的通信模型提供了两种传输协议,即不可靠的、基于消息的UDP传输协议和可靠的、基于流的TCP传输协议,并且都是在IP网际协议上实现的。INETSockets是在以上两个协议及IP网际协议之上实现的,它们之间的关系如图1-1所示。(点击查看大图)图1-1Linux网络中的层掌握OSI网络模型、TCP/IP模型及相关服务对应的层次对于理解Linux网络服务器是非常重要的。1.1.2TCP/IP四层模型和OSI七层模型表1-1是TCP/IP四层模型和OSI七层模型对应表。我们把OSI七层网络模型和LinuxTCP/IP四层概念模型对应,然后将各种网络协议归类。表1-1TCP/IP四层模型和OSI七层模型对应表OSI七层网络模型LinuxTCP/IP四层概念模型对应网络协议应用层(Application)应用层TFTP,FTP,NFS,WAIS表示层(Presentation)Telnet,Rlogin,SNMP,Gopher会话层(Session)SMTP,DNS传输层(Transport)传输层TCP,UDP网络层(Network)网际层IP,ICMP,ARP,RARP,AKP,UUCP数据链路层(DataLink)网络接口FDDI,Ethernet,Arpanet,PDN,SLIP,PPP物理层(Physical)IEEE802.1A,IEEE802.2到IEEE802.111.网络接口网络接口把数据链路层和物理层放在一起,对应TCP/IP概念模型的网络接口。对应的网络协议主要是:Ethernet、FDDI和能传输IP数据包的任何协议。2.网际层网络层对应LinuxTCP/IP概念模型的网际层,网络层协议管理离散的计算机间的数据传输,如IP协议为用户和远程计算机提供了信息包的传输方法,确保信息包能正确地到达目的机器。这一过程中,IP和其他网络层的协议共同用于数据传输,如果没有使用一些监视系统进程的工具,用户是看不到在系统里的IP的。网络嗅探器Sniffers是能看到这些过程的一个装置(它可以是软件,也可以是硬件),它能读取通过网络发送的每一个包,即能读取发生在网络层协议的任何活动,因此网络嗅探器Sniffers会对安全造成威胁。重要的网络层协议包括ARP(地址解析协议)、ICMP(Internet控制消息协议)和IP协议(网际协议)等。3.传输层传输层对应LinuxTCP/IP概念模型的传输层。传输层提供应用程序间的通信。其功能包括:格式化信息流;提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认信息,如果分组丢失,必须重新发送。传输层包括TCP(TransmissionControlProtocol,传输控制协议)和UDP(UserDatagramProtocol,用户数据报协议),它们是传输层中最主要的协议。TCP建立在IP之上,定义了网络上程序到程序的数据传输格式和规则,提供了IP数据包的传输确认、丢失数据包的重新请求、将收到的数据包按照它们的发送次序重新装配的机制。TCP协议是面向连接的协议,类似于打电话,在开始传输数据之前,必须先建立明确的连接。UDP也建立在IP之上,但它是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,两者之间没有明确的连接。UDP不保证数据的传输,也不提供重新排列次序或重新请求的功能,所以说它是不可靠的。虽然UDP的不可靠性限制了它的应用场合,但它比TCP具有更好的传输效率。4.应用层应用层、表示层和会话层对应LinuxTCP/IP概念模型中的应用层。应用层位于协议栈的顶端,它的主要任务是应用。一般是可见的,如利用FTP(文件传输协议)传输一个文件,请求一个和目标计算机的连接,在传输文件的过程中,用户和远程计算机交换的一部分是能看到的。常见的应用层协议有:HTTP、FTP、Telnet、SMTP和Gopher等。应用层是Linux网络设定最关键的一层。Linux服务器的配置文档主要针对应用层中的协议。TCP/IP模型各个层次的功能和协议如表1-2所示。表1-2TCP/IP模型各个层次的功能和协议层次名称功能协议网络接口(Host-to-NetLayer)负责实际数据的传输,对应OSI参考模型的下两层HDLC(高级链路控制协议)PPP(点对点协议)SLIP(串行线路接口协议)网际层(Inter-networkLayer)负责网络间的寻址数据传输,对应OSI参考模型的第三层IP(网际协议)ICMP(网际控制消息协议)ARP(地址解析协议)RARP(反向地址解析协议)传输层(TransportLayer)负责提供可靠的传输服务,对应OSI参考模型的第四层TCP(控制传输协议)UDP(用户数据报协议)续表层次名称功能协议应用层(ApplicationLayer)负责实现一切与应用程序相关的功能,对应OSI参考模型的上三层FTP(文件传输协议)HTTP(超文本传输协议)DNS(域名服务器协议)SMTP(简单邮件传输协议)NFS(网络文件系统协议)说明TCP/IP与OSI最大的不同在于OSI是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络协议。1.1.3TCP/IP提供的主要用户应用程序1.Telnet程序Telnet程序提供远程登录功能。2.文件传输协议文件传输协议(FTP)允许用户将一个系统上的文件复制到另一个系统上。3.简单邮件传输协议简单邮件传输协议(SMTP)用于传输电子邮件。4.Kerberos协议Kerberos是一个受到广泛支持的安全性协议。5.域名服务器协议域名服务器协议(DNS)能使一台设备具有的普通名字转换成某个特定的网络地址。6.简单网络管理协议简单网络管理协议(SNMP)把用户数据报协议(UDP)作为传输机制,它使用和TCP/IP不同的术语,TCP/IP用客户端和服务器,而SNMP用管理器(Manager)和代理(Agent),代理提供设备信息,而管理器管理网络通信。7.网络文件系统协议网络文件系统协议(NFS)是由SUNMicrosystems公司开发的一套协议,可使多台计算机能透明地访问彼此的目录。8.远程过程调用远程过程调用(RPC)是使应用软件能与另一台计算机(服务器)通信的一些函数。9.普通文件传输协议普通文件传输协议(TFTP)是一种缺乏任何安全性的、非常简单落后的文件传输协议。10.传输控制协议传输控制协议(TCP/IP中的TCP部分)是一种数据可靠传输的通信协议。11.网际协议网际协议(IP)负责在网络上传输由TCP/UDP装配的数据包。12.网际控制消息协议网际控制消息协议负责根据网络上设备的状态发出和检查消息,它可以将某台设备的故障通知到其他设备。1.1.4端口号分配TCP和UDP采用16bit的端口号来识别应用程序。那么这些端口号是如何选择的呢?服务器一般都是通过知名端口号来识别的。例如,对于TCP/IP实现来说,每个FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(普通文件传输协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用知名的1~1023之间的端口号。这些知名端口号由Internet号分配机构(InternetAssignedNumbersAuthority,IANA)来管理。到1992年为止,知名端口号介于1~255之间。256~1023之间的端口号通常都是由UNIX系统占用,以提供一些特定的UNIX服务,也就是说,提供一些只有UNIX系统才有的,而其他操作系统可能不提供的服务。现在IANA管理1~1023之间所有的端口号。Internet扩展服务与UNIX特定服务之间的一个差别就是telnet和rlogin,它们二者都允许通过计算机网络登录到其他主机上。telnet是采用端口号为23的TCP/IP标准,且几乎可以在所有操作系统上进行实现。相反,rlogin最开始时只是为UNIX系统设计的(尽管许多非UNIX系统现在也提供该服务),因此在20世纪80年代初,它的端口号为513,客户端通常对它所使用的端口号并不关心,只须保证该端口号在本机上是唯一的即可。客户端口号又称做临时端口号(即存在时间很短暂),这是因为它通常只是在用户运行该客户程序时才存在,而服务器则只要主机开着,其服务就运行。大多数TCP/IP实现给临时端口分配1024~5000之间的端口号。大于5000的端口号是为其他服务器预留的(Internet上并不常用的服务)。我们可以在后面看见许多给临时端口分配端口号的例子。大多数Linux系统的文件/etc/services都包含了人们熟知的端口号。为了找到Telnet服务,可以运行以下语句:greptelnet/etc/services。表1-3是一些常用TCP服务和端口。表1-3常用TCP服务和端口TCP端口服务名功能7echoecho字符(用于测试)9discard丢弃字符串(用于测试)13daytim日期服务e19chargen字符生成器21ftp文件传输协议(FTP)22ssh安全shell(虚拟终端或文件传输)23telnet远程登录续表TCP端口服务名功能25smtp电子邮件37time时间服务42nameserveTCP名字服务43whoisNICwhois服务53domain域名服务(DNS)79finger用户信息80http(万维网)110pop3邮局协议3(POP3)111sunrpcSun的远程过程调用(RPC)113auth远程用户名认证服务119nntp网络新闻传输协议(NNTP)143imap交互式邮件访问协议443https用SSL加密的HTTP512exec在远程UNIX主机上执行命令513login登录到远程UNIX主机(rlogin)514shell从远程UNIX主机获得shell(rsh)515printer远程打印1080socksSOCKS应用代理服务2049NFSTCP之上的NFS(NFSoverTCP)6000~6001XXWindow系统UDP为运行于同一台或不同机器之上的两个或多个程序之间传输数据包提供了简单的、不可靠的连接。不可靠意味着操作系统不保证每个发出的包都能到达,也不保证包能够按序到达。不过UDP是尽力传输的,在LAN中UDP通常能达到100%的可靠性。UDP的优点在于它比TCP的开销少,较少的开销使得基于UDP的服务可以用TCP10倍的吞吐量传输数据。UDP主要用于SUN的NFS、NIS