◆ Linux网络基础
◆ Linux的TCP/IP网络配置
◆ 分级解析对Linux服务器的攻击
◆ 开源软件网络安全概述
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 Sockets和INET Sockets。它为不同的通信模型提供了两种传输协议,即不可靠的、基于消息的UDP传输协议和可靠的、基于流的TCP传输协议,并且都是在IP网际协议上实现的。INET Sockets是在以上两个协议及IP网际协议之上实现的,它们之间的关系如图1-1所示。

图1-1 Linux网络中的层
掌握OSI网络模型、TCP/IP模型及相关服务对应的层次对于理解Linux网络服务器是非常重要的。
表1-1是 TCP/IP四层模型和OSI七层模型对应表。我们把OSI七层网络模型和Linux TCP/IP四层概念模型对应,然后将各种网络协议归类。
表1-1 TCP/IP四层模型和OSI七层模型对应表
|
OSI七层网络模型 |
Linux TCP/IP四层概念模型 |
对应网络协议 |
|
应用层(Application) |
应用层 |
TFTP, FTP, NFS, WAIS |
|
表示层(Presentation) |
Telnet, Rlogin, SNMP, Gopher |
|
|
会话层(Session) |
SMTP, DNS |
|
|
传输层(Transport) |
传输层 |
TCP, UDP |
|
网络层(Network) |
网际层 |
IP, ICMP, ARP, RARP, AKP, UUCP |
|
数据链路层(Data Link) |
网络接口 |
FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
|
物理层(Physical) |
IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
网络接口把数据链路层和物理层放在一起,对应TCP/IP概念模型的网络接口。对应的网络协议主要是:Ethernet、FDDI和能传输IP数据包的任何协议。
网络层对应Linux TCP/IP概念模型的网际层,网络层协议管理离散的计算机间的数据传输,如IP协议为用户和远程计算机提供了信息包的传输方法,确保信息包能正确地到达目的机器。这一过程中,IP和其他网络层的协议共同用于数据传输,如果没有使用一些监视系统进程的工具,用户是看不到在系统里的IP的。网络嗅探器Sniffers是能看到这些过程的一个装置(它可以是软件,也可以是硬件),它能读取通过网络发送的每一个包,即能读取发生在网络层协议的任何活动,因此网络嗅探器Sniffers会对安全造成威胁。重要的网络层协议包括ARP(地址解析协议)、ICMP(Internet控制消息协议)和IP协议(网际协议)等。
传输层对应Linux TCP/IP概念模型的传输层。传输层提供应用程序间的通信。其功能包括:格式化信息流;提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认信息,如果分组丢失,必须重新发送。传输层包括TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议),它们是传输层中最主要的协议。TCP建立在IP之上,定义了网络上程序到程序的数据传输格式和规则,提供了IP数据包的传输确认、丢失数据包的重新请求、将收到的数据包按照它们的发送次序重新装配的机制。TCP 协议是面向连接的协议,类似于打电话,在开始传输数据之前,必须先建立明确的连接。UDP也建立在IP之上,但它是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,两者之间没有明确的连接。UDP不保证数据的传输,也不提供重新排列次序或重新请求的功能,所以说它是不可靠的。虽然UDP的不可靠性限制了它的应用场合,但它比TCP具有更好的传输效率。
应用层、表示层和会话层对应Linux TCP/IP概念模型中的应用层。应用层位于协议栈的顶端,它的主要任务是应用。一般是可见的,如利用FTP(文件传输协议)传输一个文件,请求一个和目标计算机的连接,在传输文件的过程中,用户和远程计算机交换的一部分是能看到的。常见的应用层协议有:HTTP,FTP,Telnet,SMTP和Gopher等。应用层是Linux网络设定最关键的一层。Linux服务器的配置文档主要针对应用层中的协议。TCP/IP模型各个层次的功能和协议如表1-2所示。
表1-2 TCP/IP模型各个层次的功能和协议
|
层次名称 |
功 能 |
协 议 |
|
网络接口 (Host-to-Net Layer) |
负责实际数据的传输,对应OSI参考模型的下两层 |
HDLC(高级链路控制协议) PPP(点对点协议) SLIP(串行线路接口协议) |
|
网际层 (Inter-network Layer) |
负责网络间的寻址 数据传输,对应OSI参考模型的第三层 |
IP(网际协议) ICMP(网际控制消息协议) ARP(地址解析协议) RARP(反向地址解析协议) |
|
传输层 (Transport Layer) |
负责提供可靠的传输服务,对应OSI参考模型的第四层 |
TCP(控制传输协议) UDP(用户数据报协议) |
|
应用层 (Application Layer) |
负责实现一切与应用程序相关的功能,对应OSI参考模型的上三层 |
FTP(文件传输协议) HTTP(超文本传输协议) DNS(域名服务器协议) SMTP(简单邮件传输协议) NFS(网络文件系统协议) |
说明 TCP/IP与OSI最大的不同在于OSI是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络协议。
Telnet程序提供远程登录功能。
文件传输协议(FTP)允许用户将一个系统上的文件复制到另一个系统上。
简单邮件传输协议(SMTP)用于传输电子邮件。
Kerberos是一个受到广泛支持的安全性协议。
域名服务器协议(DNS)能使一台设备具有的普通名字转换成某个特定的网络地址。
简单网络管理协议(SNMP)把用户数据报协议(UDP)作为传输机制,它使用和TCP/IP不同的术语,TCP/IP用客户端和服务器,而SNMP用管理器(Manager)和代理(Agent),代理提供设备信息,而管理器管理网络通信。
网络文件系统协议(NFS)是由SUN Microsystems公司开发的一套协议,可使多台计算机能透明地访问彼此的目录。
远程过程调用(RPC)是使应用软件能与另一台计算机(服务器)通信的一些函数。
普通文件传输协议(TFTP)是一种缺乏任何安全性的、非常简单落后的文件传输协议。
传输控制协议(TCP/IP中的TCP部分)是一种数据可靠传输的通信协议。
网际协议(IP)负责在网络上传输由TCP/UDP装配的数据包。
网际控制消息协议负责根据网络上设备的状态发出和检查消息,它可以将某台设备的故障通知到其他设备。
TCP和UDP采用16b的端口号来识别应用程序。那么这些端口号是如何选择的呢?
服务器一般都是通过知名端口号来识别的。例如,对于TCP/IP实现来说,每个FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(普通文件传输协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用知名的1~1 023之间的端口号。这些知名端口号由Internet号分配机构(Internet Assigned Numbers Authority, IANA)来管理。到1992年为止,知名端口号介于1~255之间。256~1 023之间的端口号通常都是由UNIX系统占用,以提供一些特定的UNIX服务,也就是说,提供一些只有UNIX系统才有的,而其他操作系统可能不提供的服务。现在IANA管理1~1 023之间所有的端口号。
Internet扩展服务与UNIX特定服务之间的一个差别就是telnet和rlogin,它们二者都允许通过计算机网络登录到其他主机上。telnet是采用端口号为23的TCP/IP标准,且几乎可以在所有操作系统上进行实现。相反,rlogin最开始时只是为UNIX系统设计的(尽管许多非UNIX系统现在也提供该服务),因此在20世纪80年代初,它的端口号为513,客户端通常对它所使用的端口号并不关心,只须保证该端口号在本机上是唯一的即可。客户端口号又称做临时端口号(即存在时间很短暂),这是因为它通常只是在用户运行该客户程序时才存在,而服务器则只要主机开着,其服务就运行。
大多数TCP/IP实现给临时端口分配1 024~5 000之间的端口号。大于5 000的端口号是为其他服务器预留的(Internet上并不常用的服务)。我们可以在后面看见许多给临时端口分配端口号的例子。大多数Linux系统的文件/etc/services都包含了人们熟知的端口号。为了找到telnet服务,可以运行以下语句:“grep telnet /etc/services”。表1-3是一些常用TCP服务和端口。
表1-3 常用TCP服务和端口
|
TCP 端口 |
服 务 名 |
功 能 |
|
7 |
echo |
echo字符(用于测试) |
|
9 |
discard |
丢弃字符串(用于测试) |
|
13 |
daytime |
日期服务 |
|
19 |
chargen |
字符生成器 |
|
21 |
ftp |
文件传输协议(FTP) |
|
22 |
ssh |
安全shell(虚拟终端或文件传输) |
|
23 |
telnet |
远程登录 |
|
25 |
smtp |
电子邮件 |
|
37 |
time |
时间服务 |
|
42 |
nameserve |
TCP名字服务 |
|
43 |
whois |
NIC whois服务 |
|
53 |
domain |
域名服务(DNS) |
|
79 |
finger |
用户信息 |
|
80 |
http |
WWW(万维网) |
|
110 |
pop3 |
邮局协议3(POP3) |
|
111 |
sunrpc |
SUN的远程过程调用(RPC) |
|
113 |
auth |
远程用户名认证服务 |
|
119 |
nntp |
网络新闻传输协议(NNTP) |
|
143 |
imap |
交互式邮件访问协议 |
|
443 |
https |
用SSL加密的HTTP |
|
512 |
exec |
在远程UNIX主机上执行命令 |
|
513 |
login |
登录到远程UNIX主机(rlogin) |
|
514 |
shell |
从远程UNIX主机获得shell(rsh) |
续表
|
TCP 端口 |
服 务 名 |
功 能 |
|
515 |
printer |
远程打印 |
|
1080 |
socks |
SOCKS应用代理服务 |
|
2049 |
NFS |
TCP之上的NFS(NFS over TCP) |
|
6000~6001 |
X |
X Window系统 |
UDP为运行于同一台或不同机器之上的两个或多个程序之间传输数据包提供了简单的、不可靠的连接。“不可靠”意味着操作系统不保证每个发出的包都能到达,也不保证包能够按序到达。不过UDP是尽力传输的,在LAN中UDP通常能达到100%的可靠性。UDP的优点在于它比TCP的开销少,较少的开销使得基于UDP的服务可以用TCP 10倍的吞吐量传输数据。
UDP主要用于SUN的NFS、NIS、主机名解析和传输路由信息。对于有些服务而言,偶然丢失一个包并不会带来太大的负面影响,因为它们会周期性地请求一个新包,或者那些包本身并不是很重要。这些服务包括who、talk和一些时间服务。表1-4是一些常用UDP服务和端口。
表1-4 常见UDP服务和端口
|
UDP端口 |
服 务 名 |
功 能 |
|
7 |
echo |
在另一个数据包中返回用户的数据 |
|
9 |
discard |
什么也不做 |
|
13 |
daytime |
返回日期 |
|
19 |
chargen |
字符生成器 |
|
37 |
time |
返回时间 |
|
53 |
domain |
域名服务(DNS) |
|
69 |
tftp |
普通文件传输协议 |
|
111 |
sunrpc |
SUN的远程过程调用(RPC) |
|
123 |
ntp |
网络时间协议(Network Time Protocol,NTP) |
|
161 |
snmp |
简单网络管理协议 |
|
512 |
biff |
新邮件提示 |
|
513 |
who |
收集关于用户登录到同一子网的其他机器的广播 |
|
514 |
syslog |
系统日志工具 |
|
517 |
talk |
发送talk请求 |
|
518 |
ntalk |
一个“新”的talk请求 |
|
520 |
route |
路由信息协议 |
|
533 |
netwall |
写每个用户的终端 |
|
2049 |
NFS |
网络文件系统协议(NFS) |
| 第1页: Linux网络基础 | 第2页: Linux的TCP/IP网络配置 |
| 第3页: 分级解析对Linux服务器的攻击 | 第4页: 开源软件网络安全概述 |
| 第5页: 本章小结 |