第八章 用Linux构建Intranet Linux是Internet/Intranet上一个重要的服务器平台。Intranet指将Internet技术应 用在组织内部,主要目的是发布和整合公司内部的信息。通过Linux可以对 Internet/Intranet提供的服务如下: null 电子邮件服务 null 网页(web)服务 null FTP服务 null 网络新闻(news)服务 null 域名系统(DNS)服务 null DHCP、bootp通信协议 null 网络信息服务(NIS) null 认证服务 等等,本章后续内容将做详细介绍。 8.1 Apache服务器的安装与设置 Apache服务器是由Apache软件基金(http://www.apache.org)开发的一个功能 强大的web服务器,在当前因特网上,Apache是应用最广泛的web服务器。根据美 国的NetCraft在不久前的一份调查结果显示:Apache占据了互联网Web服务器市场 份额的59.51%,而Microsoft IIS只占据27.46%。 近年来,在开放源代码的鼓励下,再加上IBM公司承诺支持Apache,人们对 Apache的兴趣越来越广泛。1999年Apache软件基金会(Apache Software Foundation) 组成了一家非赢利的公司,这家公司为几个不同的开放式源代码软件开发项目(包 括Apache Web服务器项目)提供基金。 RedHat Linux9.0带有最新的Apache2.0服务器软件,但因为Apache的版本更新 速度往往快于RedHat,可以从Apache Web站点下载最新的Apache服务器源代码。 8.1.1 安装Apache服务器 在RedHat Linux安装程序中可以选择安装Apache服务器,如果没有选择,则 需要重新安装Apache服务器。安装Apache服务器有两种方法:一种是通过rpm包 (redhat package manage,一种Linux安装包)安装,另一种是通过源代码生成 Apache。 如果要安装Apache的一个新版本,在安装之前应关掉正在运行的Apache服务 器,这样才能确保安装过程中不出现任何问题。关闭Apache服务器的方法参考后面 的介绍。 1.通过rpm包安装Apache 156 第八章 用Linux构建Intranet 在RedHat Linux9.0安装光盘上可以找到Apache的rpm包,或者到RedHat的 FTP服务器和其镜像站点找到Apache的rpm包,在ftp://updates.redhat.com的FTP 站点也可以找到Apache最新版本的rpm包。 在得到一个Apache的rpm以后,可以通过下面的命令来进行rpm方式的安装: # rpm –Uvh apache.x.x.x.rpm 其中x.x.x为Apache的版本号,在RedHat Linux9.0里是2.0.40。 安装Apache的rpm包,将把文件安装在以下目录中: null /etc/httpd/conf 目录包含Apache的所有配置文件,其中包括httpd.conf和 httpd-mailman.conf,这些配置文件将在以后介绍。 null /etc/rc.d 目录中包含系统的启动脚本。Apache rpm安装了用于web服务器 的整套脚本,可以使用这些脚本以命令行启动和关闭这个服务器,同样它 们也会在计算机被异常终止、启动或者重新引导时自动启动和关闭服务器。 null /var/wwwRPM 安装有默认的服务器图标、CGI程序和HTML文件。可以 通过改变Apache的配置文件而采取其他方式来保存这些内容。 null /var/wwww/html/manual 在安装了Apache-manual rpm软件包时,这里有一 份Apache的说明文档,可以使用浏览器访问Apache服务器提供的web服 务找到这些文档。 null /usr/share/manRPM 包含有rpm的手册页。 null /usr/bin 可执行文件放在该目录下,包含可执行的服务器本身以及其他应 用程序。 null /usr/bin 一些来自于Apache软件包的实用程序被放置在该目录下,如 httpasswd程序,这个文件用来产生验证口令文件。 null /var/log/httpd 用来存放服务器日志的目录。默认情况下,有两个非常重要 的日志文件access_log和error_log。还可以通过自定义记录不同信息的日 志文件,这将在后面介绍。 2.编译源代码生成Apache 获得Apache的源代码有几种不同的方法。RedHat的发布版本包含有Apache源 代码的SRPM软件包,另外还可以在ftp://updates.redhat.com中找到最新的版本,也 可以从http://www.apache.org/ 下载Apache的源代码。 目前最新的Apache源代码包的版本是httpd-2.0.44.tar.gz,获取该压缩包之后, 将其解压缩到某个适当的目录中,方法如下: # tar zxvf httpd-2.0.44.tar.gz 解压缩之后创建一个httpd-2.0.44的目录,进入该目录。 #cd httpd-2.0.44 编译Apache服务器源代码,方法很简单,只要执行刚才创建目录中的./configure, 可以给命令提供一个prefix参数,指定安装目录。 #./configure –prefix=/data/apache 该命令将在/usr/src子目录下创建一个名为Configuration的文件,产生用于编译 157 计算机网络技术及应用 服务器代码的Makefile编译文件。 一旦编译完成,可编译服务器代码: # make 开始编译服务器代码,这一步可能需要几分钟,编译完成后可以安装Apache 服务器: # make install 到这一步,Apache服务器完成安装。 手工安装完成之后,所有的文件都放置在目录/data/apache下(用-prefix指定的 目录)的各个子目录中。下面是Apache使用的目录所组成的列表: null /data/apache/conf 目录包含了Apache的所有配置文件,包括httpd.conf, highperformance.conf,highperformance-std.conf和httpd-std.conf。 null /data/apache的cgi-bin,icons和htdocs目录下包含了CGI程序、默认图标 和默认的HTML文档。 null /data/apache/bin 可执行程序的存放目录。 null /data/apache/logs 服务器日志目录。 Apache服务器安装成功并且可以运行,但若要服务器按照某些要求运行,则要 配置这个服务器。 8.1.2 配置Apache服务器 Apache的配置文件是/etc/httpd/config/httpd.conf,该文件的默认配置在大多数情 况下能正常工作,但是在一些特定环境下则需要对它进行适当的修改,所以需要熟 悉httpd.conf的配置选项。 在需要配置Apache服务器时,首先编辑httpd.conf文件,然后使用reload,restart, stop和start等参数重新启动httpd进程使得该配置文件生效。如: # /etc/rc.d/init.d/httpd reload # /etc/rc.d/init.d/httpd stop 为了安全起见,在编辑httpd.conf文件之前,最好将原始的配置文件做备份。创 建一个备份之后,在编辑配置文件过程中出现故障时可以用备份文件覆盖被编辑的 文件以更正错误。 下面给出httpd.conf文件中常用的语法规范。 null ServerRoot 指定包含服务器的所有文件的最高目录。一般情况,该选项往 往被赋值为“/etc/httpd”。 null PidFile 命名记录服务器进程ID的文件名。默认状态下,Web服务器记录 自己的进程ID在/var/run/httpd.pid文件中。 null Timeout 以秒为单位定义服务器在通信过程中等待接收和传输的时间。在 大多数情况下,Timeout被设置为300秒。 null KeepAlive 设置服务器是否允许每个连接提出多个请求。KeepAlive可以 被用来防止一个客户消耗过多的服务器资源,在默认状态下,KeepAlive 158 第八章 用Linux构建Intranet 设置为关闭。如果KeepAlive被设置为打开,服务器将会变得非常繁忙, 而且很有可能崩溃。 null MaxKeepAliveRequests 设置每个永久连接所允许的最大请求数。Apache 组织推荐设置一个较大的数,这样能有效地提高服务器的性能。默认状态 下,MaxKeepAliveRequests被设置为100。 null KeepAliveTimeout 设置在一个请求已经被服务之后,服务器等待多久才关 闭这个连接。一旦在等待期间服务器收到一个连接,Timeout选项将取代该 参数。 null MinSpareServers和MaxSpareServers 使Apache动态地改变服务器进程数 目。服务器检查等候连接的服务器进程,如果空闲的服务器进程的数量超 过MaxSpareServers值,则杀掉一些进程;反之,如果等候的空闲服务器进 程小于MinSpareServers值,则创建进程。在默认配置情况下, MinSpareServers的值为5,MaxSpareServers的值为20。 null StartServers 设置在启动时创建的服务器进程的数量。既然服务器基于网 络流量的负荷来杀掉或创建服务器进程,所以可以不用改动该参数。 null MaxClients 设置服务器在运行时创建服务器进程的最大数目限制,也可以 说是客户连接的最大数目。默认状态下,该值为150。 null MaxRequestsPerChild 设置每个子服务器进程在死掉之前所能处理的最大 数目。设置MaxRequestsPerChild的主要原因是避免生存期过长的进程出现 内存泄漏,默认值为1000。 null Listen 确定服务器将监听那个端口,并从该端口接收连接请求。Web服务 器在没有安全通信保障的情况下设置为监听80端口,反之则监听443端口。 null Include 允许服务器运行时包含其他的配置文件。 null LoadModule 用来装载动态共享对象(DSO)模块。 null User和Group 设置用户ID和组ID,服务器将使用它们来处理请求。最 常用的是把User设置成nobody,把Group设置成nogroup。 null ServerAdmin 选项被设置为管理服务器的Web管理员的地址,它应该有一 个有效的E-mail地址,例如webmaster@zzei.net。把这个值设置为一个有 效的地址非常重要,当服务器出现问题时,可以把这个邮件地址返回给访 问者。 null Server Name 选项用来设置服务器的主机名和端口号。ServerName必须是 一个合法的且能够使用的DNS域名。如果指定一个ServerName,要确保 其IP地址和服务器名称都包含在/etc/hosts文件中。 null DocumentRoot 指定文档目录树的绝对路径,该路径是Apache提供文件的 顶级目录,其下包含了服务器用来处理请求的所有HTML文件。在默认状 态下,DocumentRoot被设置成为/var/www/html目录。 null Allow和Deny 前者指定请求者可以访问一个给定的目录,可以为all、IP 地址、域名以及网络地址。Allow被配置成为all意味着任何人都可以访问 159 计算机网络技术及应用 DocumentRoot指定的目录中的文件。而Deny正好相反。 null UserDir 定义与本地用户的主目录相对应的子目录,可以将个人的HTML 文档放入该目录。在默认状态下,子目录是public_html。 null DirectoryIndex 指定哪一个文件应该被作为目录的索引。在默认状态下 DirectoryIndex是index.html和index.html.var,服务器试图找到上面文件之 一,并返回找到的第一个。 以上是httpd.conf配置文件的一些常用的语法规范,若需要更详细的了解可以到 http://www.apache.org查阅。 8.1.3 启动和关闭Apache服务器 Apache服务器软件包httpd RPM创建了/etc/rc.d/init.d/httpd 启动脚本。通过 /sbin/service命令可以操作该启动脚本启动Apache服务器。用root用户登录系统, 执行如下命令: # /sbin/service httpd start 上面的命令启动Apache服务器,并且在每次系统重新启动时,Apache服务器 都被启动。 关闭Apache服务器,采用如下的命令: # /sbin/service httpd stop 命令restart则用来先关闭服务器,然后再启动服务器,命令如下: # /sbin/service httpd restart 如果编辑了httpd.conf配置文件,若要配置文件中的配置得以执行,又不想重新 启动服务器,可以使用reload命令: # /sbin/service httpd reload Apache作为目前使用最为广泛的web服务器之一。有关Apache的模块化,虚 拟主机(基于IP地址的虚拟主机和基于名字的虚拟主机),实现SSL协议,动态内 容(CGI和PHP等)等,可以参考有关资料。 8.2 FTP服务器的安装与设置 FTP的功能是从一台计算机将文件传送到另一台计算机,它与这两台计算机所 处的位置、联系方式以及使用的操作系统无关,只要这两台计算机支持FTP协议, 并能访问因特网。FTP在互联网中是一个非常重要的应用,通过它极大地方便了网 络资源的共享,同时也为很多网络服务提供了便利。 FTP服务器提供两类服务:一种是要求提供用户名和密码进行身份验证的帐号 型;另一种是以anonymous为用户名,以邮件地址为密码即可登录的“匿名FTP服 务”。 本节介绍如何在RedHat Linux 9.0系统中架设FTP服务器。 160 第八章 用Linux构建Intranet 8.2.1 安装vsftpd服务器 Vsftpd是目前Linux最好的FTP服务器工具之一,其中的vs就是“very secure” (很安全)的缩写,可见它的最大特点是安全,除此之外,它还具有体积小,可定 制性强,效率高等优点。 如果选择完全安装RedHat Linux9.0,则系统就默认安装vsftpd服务器。可以 在终端命令窗口输入以下命令进行验证: # rpm –qa | grep vsftpd 如果结果显示为“vsftpd-1.1.3-8”,则说明系统已经安装了vsftpd服务器。 如果安装RedHat Linux9.0时没有选择vsftpd服务器,则可以在图形窗口下单 击【主菜单】|【系统设置】|【添加删除应用程序】菜单项,在出现的【软件包管 理】对话框里选中“FTP服务器”选项,然后单击【更新】按钮,插入第三张安装 光盘,按照屏幕提示完成安装。 也可以直接插入第三张安装光盘,定位到/RedHat/RPMS下的 vsftpd-1.1.3-8.i386.rpm安装包,然后在终端命令窗口执行以下命令即可开始安 装。 # rpm –ivh vsftpd-1.1.3-8.i386.rpm 8.2.2 配置vsftpd服务器 在RedHat Linux9.0中,vsftpd共有3个配置文件,它们是: vsftpd.ftpusers 位于/etc目录下。指定哪些用户帐号不能访问FTP服务器。 vsftpd.usr_list 位于/etc目录下。该文件里的用户帐号在默认情况下也不能访问 FTP服务器,仅当vsftpd.conf配置文件里启用userlist_enable=No选项时才允许访问。 vsftpd.conf 位于/etc/vsftpd目录下。它是一个文本文件,可以用Kate、vi等文 本编辑工具对它进行修改,该文件定义用户登录控制、用户权限控制、超时设置、 服务功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。 (1)用户登录控制 anonymous.enable=YES,允许匿名用户登录。 no_anon_password=YES,匿名用户登录时不需要输入密码。 local_enable=YES,允许本地用户登录。 deny_email_enable=YES,可以创建一个文件保存某些匿名电子邮件的黑名单, 以防止这些人使用Dos攻击。 (2)用户权限控制 write_enable=YES,开启全局上传权限。 anon_upload_enable=YES,允许匿名用户具有上传权限,很明显,必须启用 write_enable=YES,才可以使用此项。 anon_mkdir_wirte_enable=YES,允许匿名用户有创建目录的权利。 chown_uploads=YES,启用此项,匿名上传文件的属主用户将改为别的用户帐 号,注意,这里建议不要指定root帐号为匿名上传文件的属主用户! 161 计算机网络技术及应用 chown_username=whoever,当启用chown_uploads=YES时,所指定的属主用户 帐号,此处的whoever用合法的用户帐号来代替。 chroot_list_enable=YES,用一个列表限定哪些本地用户只能在自己目录下活动, 如果chroot_local_user=YES,那么这个列表里指定的用户是不受限制的。 chroot_list_file=/etc/vsftpd.chroot_list,如果chroot_local_user=YES,则指定该列 表(chroot_local_user)的保存路径(默认是/etc/vsftpd.chroot_list)。 ascii_upload_enable=YES;ascii_download_enable=YES,默认情况下服务器假装 接受ASCII模式请求但实际上是忽略这样的请求,启用上述的两个选项可以让服务 器真正实现ASCII模式的传输。 注意:启用ascii_download_enable选项会让恶意远程用户在ASCII模式下用 “SIZE/big/file”这样的指令大量消耗FTP服务器的I/O资源。 (3)用户连接和超时选项 idle_session_timeout=600,设定默认的空闲超时时间,用户超过这段时间不动作 将被服务器踢出。 data_connection_timeout=120,设定默认的数据连接超时时间。 (4)服务器日志和欢迎信息 dirmessage_enable=YES,允许为目录配置显示信息,显示每个目录下面的 message_file文件的内容。 ftpd_banner=Welcome to FTP service,自定义FTP用户登录到服务器所看到的欢 迎信息。 xferlog_enable=YES,启用记录上传/下载活动日志功能。 xferlog_file=/var/log/vsftpd.log,自定义日志文件的保存路径和文件名,默认是 /var/log/vsftpd.log。 8.2.3 启动/重新启动/停止vsftpd服务 在终端命令窗口执行以下命令启动/重新启动/停止vsftpd服务: 启动vsftpd服务: # /etc/rc.d/init.d/vsftpd start 重新启动vsftpd服务: # /etc/rc.d/init.d/vsftpd restart 关闭vsftpd服务: # /etc/rc.d/init.d/vsftpd stop 确认vsftpd服务已经启动后,可以在任意一台Windows主机的DOS命令窗口 里输入“ftp FTPAddress”(用实际的FTP服务器IP地址或者域名代替FTPAddress), 注意用户名、密码都是ftp(ftp是匿名用户的映射用户帐号),例如: F: \ Peter > ftp FTPAddress Connected to FTPAddress 220(vsFTPd1.1.3) //vsftpd的响应请求 162 第八章 用Linux构建Intranet User(FTPAddress:(none)):ftp //输入用户帐号ftp 331 Please specify the password. Password: //输入密码ftp 230 Login successful. Have fun. ftp > Linux系统下的FTP服务器软件除了vsftpd外,wu-ftpd、proftpd、pureftpd等也 很出名,其中有不少支持数据库用户以及带宽和线程控制等功能,可以参考专门的 资料来完成各种功能的FTP服务器的配置。 8.3 DHCP服务器的安装与设置 DHCP是动态主机配置协议的简称,它由BOOTP协议演化而来,它们同属于 TCP/IP协议族,是目前以太网上使用较多的自动进行客户机TCP/IP配置的协议。 每个基于TCP/IP协议的网络主机都需要一个唯一确定的32位IP地址来与网络 通信,如果每台主机的IP地址都用手工设定的话,工作量将是不可想象的,能不能 让主机在启动时就被自动配置IP地址?这正是DHCP协议设计的初衷。一台配置了 DHCP的主机启动时强制发送一个有限地址广播(32位全为1的IP地址即 255.255.255.255)。当本地网络中的DHCP服务器收到广播后,根据收到的物理地址 在服务器上查找相应配置,并从IP地址池中发送某个IP地址及附加选项(如租用到 期时间等)给客户机。 8.3.1 DHCP服务器工作的前提条件 为了使DHCP服务器为windows主机服务,需要创建一个到地址255.255.255.255 的路由,加这条路由命令到/etc/rc.d/rc.local 使每次启动时自动执行。 # route add -host 255.255.255.255 dev eth0 如果报告错误消息:255.255.255.255:Unkown host 试着加下面的入口到 /etc/hosts 文件: #route add -host dhcp dev eth0 8.3.2 安装DHCP服务器软件 在RedHad Linux9.0中,默认情况下并没有安装DHCP服务器软件,可以在终 端窗口下用如下命令安装: # mount /mnt/cdrom # rpm -ivh /mnt/cdrom/RedHat/RPMS/dhcp-3.0pl1-23.i386.rpm 8.3.3 配置DHCP服务器 DHCP服务器的配置文件是/etc/dhcpd.conf,下面给出一个 DHCP配置文件的例 163 计算机网络技术及应用 子: Sample /etc/dhcpd.conf default-lease-time 1200; max-lease-time 9200; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.254; option domain-name-servers 192.168.1.1,192.168.1.2; option domain-name "zzei.net"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.100; range 192.168.1.150 192.168.1.200; } 将允许DHCP服务器分配两段IP地址范围给客户192.168.1.10-100和 192.168.1.150-200,如果客户不继续请求DHCP地址,则1200秒后释放IP地址,否 则最大允许租用的时间为9200秒。服务器发送下面的参数给DHCP客户机:用 255.255.255.0作为子网掩码,用192.168.1.255作为广播地址,用192.168.1.254作为 默认网关,用192.168.1.1 和192.168.1.2作为DNS服务器。 可以为某块网卡指定固定的IP地址。无论何时,这块网卡将总是从DHCP服务 器获得固定的IP地址,加下面的语句到/etc/dhcpd.conf: host haagen { hardware ethernet 08:00:2b:4c:59:23; fixed-address 192.168.1.222; } 8.3.4 启动DHCP服务器 启动DHCP服务器,可以在终端命令窗口输入: # /usr/sbin/dhcpd 或者用# ntsysv把DHCP服务自动启动。 如果想在eth1设备上启动 dhcpd,则: # /usr/sbin/dhcpd eth1 如果为了调试DHCP,则用: #/usr/sbin/dhcpd -d -f 8.3.5 测试DHCP服务 选择一台客户机,启动windows,将IP地址选择为自动获得,重新启动计算机 后,执行ipconfig/all命令检查DHCP服务是否设置正确。 164 第八章 用Linux构建Intranet 8.4 DNS服务器的安装与设置 8.4.1 DNS的实现机制 域名服务(DNS,Domain Name Server)在因特网上占有极其重要的地位。如 果没有DNS,因特网将非常难以使用,因为因特网用户只有记住提供服务的主机IP 地址才能访问它们,但这些数字十分难记。 DNS实际上是一个分布式的数据库系统,通常由两种实现机制:一种是用主机 表,另一种是采用域名服务器。 1.主机表机制 在互联网发展的初期,当时的主机数量不多,名字服务器是通过一张大型的主 机表来完成。这张表被称为NIC注册主机表,它保存所有已经注册的网站的主机名 和对应的IP地址。在Linux中,这个文件就是/etc/hosts,下面是一个/etc/hosts的例 子。 127.0.0.1 localhost.localdomain localhost 192.168.100.1 ns ns.zzei.net 第一列(如127.0.0.1)是IP地址,下面的是对应的主机名。 2.域名服务器系统 域名服务器系统一般采用域名服务器来实现域名到IP地址之间的转换,目前常 用的服务程序是BIND(Berkeley Internet Name Domain,伯克利网间名字域)。 DNS用域的层次结构来组织主机名。一个域是在某些方面相关站点的集合,因 为这些特定的主机组成了特定的网络(如校园网)。名字空间类似于一棵树,这棵树 的入口用一个点表示,称为根域。根据在层次结构中的位置,一个域可以分为顶级 域、第二级域、第三级域。 使用名字服务器的守护进程来实现IP地址同域名之间转换的功能。 DNS服务器可以被配置成3种形式:主名字服务器(master name server)、从名 字服务器(secondary name server)和缓存名字服务器(catching-only name server)。 null 主名字服务器 存储指定名字空间最初的和权威的域名解析信息,回答其 他名字服务器对该名字空间内名字解析的请求。 null 从名字服务器 也响应其他名字服务器的请求,不过必须在该名字服务器 认为是权威的名字空间范围之内。 null 缓存名字服务器 只提供域名到IP地址的解析,并且解析不具有权威性。 8.4.2 安装BIND服务器 1.安装前的准备工作 在RedHat Linux 9.0光盘的RPMS目录下有一个bind-9.2.1-9.i386.rpm包,执行 如下命令: # rpm –ivh bind-9.2.1-9.i386.rpm 165 计算机网络技术及应用 如果获得的BIND软件包是源代码bind-9.2.2.tar.gz,首先对该软件包进行解压 缩。命令是: # tar zxvf bind-9.2.2.tar.gz 使用ls命令会发现建立了一个新的目录bind-9.2.2,在这个目录中存放着所有编 译、安装BIND应用程序相关的文档。 接下来准备BIND程序的编译和安装工作,首先进行配置: # cd bind-9.2.2 # ./configure –prefix=/usr/local/bind 2.编译安装 使用make命令进行编译,首先使用clean关键字清除目录内一些不必要的文挡。 # make clean 再使用make的depend关键字改变设置文件Makefile内的相关设置。 # make depend 执行make命令对BIND程序进行编译。 # make 如果编译成功且没有错误产生,最后使用make install命令进行BIND程序安装。 # make install 3.启动和关闭 安装成功后,可以启动BIND,在RedHat Linux中执行如下命令: # service named start 如果要关闭BIND,执行如下命令: # /etc/init.d/named stop 8.4.3 配置DNS服务器 BIND服务器可被配置成几种不同的运行方式:缓存域名服务器、主域名服务 器、从域名服务器。缓存域名服务器通过向其它域名服务器查询,将查询结果存入 缓存。主域名服务器是判定域名的最终来源。主域名服务器同时也是传送到从域名 服务器的区传送(zone transfer)的源头,从域名服务器接收所有来自主域名服务器 的区信息。下面以zzei.net这个域名为例,在域名服务器ns.zzei.net上解析如表8-1 所示域名体系。 表8-1 域名体系表 服务器名 IP地址 功能 ns.zzei.net 192.168.100.1 域名服务器 www.zzei.net 192.168.100.2 名字为www主机 apps.zzei.net 192.168.100.3 名字为apps主机 mail.zzei.net 192.168.100.4 邮件服务器 BIND中几乎所有的配置项都是通过/etc/named.conf文件完成的。这个文件以纯 166 第八章 用Linux构建Intranet 文本的形式存放各服务器信息和区信息。下面是该文件的内容。 options { directory “/var/named”; forwarders { 202.102.224.68; }; pid-file "/var/run/named/named.pid"; allow-query { any; }; allow-transfer { any; }; }; zone “.” IN { type hint; file“named.ca”; }; zone “zzei.net” IN { type master; file“zzei.net”; }; zone “0.0.127.in-addr.arpa” IN { type master; file “named.local”; }; zone “100.168.192.in-addr.arpa” IN { type master; file “100.168.192”; }; “directory”一行指定named从“/var/named”目录下读取DNS数据文件,这 个目录用户可自行指定并创建,指定后所有的DNS数据文件都存放在此目录下。第 一个区登记项用来通知BIND在何处定位根服务器的信息。文件中的zone “zzei.net” 段是声明这是用于“zzei.net”域的主域名服务器,该域的数据从“/var/named/zzei.net” 文件中读取。文件中的zone “100.168.192.in-addr.arpa”段是指向映射IP地址 “192.168.100.*”到主机名的文件,该域的数据从“/var/named/100.168.192”文件中 读取。 “/var/named/zzei.net”的内容: @ IN SOA ns.zzei.net. root.zzei.net. ( 2003021002 ; serial 3600 ; refresh 900 ; retry 167 计算机网络技术及应用 1209600 ; expire 43200 ; default_ttl ) @ IN NS ns.zzei.net. @ IN MX 5 mail.zzei.net.com. ns IN A 192.168.100.1 www IN A 192.168.100.2 apps IN A 192.168.100.3 mail IN A 192.168.100.4 “/var/named/named.local”的内容: @ IN SOA localhost. root.localhost. ( 2003021002 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; default_ttl ) @ IN NS localhost. 1 IN PTR localhost. “/var/named/100.168.192”的内容: @ IN SOA ns.zzei.net. root.zzei.net. ( 2003021002 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; default_ttl ) @ IN NS ns.zzei.net. 2 IN PTR www.zzei.net. 3 IN PTR apps.zzei.net. 4 IN PTR mail.zzei.net. SOA是Start Of Authority的缩写,所有区文件都要以它打头。顺序号(serial) 使服务器能够记录所进行过的各次更新,守护进程最近一次启动后,只要数字出现 了增长,它就重新把信息读入到数据库中。接下来的四行以秒为单位处理刷新和超 时周期等。接着列出的是域名,这样BIND就知道是谁控制整个域。接着列出的是 168 第八章 用Linux构建Intranet MX记录,它使服务器知道当有邮件信息请求mail.zzei.net时应当发出什么信息。在 本例中,mail.zzei.net的优先级是5,可以列出多个MX记录作为邮件服务器的备份, 数字越小优先级越高,要注意的是还有一个相应的A记录给出了mail.zzei.net的IP 地址,这是必不可少的,这样DNS服务器就可以知道怎样根据域直接把邮件请求发 往何处。一个A记录仅仅是把IP地址赋给一个子域项,如www、maill、apps或者 ns,这些都必须用上面的格式录入,而且必须与一个IP地址相关联。比如说,当某 个用户请求www.zzei.net时,它将被指向该域所在的Web服务器的IP地址 192.168.100.2。 8.4.4 BIND服务器的维护 BIND服务器的配置是非常繁琐的,管理员要维护好一个域名服务器非常困难。 BIND软件组提供了大量的管理工具来减轻管理员的负担。如dig命令用来获得正确 的named.ca文件;rndc命令用来管理域名服务器的操作,如rndc reload用来装入新 的数据库;nslookup用来查询域名信息。域名服务器的维护关键在于数据库文件的 正确性,管理员要不断地更新维护,这不是一次配置工作所能完成的。系统管理员 为了域名服务器正确、高效地运行,需要日复一日地努力工作。有关BIND的更详 细的资料,请参考BIND的手册。 8.5 邮件服务器的安装与设置 本节将介绍如何在RedHat Linux 9.0上安装和配置邮件服务器。 邮件服务器至少涉及两个组件:MTA(Mail Transfer Agent,邮件传输代理)和 MUA(Mail User Agent,邮件用户代理)。 MTA是服务器端应用程序,它负责处理邮件的发送和接收,它的职责有: null 接收和传递由客户端发送的邮件。 null 为需要发送的邮件进行排队。 null 接收客户的邮件,并且将邮件放置在一个存储区域,直到用户连接服务器 取回邮件。 null 有选择的转发和拒绝转发接收到的邮件,该邮件的目的地为另一服务器。 MUA是用户使用的客户端程序,常见的MUA有Microsoft Outlook、Foxmail 和Netsacpe Messenger等。 8.5.1 Linux下常用的MTA 1.Sendmail 目前Internet上大多数的电子邮件系统是通过一个叫做Sendmail的MTA进行处 理的。Sendmail是存在时间最长且功能强大的MTA之一,但对大多数人来说非常难 学。有人曾经说过,只有编辑一个Sendmail的配置文件sendmail.cf,你才是一个真 正的UNIX系统管理员,如果编辑过两次,那你一定是发疯了。由此可见,直接编 169 计算机网络技术及应用 辑Sendmail的配置文件来配置Sendmail将非常困难(仅仅是介绍Sendmail的一本 书就长达1050页)。 值得庆幸的是,对大多数基本安装来说,默认配置的Sendmail运行良好,往往 只需要做很少的改动就能满足需要。同时对新版本的Sendmail,系统管理员不需要 直接编辑复杂的sendmail.cf,它提供了一个配置公用程序,此程序将根据许多简单 的宏文件来生成sendmail.cf。 Sendmail是RedHat Linux中默认的MTA,在默认状态下已经被安装。 2.Postfix Postfix是Sendmail的一个流行的替代MTA程序。Postfix的特点是速度快、安 全和容易管理,这些也是Sendmail的缺点。 具体来说,Postfix的特点有: null 免费 Postfix要面对广大的Internet用户,试图影响大多数的Internet上的 电子邮件系统,因此它是免费的。 null 速度快 Postfix在性能上大约比Sendmail快3倍。一部运行Postfix的PC 机每天可以收发上百万封邮件。 null 健壮 Postfix在重负荷之下仍然可以正常工作。当系统运行超出了可用的 内存或磁盘空间时,Postfix自动减少运行进程的数目。当处理的邮件数目 增长时,Postfix运行的进程不会跟着增加。 null 灵活、安全 Postfix由十多个小程序组成,每个程序完成特定的功能,可 以通过配置文件设置每个程序的运行参数。Postfix具有多层防御结构,可 以有效地抵御恶意入侵者。 3.Qmail 同Postfix一样,Qmail的目标是比Sendmail更容易使用,并且更快、更安全。 它的特点如下: null 安全 Qmail将Mail处理过程分为多个过程,尽力避免用root用户运行。 同时Qmail禁止对特权用户(root,deamon等)直接发信。 null 可靠 Qmail的直接投递保证E-mail在投递过程中不会丢失。同时支持新 的更可靠的信箱格式Maildir,保证系统在突然崩溃情况下不至破坏整个信 箱。 null 高效 运行于奔腾BSD/OS上,Qmail每天可以轻松的投递200000封信件。 null 简单 Qmail要比其他的Mail系统小得多。 8.5.2 安装Sendmail 如果是完全安装RedHat Linux 9.0,那么系统已经安装Sendmail-8.12.8-4服务器。 如果不能确定是否已经安装Sendmail,可以在终端命令窗口输入如下命令: # rpm –qa | grep sendmail 如果结果显示为“sendmail-8.12.8-4”,则说明系统已经安装Sendmail服务器。 如果安装RedHat Linux 9.0时没有选择Sendmail服务器,则可以在图形环境下单击 170 第八章 用Linux构建Intranet 【主菜单】|【系统设置】|【添加删除应用程序】菜单项,然后单击【更新】按钮, 插入第一张安装光盘按照屏幕提示完成Sendmail服务器的安装。 也可以直接插入第一张安装光盘,定位到/RedHat/RPMS目录下的 sendmail-8.12.8-4.i386.rpm安装包,然后在终端命令窗口执行以下命令即开始安装进 程: # rpm –ivh sendmail-8.12.8-4.i386.rpm # rpm –ivh sendmail-cf-8.12.8-4.i386.rpm # rpm –ivh sendmail-doc-8.12.8-4.i386.rpm 8.5.3 配置Sendmail Sendmail的配置十分复杂,它的配置文件是位于/etc/mail目录下的sendmail.cf。 由于sendmail.cf的语法深奥难懂,很少有人直接修改该文件对Sendmail服务器进行 配置。一般通过m4宏处理程序来生成所需的sendmail.cf文件。生成过程中需要一 个模板文件,系统默认在/etc/mail目录下有一个sendmail.mc模板文件,其大致内容 如下: divert(-1)dnl … … include(‘/usr/share/sendmail –cf/m4/cf.m4’)dnl VERSIONID(‘setup for Red Hat Linux’)dnl OSTYPE(‘linux’)dnl … … dnl # dnl define(‘SMART_HOST’,’smtp.your.provider’) dnl # define(‘confDEF_USER_ID’,’’8:12’’)dnl define(‘confTRUSTED_USER’,’smmsp’)dnl dnl define(‘confAUTO_REBUILD’)dnl … … 这里介绍sendmail.mc模板的语法组成: dnl:用来注释各项,同时dnl命令还用来标识一个命令的结束。 Divert(-1):位于mc模板文件的顶部,目的是让m4程序输出时更加精简一些。 OSTYPE(‘OperationSystemType’):定义使用的操作系统类型,显然这里应该用 linux代替OperationSystemType。 Define:定义一些全局设置,如果不定义,就使用默认值。 以上只是sendmail.mc的一些简单的语法解释,更多的参数含义及其配置信息可 以参见http://www.sendmail.org/。 通过修改sendmail.mc模板来达到定制sendmail.cf文件的目的。下面介绍创建 sendmail.cf文件的步骤: 171 计算机网络技术及应用 ⑴备份原有sendmail.cf文件 在终端命令窗口执行以下命令: # cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.bak ⑵生成sendmail.cf文件 根据sendmail.mc模板文件产生sendmail.cf配置文件,并导出到/etc/mail目录下: # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ⑶重启sendmail服务 # /etc/rc.d/init.d/sendmail restart 很显然,用m4宏编译工具创建sendmail.cf文件比较方便,而且不容易出错, 更可以避免某些带有安全漏洞或过时的宏所造成的破坏。 8.5.4 启动/重新启动/停止Sendmail服务 安装Sendmail服务器以后,最简单的启动方式是在终端命令窗口执行如下命令: # /etc/tc.d/init.d/sendmail start 出现以下结果,表明邮件服务器已经启动成功: Starting sendmail: [ok] Starting sm-client: [ok] 在终端命令窗口执行以下命令重新启动sendmail服务: # /etc/rc.d/init.d/sendmail restart 在终端命令窗口执行以下命令来停止sendmail服务: # /etc/rc.d/init.d/sendmail stop 8.5.5 为新用户开电子邮件帐号 在Linux里为新用户开设电子邮件帐号比较简单,只需在Linux系统里新增一 个用户即可。单击【开始】|【系统设置】|【用户和组群】菜单项,打开【Red Hat 用 户管理器】对话框,单击【添加用户】按钮,在出现的【创建新用户】对话框里指 定用户名、登录口令,如图8-1所示。 图8-1 创建新用户 假设我们添加了一个用户peter(密码也是peter),这样该用户就有了一个邮件 地址peter@YourDomain.com(此处的YourDomail.com用你自己域名代替)。 172 第八章 用Linux构建Intranet 上述过程也可以在终端窗口执行以下命令实现: # adduser peter –p peter 8.5.6 支持POP和IMAP功能 到现在为止,我们已经可以用Outlook Express等客户端工具发送邮件,或者登 录服务器使用mail、pine命令收取、管理邮件。但是还不能用Outlook Express等客 户端工具从服务器收取邮件,这是因为sendmail并不具备POP3(IMAP)的功能, 所以必须自己安装。 1.POP和IMAP服务器的安装 安装RedHat Linux 9.0时,可以选择安装POP和IMAP服务器,可以在终端命 令窗口执行以下命令进行验证: # rpm –qa imap 若屏幕显示“imap-2001a-18”,则说明系统已经安装POP和IMAP服务器。 如果没有安装,可以将第二张安装光盘放入光驱,然后在终端命令窗口执行以 下命令即可开始安装: # cd /mnt/cdrom/RedHat/RPMS # rpm –ivh imap-2001a-18.i386.rpm 由于RedHat Linux 9.0已经将POP和IMAP打包成一个单独的套件,安装好 imap-2001a-18.i386.rpm,就同时安装了这两个服务器。 2.启动POP和IMAP服务 要成功启动POP和IMAP服务器,首先要确定这些服务器存在于/etc/services 文件,并确保以下的服务器前面没有加上“#”注释(如果有,必须去除注释)。 Imap 143/tcp imap2 # Interim Mail Access Proto v2 Imap 143/udp imap2 Pop2 109/tcp pop-2 postoffice # POP version 2 Pop2 109/udp pop-2 Pop3 110/tcp pop-3 # POP version 3 Pop3 110/udp pop-3 修改好/etc/services文件,接下来还要对相应服务配置文件进行修改。 启动POP3服务:修改/etc/xinetd.d/ipop3文件,将其中的”disable=yes”改 为”disable=no”,保存该文件。最后必须重新启动xinetd程序来读取新的配置文件, 使得设定内容生效: # /etc/rc.d/init.d/xinetd reload 启动IMAP服务:修改/etc/xinetd/imap文件,将其中的”disable=yes”改 为”disable=no”,保存该文件。最后必须重新启动xinetd程序来读取新的配置文件, 使得设定内容生效: # /etc/rc.d/init.d/xinetd reload 以上内容设置好后,可以通过Outlook Express等客户端工具利用sendmail服务 173 计算机网络技术及应用 器进行邮件收发工作,由于邮件服务器在本地局域网,所以速度很快。 8.6 Linux下一个NAT配置的实例 网络地址转换(NAT)被广泛应用于各种类型的Internet接入方式中。原因很简 单,NAT不仅完美地解决了IP地址不足的问题,而且还能有效地避免来自网络外部 的攻击,隐藏并保护网络内部的计算机。 和NAT相关的内容有,防火墙、代理服务器、路由等概念,在Linux环境下实 现NAT的工具是RedHat Linux 9.0自带的防火墙工具包iptables。 下面给出某高校校园网NAT配置文件的实例。其中服务器安装RedHat Linux 9.0,外网网卡为eth0,IP地址为202.110.116.116,内网网卡是eth1,IP地址为 192.168.254.254。通过NAT技术,将校园网接入Internet。 #!/bin/sh # echo "Starting iptables rules..." echo 1 > /proc/sys/net/ipv4/ip_forward #/sbin/insmod ip_tables iptables -F INPUT iptables -F FORWARD iptables -F POSTROUTING -t nat iptables -P FORWARD DROP iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -s 192.168.254.0/24 -j MASQUERADE /sbin/insmod ip_conntrack_ftp /sbin/insmod ip_conntrack_irc /sbin/insmod ip_nat_ftp /sbin/insmod ip_nat_irc 将以上内容写到一个文本文件中,用chmod命令将其设置为可以执行,将其路 径放入/etc/rc.local,可以在系统启动后直接执行。 其中echo 1 > /proc/sys/net/ipv4/ip_forward是激活内核的IP转发功能,IP转发功 能可以使Linux服务器成为一个路由器。 以下三行 iptables -F INPUT 174 第八章 用Linux构建Intranet iptables -F FORWARD iptables -F POSTROUTING -t nat 清除INPUT,FORWARD和POSTROUTING键规则。 行iptables -P FORWARD DROP设置默认转发策略是DROP,当一个包被转发规 则应用但又不能应用任何一条转发规则时,则使用默认规则。 iptables -A FORWARD -s 192.168.254.0/24 -j ACCEPT这一行,转发本网段的计 算机到任何地方去的包。其中“192.168.254.0/24”表示内部网整个网段,这里的24 表明子网掩码的有效位数为24。 iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT 对从防火墙外部接口出去的请求包的回复允许接收。ESTABLISHED是指 TCP连接,RELATED是指主动FTP,ICMP ping请求等,当回复包到达时,实际上 是检查文件/proc/net/ip_conntrack看是否在里面,如果在表中,则不检查任何链,包 允许通过。 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.254.0/24 -j MASQUERADE 这一行打开IP伪装能力,也就是我们所说的NAT,从eth0出去的包被重写源地址 后伪装出去。这里要注意的是-o eth0,而不是-i eth0,在iptables中,从一个接口出 去的包用-o,进来的包用-i。 以下几行 /sbin/insmod ip_conntrack_ftp /sbin/insmod ip_conntrack_irc /sbin/insmod ip_nat_ftp /sbin/insmod ip_nat_irc 是加载相关模块,这里需要提醒的是,如果没有加载ip_nat_ftp有关的模块,当 内部用户访问外部的FTP资源时,因为FTP的主动和被动模式问题,不能使用。 习 题 八 1. 阅读httpd.conf文件,适当修改,观察服务器有什么变化? 2. 在文本模式下,启动、停止FTP服务器的命令是什么? 3. 写出用IE浏览器上传和下载文件的步骤。 4. DHCP服务主要解决什么样的问题? 5. 简述域名系统的主要功能。 6. DNS服务器用哪个端口提供服务呢?用什么协议? 7. sendmail和postfix各自的特点是什么? 8. 简述NAT主要功能。 175