1、实验 15 邮件服务器的配置 一、实验目的 二、实验工具与设备三、实验预备知识 四、实验内容和步骤五、实验总结一、实验目的1了解邮件服务器的基本知识。2掌握 SendMail的工作原理。3掌握 SendMail的配置方法。二、实验工具与设备1交换机(或集线器)。2带网卡的计算机,包括装有 Windows 系统的学生机和 Linux系统的计算机服务器。3网线若干。4 Red Hat Linux 9.0安装光盘。三、实验预备知识SendMail最初在 1979年由 Eric Allman编写,起先运行在 BSD 4.0平台上。但这个程序不够灵活,每次编译时都需要重新配置。随着 TCP协议和其他方面
2、的发展,其不灵活性已经明显不能满足日益增长的需求。 Eric Allman决定重新编写 SendMail,从而诞生了现在的 MTA标准(邮件传输代理标准)。SendMail是 Linux中的默认邮件传输代理( MTA),任务是从邮件用户代理(MUA)接收邮件,然后根据配置文件的定义把它们传送给配置好的的寄送程序。SendMail也能接受网络连接,并且发送邮件到本地邮箱或发送到其他程序。 SendMail的配置文件见表 15-1。文 件 名 功 能/etc/mail/access SendMail 访问 数据 库 文件/etc/mail/aliases 邮 箱 别 名/etc/mail/loca
3、l-host-names SendMail 接收 邮 件主机列表/etc/mail/mailer.conf 邮 寄配置程序/etc/mail/mailertable 邮 件分 发 列表/etc/mail/sendmail.cf SendMail的主配置文件/etc/mail/virtusertable 虚 拟 用 户 和域列表表 15-1 SendMail的配置文件 1文件 /etc/mail/access(访问数据库)该文件定义什么主机或 IP地址可以访问本地邮件服务器,以及是哪种类型的访问。主机可能会列出 OK、 REJECT、 RELAY或简单的通过 SendMail出错处理程序检测的给
4、定的邮件错误。主机默认列出 OK,只要邮件的最后目的地是本地主机,则允许传送邮件到主机。若列出 REJECT,将拒绝所有邮件连接,带有 RELAY选项的主机将被允许通过该邮件服务器发送邮件到任何地方。例 1:配置 SendMail的访问许可数据库。 550 We do not accept mail from spammersFREE.STEALTH.MAILER 550 We do not accept mail from spammersanother.source.of.spam REJECT OK128.32 RELAY本例有 5条记录。与第一列匹配的发件人受到第二列动作的影响。 前两
5、个记录给出 SendMail出错处理程序检测到的错误代码。当一个邮件与第一列相匹配时,该信息被打印到远程主机上。 第三条记录拒绝来自 Internet上的一个特别主机的邮件( another.source.of.spam)。 第四记录允许来自 的邮件连接,这条记录比上一行更准确。更多的准确匹配使不准确的匹配无效。 最后一条记录允许电子邮件从主机为128.32开头的 IP地址转发,这些主机将被允许通过这台邮件服务器前往其他邮件服务器发送邮件。当该文件被升级时,必须在 /etc/mail/运行 make升级数据库。2文件 /etc/mail/aliases(别名数据库)该文件包含一个扩展用户、程
6、序或其他别名的虚拟邮箱列表。以下是一些在/etc/mail/aliases中使用的例子。例 2:邮件别名。root: localuserftp-bugs: joe,eric,paulbit.bucket: /dev/nullprocmail: “|/usr/local/bin/procmail“该文件的格式很简单。冒号左边的邮箱名可以被展开成右边的形式。 第一行简单地将 root邮箱扩展为 localuser,之后将继续在别名数据库中进行查找。如果没有找到匹配的记录,邮件被发给本地用户localuser。 第二行展示一个邮件列表。发送到 ftp-bugs的邮件可被展开成 joe、 eric和
7、paul三个邮箱。当然也可以通过 形式指定远程的邮箱。 第三行展示如何把邮件写入到文件中,本例是 /dev/null。 最后一行展示如何将邮件发给一个程序,这里是通过 UNIX管道发到/usr/local/bin/procmail的标准输入。更新该文件时,需要在 /etc/mail/中用make更新数据库。3文件 /etc/mail/local-host-names该文件是一个本地主机名的列表,可以放入任何 SendMail将收发邮件的域名或主机。例如,如果该邮件服务器从域 和主机 接收邮件,则 local-host-names文件可以按以下方式书写:当该文件被升级时, SendMail必须重
8、新启动,以便更新设置。4文件 /etc/mail/sendmail.cf( SendMail的主配置文件)SendMail.cf控制 SendMail的所有行为,包括从重写邮件地址到打印拒绝远程邮件服务器信息等。该配置文件相当复杂,初学者没有必要弄清楚其细节(超出本书范围)。一般而言,该文件对于标准邮件服务器来说,很少需要改动。SendMail主配置文件可以用 m4(1)宏定义 SendMail的特性和行为。其细节请参考/usr/src/contrib/sendmail/cf/README文件。该文件被修改时, SendMail必须重新启动,以使新修改生效。5文件 /etc/mail/virt
9、usertable该文件映射虚拟域名和邮箱到真实的邮箱。这些邮箱可以是本地的、远程的、/etc/mail/aliases中定义的别名或一个文件。例 3:虚拟域邮件映射。 joe本例中映射了一个域 。该文件按照从上到下,首个匹配的方式来处理。 第一项将 映射到本地邮箱 root。 第二项将 映射到位于 的 postmaster。 如果没有来自 的匹配,则使用最后一条映射,表示将所有的其他邮件发给域的某个人。这样,将映射到本地信箱 joe。四、实验内容和步骤1实验环境的构建将实验的设备按图 15-1所示连接好。其中,在 PC1上安装 Red Hat Linux作为服务器,并配置好网络。其中,
10、IP地址为 192.168.0.1。 PC1在本实验中作为邮件服务器(已安装 SendMail的 Linux系统);在 PC1上启动并配置 DNS系统,使其能正确解释域。 PC2 PCn是安装有 Windows 操作系统的计算机,并配置好网络, IP地址设置为 192.168.0.X( X在2 254之间取值)。本实验中, PC2 PCn作为装有邮件客户端程序(例如 outlook)的客户机。图 15-1 实验环境的连接图2把邮件服务器的主机名和 IP地址加入到 DNS中(操作方法参考实验 12)设邮件服务器名为 ,本实验所用局域网的 DNS服务器和邮件服务器运行在同一主机上,邮件服务器的 I
11、P地址对应为192.168.0.1。( 1) 用 nslookup命令确认 DNS的工作是否正常运行命令: rootlocalhost /root# nslookup -sil 如果 DNS工作正常,将出现以下提示:Server: 192.168.0.1Address: 192.168.0.1#53Name: Address: 192.168.0.1( 2)测试反向域名解析这项操作对防止邮件延迟有很重要的作用。大部分邮件服务器都把反向域名解析作为邮件传送时认证的一部分。因此,需要用 IP地址试一下反向域名解析是否正确。rootlocalhost /root# nslookup -sil 192
12、.168.0.1Server: 192.168.0.1Address: 192.168.0.1#531.0.168.192.in-addr.arpa name = . 以上信息表示 DNS已经工作正常。3配置 SendMail服务Red Hat Linux 9.0默认安装已经可以使 SMTP服务在本机运行。 先用 netstat -nl查看所有后台程序监听的端口:rootlocalhost /root# netstat -nl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign
13、 Address State tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN udp 0 0 0.0.0.0:32768 0.0.0.0:* udp 0 0 0.0.0.0:667 0.0.0.0:* udp 0 0 0.0.0.0:111 0.0.0.0:* Active UNIX domain sockets (only servers) P
14、roto RefCnt Flags Type State I-Node Path unix 2 ACC STREAM LISTENING 1119 /dev/gpmctl unix 2 ACC STREAM LISTENING 1172 /tmp/.font-unix/fs7100 注意: 127.0.0.1:25表示 SendMail服务已经在监听本机的 25(SMTP)端口。但这只是表示邮件服务器目前只接收本机的邮件。为了解决这个问题,需要修改配置,告诉 SendMail去监听本机以外的网卡地址。假设服务器上只安装了一块网卡( eth0), IP地址 192.168.0.1,可以修改/et
15、c/mail/sendmail.cf文件来配置 SendMail的监听端口。操作:将# SMTP daemon optionsO DaemonPortOptions=Port=smtp, Addr=127.0.0.1, Name=MTA修改为 O DaemonPortOptions=Port=smtp, Addr=192.168.0.1, Name=MTA修改完成后,保存退出,并用以下命令重新启动 SendMail服务:rootlocalhost /root# /etc/init.d/SendMail restart再用 netstat -nl来查看所发生的更改:rootlocalhost /
16、root# netstat -nlActive Internet connections (only servers)Proto Recv-Q send-Q Local Address Foreign Address Statetcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTENtcp 0 0 0.0.0.0:111 0.0.0.0:* LISTENtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTENtcp 0 0 192.168.0.1:25 0.0.0.0:* LISTENudp 0 0 0.0.0.0:32768 0.0.0.0:*udp 0 0
17、 0.0.0.0:667 0.0.0.0:*udp 0 0 0.0.0.0:111 0.0.0.0:*Active UNIX domain sockets (only servers)Proto RefCnt Flags Type State I-Node Pathunix 2 ACC STREAM LISTENING 1119 /dev/gpmctlunix 2 ACC STREAM LISTENING 1172 /tmp/.font-unix/fs7100rootlocalhost /root#可见, SendMail的监听端口是 eth0的 IP地址 192.168.0.1。设置完成后, SendMail可以接收来自外部的连接。4设定 SendMail允许接收的域名可以在 /etc/mail/local-host-names文件中设置,直接把域名输入该文件即可。格式如下:# local-host-names - include all aliases for your machine 保存退出后,重新启动 SendMail服务,SendMail就可以接收来该域的信件。如果需要再增加新的域,只要继续在该文件中添加新的域即可。配置好的邮件服务器在本机上已经可以正常地工作,即可以接收邮件了(允许的域)。