1.3 Linux网络配置文件


在Linux系统中,网络功能的运行必须借助许多配置文件的内容,虽然目前有许多工具或程序可用来针对这些文件的内容进行设置,但是站在系统维护的角度上,了解这些文件的内容是绝对必须的。因为无法保证所有的命令或程序随时可用,如果命令或程序的执行产生问题时,就必须回到原始的配置文件中手动进行修改或维护。因此在这个小节中,笔者选择了与网络管理有关,且较为重要的网络配置文件来加以说明,希望读者能了解每个配置文件的功能及使用时机,以利管理工作的顺利进行。
主机地址配置文件—/etc/hosts
Linux系统默认的通信协议为TCP/IP,而TCP/IP网络上的每台主机都是以一个惟一的号码来代表它的地址,这个号码就称为IP地址。不论主机位于局域网络或是Internet中,只要是使用TCP/IP作为通信时的协议,主机间就必须依靠IP地址来互相识别。
目前的IP地址是采取IPv4IP第4版)的标准,因此每个IP地址都是以xxx.xxx.xxx.xxx的形式组成,其中xxx的有效范围为0~255,例如192.168.0.1。因为这个地址是由InterNIC指定,所以可以保证每一台主机IP都是惟一的,不会产生重复。
IP地址虽然可以准确地识别每一台主机,但是它也产生了一个问题—地址记忆的困难,因为对用户来说,一些数字的组合实在很难与特定的主机产生联想。
如果采用一些一般人较为易记的名称,例如ns1.fc5linux.com主机名称)或ns1别名),应该可以降低用户忘记主机地址的机会。因此,在TCP/IP网络上出现了一个解决方法—利用一个中介机制进行IP地址和易记名称的转换名称解析)。
通常在TCP/IP网络上进行IP地址和易记名称的转换有两种方法:使用DNS服务器或是/etc/hosts文件。DNS服务器在名称解析的功能上较为强大,但是因为牵涉的内容很广,所以本书将在第11章中讨论。
虽然/etc/hosts文件的解析功能不如DNS,但因为它也可以提供名称解析的功能,而且设置内容简单,所以本书在此将针对它的内容加以说明。以下是一个/etc/hosts文件的示例:

# Do not remove the following line,or various programs
# that require network functionality will fail.
127.0.0.1  localhost.localdomain     localhost
192.168.0.1  ns1.fc5linux.com    ns1
上述是一个简单的示例,其中的记录可由系统自动产生,或是自行加入。这些记录的格式如下:
IP地址   主机名称   别名
在将IP地址、主机名称或别名等信息输入/etc/hosts文件后,就可以使用主机名称或别名来取代原有的IP地址。举例来说,假设一台Web服务器的IP地址为192.168.0.1,而它的主机名称为www.fc5linux.com,别名为www,则在本机浏览器上输入以下的任何地址都可连接到这台Web服务器:
ナhttp://192.168.0.1局域网络和Internet中使用)
ナhttp://www.fc5linux.com局域网络和Internet中使用)
ナhttp://www仅限于局域网络中使用)
网络服务信息文件/etc/services
/etc/services是记录各种不同网络服务的信息文件,在这个文件中的每一条记录都表示一种Internet服务,它的格式如下:
服务名称   连接端口号/通信协议名称   [别名]   [批注]
这个文件允许使用连接端口号/通信协议名称的格式来对应特定的服务名称,而有些程序必须使用这个文件来执行特定的功能。
例如xinetd是一个功能强大的程序,它专门管理Internet上连接的请求,而当用户请求远程签入以及文件传输协议时,它便会自动检查/etc/services文件,并且找出对应的程序,以满足用户的请求。以下是/etc/services文件的部分内容示例:

tcpmux  1/tcp   # TCP port service multiplexer
tcpmux  1/udp         # TCP port service multiplexer
rje   5/udp         # Remote Job Entry
echo  7/tcp
echo  7/udp
discard  9/tcp     sink null
discard  9/udp          sink null
…………
基本上每个服务都必须使用惟一的连接端口号/通信协议名称,因此如果两个服务需使用同一个连接端口号,则它们必须使用不同的通信协议。相同地,如果两个服务使用同一种通信协议,则它们使用的连接端口号一定不同。
顺便提一下,所有可用的连接端口号都介于0 ~ 65535之间,按照功能及使用上的不同,可分为3种范围:
?在0~1023范围之间的连接端口号专供各类服务器使用,也称为Well-Known Ports。
?除了专供服务器使用的连接端口号外,所有已在Internet上公开的连接端口号都使用1024~49151范围内的数。
?其他提供动态或私人的连接端口号,可以使用49152~65535范围内的数。
理论上可以随意修改文件中的连接端口号,例如将原来HTTP使用的80/tcp修改为81/tcp,或是保留原来的连接端口号而使用其他名称。但是笔者并不建议这样做,因为随意修改默认的内容,只可使知道修改内容的客户端进行连接,而绝大部分用户都会被排除在外。
xinetd与/etc/xinetd.config文件
其实xinetd的角色就等于较早期版本Linux使用的inetd,它负责接受来自Internet客户端的请求,并且将客户端的请求传送到正确的服务程序,但事实上xinetd并没有执行特定的服务。
以这种模式处理客户端请求的好处是,xinetd负责监听来自网络上的请求信息,而服务程序因为有xinetd帮忙监听来自客户端的请求,所以不需在每次启动时加载大量的程序,避免系统资源的浪费。
不过在默认的情形下,系统并不会安装xinetd服务,因此在此需先进行安装,首先点击“应用程序”/“Add/Remove Software”选项,系统便会开始获取目前已安装与尚未安装的软件包,之后打开“软件包管理者”窗口,如图1-5所示。
图1-5 “软件包管理者”窗口
接着点击“软件包管理者”窗口左侧的“Search”选项,并在上方字段输入“xinetd”再按“搜索”按钮进行软件包的查找,之后选择查找结果窗口中的“xinetd”项目,接着按“应用”按钮进行软件包安装,如图1-6所示。
图1-6 选择“xinetd”项目
在上一个窗口按下“应用”按钮后,系统即会出现软件包安装确认窗口,此处需按“继续”按钮进行安装,如图1-7所示。
图1-7
接下来安装程序询问是否导入密钥,以验证安装软件包的正性确,按“导入密钥”按钮继续,如图1-8所示。
图1-8
如果一切无误,在导入密钥后,系统即开始进行xinetd软件包的安装,并在安装后出现安装成功的信息,如图1-9所示。
图1-9

在软件成功安装后,必须经过启动的步骤,才可顺利使用此软件包。如果要启动xinetd,首先点击“桌面”/“管理”/“服务”选项,接着在打开的“服务配置”窗口中,点击窗口左侧的“xinetd”选项,之后再按上方的“开始”按钮启动xinetd服务,如图1-10所示。
图1-10启动xinetd服务
在安装xinetd后,为了说明xinetd的运行,我们首先打开xinetd的配置文件—/etc/ xinetd.conf,它的内容如下:
# Simple configuration file for xinetd
#
# Some defaults,and include /etc/xinetd.d/
defaults
{
instances     = 60
log_type     = SYSLOG authpriv
log_on_success    = HOST PID
log_on_failure    = HOST
cps     = 25 30
}
includedir /etc/xinetd.d
以下是在/etc/xinetd.conf文件中默认的项目与说明:
?instances:指单个服务在同一时间内允许客户端连接请求的最高上限,如果设为Unlimited则表示没有连接限制,这个设置有助于抵挡DoS的攻击。
注意:拒绝服务攻击Denial of Service,DoS)是一种入侵程序,它可让计算机无法执行某些动作或无故死机。与一般黑客入侵不同的是,DoS攻击并不会让计算机内部数据遭到窃取或篡改,而是以瘫痪主机为目的。Dos通常以两种方式入侵计算机:ICMP侵略与OOBOut Of Band)侵略,前者会持续大量不断地送出无用信息到特定主机中,严重拖缓计算机速度而导致死机。后者则会在入侵者得知某台计算机的IP地址后,通过Internet传送命令到该计算机,导致出现蓝色死机画面。
?log_type:此项目可用来设置日志记录文件输出的位置,“SYSLOG”表示通过syslog服务来将日志记录输出到系统日志文件,而authpriv则表示日志记录的级别。
?log_on_success:表示记录成功连接时的信息,“HOST PID”是指记录远程主机信息和程序的PIDProcess ID)。
?log_on_failure:表示记录连接失败时的信息,“HOST”是指仅记录远程主机的信息。
?cps:表示允许外部主机连接到内部网络的速度,它包含两个参数,第1个参数是指每秒可处理的连接数目,如果连接到内部网络的速度高于这个值,则此服务会暂时停止;第2个参数是指服务暂时停止后,系统重新启动服务前的等待秒数。
?includedir:指定所有使用xinetd服务的Daemon配置文件目录位置,其实理论上可以将全部的设置内容都定义在/etc/xinetd.conf文件中,但是以不同文件来设置不同的Daemon,更可提高管理上的效率,以及避免错误的发生。
特别注意一点,在每次修改xinetd的设置后,请重新启动xinetd才可使设置生效,启动的命令如下:
[root@ns1 ~]# /etc/rc.d/init.d/xinetd restart
正在停止 xinetd: 确定  ]
正在启动 xinetd: 确定  ]
允许与拒绝地址配置文件—/etc/hosts.allow和/etc/hosts.deny
除了将来自客户端的请求转发到指定的服务程序外,xinetd还具有另一种功能,那就是集中式的管理客户端连接,这主要是根据两个文件内容:/etc/hosts.allow和/etc/hosts.deny。
如果希望某些计算机可以访问服务器中由/usr/sbin/tcpd提供的Internet服务,可以在/etc/hosts.allow文件中定义允许访问的计算机。反之,如果不希望特定计算机可以访问服务器中的Internet服务,应该在/etc/hosts.deny文件中定义拒绝访问的主机。
而在xinetd接受来自客户端的服务请求后,它会先检查/etc/hosts.allow文件的内容,看看是否允许此客户端的访问,如果允许则会将此请求转发到指定的服务程序,同时忽略/etc/hosts.deny配置文件的检查。
如果在/etc/hosts.allow文件中没有此客户端被允许的记录,接着xinetd会继续检查/etc/hosts.deny文件的内容,如果该客户端的数据出现在此文件中,则此请求将被拒绝,但如果没有出现,则此客户端的请求仍会被转发到指定的服务程序。图1-11中给出了处理客户端请求的审核流程。
图1-11   处理客户端请求的审核流程
因为xinetd在审核客户端的连接请求时,只要找到符合的记录就不再往下检查,所以如果将一个记录同时记录在/etc/hosts.allow和/etc/hosts.deny文件中,xinetd仍然会在检查/etc/hosts.allow文件时就允许该客户端的请求,所以/etc/hosts.deny文件并不检查。
基于以上的理由,通常我们会将需要提供服务的客户端记录在/etc/hosts.allow中,而在/etc/hosts.deny只写入简单的一行:
ALL:ALL
如果要增加额外的记录,可以使用以下的格式来进行设置:
Daemon:Address[:Option1 [:Option2]]
上述格式中的各个项目说明如下:
ナDAEMON:接受客户端请求后必须执行的服务程序名称,例如in.ftpd,或是使用“ALL”来代表所有服务程序名称。
ナAddress:用来代表某个客户端IP地址、主机名称、URL,或是某一范围的IP地址、主机名称或URL,但也可以是表1-1中的特殊字符串。
表1-1   Address的特殊字符串
字   符   串 说      明
ALL 表示所有地址
LOCAL 不带小数点的主机名称
UNKNOWN 代表所有名称或IP地址为未知的主机
KNOWN 代表所有名称及IP地址均为已知的主机
PARANOID 代表所有主机名称与IP地址不一致的主机
ナOption:这是一个选择性的项目,所以并不一定需要设置,而表1-2中是在Option字段常用的项目说明。
表1-2   Option字段常用项目说明
项    目 说    明
allow  不论hosts.allow与hosts.deny的设置是什么,符合此设置条件的客户端都可进行连接请求,同时这个选项的设置内容应该放在该行的最后
deny  不论hosts.allow与hosts.deny的设置是什么,符合此设置条件的客户端都不可进行连接请求,同时这个选项设置应该放在该行的最后
spawn  当收到连接请求时会自动启动一个Shell命令,此选项必须放在设置内容的最后
twist  当收到连接请求时会自动启动一个Shell命令,但当Shell命令执行完毕后,连接即告中断,此选项同样必须放在设置行的最后
网络配置文件—/etc/sysconfig/network
这个文件虽然很简单,但却是TCP/IP网络主机中的重要配置文件,以笔者的计算机为例,其默认的内容如下:
[root@ns1 ~]# vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=ns1.fc5linux.com

上述示例中的“NETWORKING=yes”表示打开Linux服务器的网络功能,建议保留此默认值,否则失去网络功能的Linux,似乎也是英雄无用武之地,而接下来的“HOST-NAME=ns1.fc5linux.com”则表示该主机的名称。
除了以上的设置项目外,还可以加入许多选项,表1-3是较常见的设置项目与说明。
表1-3  设置项目与说明
项    目 说    明
FORWARD_IPV4  设置这台服务器是否允许转发来自客户端的IPV4IP Version 4)分组
DOMAINNAME  此台服务器所属的域名
GATEWAYDEV  连接网关的设备,通常设为eth0表示以网卡当作网络连接设备,如果是拨号连接用户则设为ppp0
主机查找配置文件—/etc/host.conf
在先前的内容中我们曾提过,解析主机名称可以通过/etc/hosts文件或是DNS服务器来完成,但究竟是先利用哪一个来进行解析呢?这个答案就在/etc/host.conf文件中,因为此文件可以用来设置主机名称解析时的优先级。以下是这个文件的默认内容:
order hosts,bind
在上述的默认内容中只有一行记录,它表示主机名称解析的过程,先使用/etc/hosts文件的内容,如果无法成功进行解析,才会尝试使用DNS服务器。但是除了这个主要功能之外,/etc/host.conf文件还可以包含其他的配置信息,表1-4是所有可用的设置项目说明。
表1-4   设置项目说明
项    目 说    明
order  指定主机名称解析时的查找顺序
trim  指定默认的域名,可以在此指定一个或多个默认域名,例如fc5linux.com,如此一来,当查询某一主机信息时,只要输入主机名称,例如ns1,系统就会自动在主机名称后加上默认的域名,例如ns1.fc5linux.com。这种作法可以提高解析工作的效率,而且允许在此文件中加入多个默认域名。如果要添加名为fc5linux.com的默认域名,可以加入以下的记录:
 trim fc5linux.com

multi  是否在/etc/hosts文件中,允许同一主机名称对应到多个IP地址,例如192.168.250.23和192.168.200.10都对应到ns1.fc5linux.com。如果要打开这个功能,可加入以下的记录:
 multi on
nospoof  是否允许主机名称进行反向查询,这个功能可提高主机名称的准确性,如果要打开这个功能,可加入以下的记录内容:
 nospoof on
名称服务器查找顺序配置文件—/etc/resolv.conf
/etc/resolv.conf设置文件主要用来设置DNS服务器的相关选项,其中可供设置的常用项目有3种:
ナnameserver
设置名称服务器,此处所谓的名称服务器就是指DNS服务器,最多可设置3个namesever,而每条DNS服务器的记录需自成一行。在设置nameserver后,当主机进行名称解析时会先查询记录中的第一台nameserver,如果无法成功解析,则会继续询问下一台nameserver。
例如,如果希望客户端可以使用3台DNS服务器来进行名称解析的工作,则可输入以下的内容:
nameserver 0.0.0.0
nameserver 192.168.78.100
nameserver 192.168.78.111
注意:如果此台主机本身就是DNS服务器,则可以使用0.0.0.0。
ナdomain
指定主机所在的域名,此选项可以略过不设。
ナsearch
这是选择性的选项,此处允许使用空格键来分隔多个域名,而它的作用是在进行名称解析工作时,将此处设置的域名自动加在要查询的主机名称之后,最多可加入6个域名,但总长度不可超过256个字符。例如,设置3个不同的域名3个名称间需以空格键分隔)如下:
name1.com name2.com name3.com
当要查询的名称为host1时,系统会依次查询host1.name1.com、host1.name2.com、host1.name3.com。在查询过程中,如果成功得到结果,则解析工作即停止,但如果所有的查找都没有结果,则系统会响应查询失败的信息。
本书在此提供一个示例,它可用来添加3个查找域名:

search name1.com name2.com name3.com

回书目   上一节   下一节

相关内容