如何构建Sendmail服务器问题深入分析

发表于:2007-07-04来源:作者:点击数: 标签:
在Internet出现WWW服务之前,电子邮件系统曾经是使用最为广泛的一种应用服务。电子邮件为人们的沟通带来了方便,眨眼间,通过Internet传送着各种各样的祝福和消息。它为人们的沟通增加了许多方便。 1 电子邮件系统的工作原理 电子邮件系统的运作方式与其它的

  在Internet出现WWW服务之前,电子邮件系统曾经是使用最为广泛的一种应用服务。电子邮件为人们的沟通带来了方便,眨眼间,通过Internet传送着各种各样的祝福和消息。它为人们的沟通增加了许多方便。
  
  1 电子邮件系统的工作原理
  电子邮件系统的运作方式与其它的网络应用有着根本上的不同。在其它的绝大多数的网络应用中,网络协议直接负责将数据发送到目的地。而在电子邮件系统中,发送者并不等待发送工作完成,而是仅仅将要发送的内容发送出去。
  例如:文件传输协议(FTP)就象打电话一样,实时地接通对话双方,如果一方暂时没有应答,则通话就会失败。而电子邮件系统则不同,发送方将要发送的内容通过自己的电子邮局将信件发给接收方的电子邮局。如果接收方的电子邮局暂时繁忙,那么发送方的电子邮局就会暂存信件,直到可以发送。而当接收方未上网时,接收方的电子邮局就暂存信件,直到接收方去取。可以这么说,电子邮件系统就象是在Internet上实现了传统邮局的功能,而且是更加快捷方便地实现。
  现在作为一个普通的用户想要连接到Internet,那么就必须找一家Internet服务商(ISP)提供连接服务。在中国,最大的ISP就是中国电信。ISP在提供连接的同时,还会提供一个电子邮局,分配一个电子信箱给用户使用。而且在Internet上还有许多免费的电子邮局提供电子邮件服务。
  值得一提的是,电子邮件总是有一个空间大小的叙述,这是什么意思呢?也就是电子邮局给每个用户所提供的暂存信件的空间。当然,越大越好嘛。
  
  2 电子邮件的标准
  电子邮件的协议标准是TCP/IP协议族的一部分。它规定了电子邮件的格式和在邮局间交换电子邮件的协议。
  每个电子邮件都分为两部分:邮件头和邮件内容。TCP/IP对电子邮件的邮件头的格式作了确切的规定,而将邮件内容的格式让用户自定义。在邮件头中最重要的两个组成部分就是发送者和接收者的电子邮件地址。电子邮件地址的格式如下:
  用户名@电子邮局域名 例:abc@990.net
  而电子邮件的传输协议(也就是在邮局间交换电子邮件的协议)主要有SMTP(简单邮件传输协议)、POP(电子邮局协议),以及现在新兴的IMAP(互联网邮件应用协议)。
  
  3 电子邮件系统的组成
  整个电子邮件应用系统由两大部分构成:
  1. 电子邮局系统;
  2. 电子邮件发送、接收系统。
  电子邮件发送、接收系统则象遍及千家万户的邮箱,发送者和接收者通过它将邮件从电脑中发送和接收邮件。这个部分是一个运行在电脑中的客户端程序,最常用的有Microsoft的Outlook Express,Netscape,The Bat,Foxmail,方正飞扬等。用户可以根据自己的喜爱来选择不同的程序。它们从根本上说,实现的功能是一样的。
  电子邮局行使着像传统邮局的功能,它在发送者和接收者之间起着一个桥梁作用。它是运行在电子邮局服务器上的一个服务器端程序。最常用的有Microsoft的IIS和sendmail等。而在这里我们介绍的就是功能强大的、免费的,基于类UNIX操作系统的电子邮件服务端程序sendmail的最基本的配置与使用方法。
  
  4 安装sendmail
  如果你在安装LINUX的时候,选择了E-MAIL服务,sendmail就已经安装在LINUX系统中了,并且已经作了一些最基本的设置。
  如果你在安装时没有选择,或者你需要升级sendmail就可以使用以下方法进行。
  1. 通过RPM包来安装或升级(仅用于RedHat LINUX):
  1) 首先在光盘上或Internet上找到下面几个RPM包:
  sendmail-8.9.3-10.i386.rpm sendmail可执行文件
  sendmail-cf-8.9.3-10.i386.rpm sendmail.cf生成器
  sendmail-doc-8.9.3-10.i386.rpm sendmail.cf文档
  2) 然后使用以下命令安装或升级:
  安装: rpm –ivh sendmail-8.9.3-10.i386.rpm
  升级: rpm –Uvh sendmail-8.9.3-10.i386.rpm
  2. 用源代码编译关安装:
  1) 首先取得最新版本的源代码:http://www.sendmail.org/
  ftp://ftp.dlut.edu.cn/pub/unix/mail/sendmail/
  2) 展开源代码:
  cd /hometar –zxvf sendmail-8.9.3.tar.gz
  这样就会在/home目录下建立一个sendmail-8.9.3目录:
  /home/sendmail-8.9.3/README
  /home/sendmail-8.9.3/src
  /home/sendmail-8.9.3/cf
  /home/sendmail-8.9.3/doc
  3) 编译:由于sendmail自己带了一个编译程序Build,所以不用make命令:
  cd /home/sendmail-8.9.3/src
  ./Build
  install
  
  5 用sendmail构建一个E-Mail服务器
  当我们在系统中安装了sendmail后我们就可以使用这台机成为我们的电子邮局了。因为sendmail的功能强大,配置繁琐。所以我们在下面的介绍中举一个架设供一个公司使用的Internet E-Mail服务器为例进行讲述。
  以下的设置也能运用在较大的电子邮局应用中,但是随着的用户数的增多,将会使得整个邮局的性能有所下降,这时也就相应地要进行更加深入的配置工作。考虑到本书是一个入门级的读物,我们就不进行深入的讨论。有兴趣的读者可以参看相应的书籍。
  总而言之,我希望在本章节的描述后,能使大家够迅速地使用LINUX架设一个小型的实用的电子邮局。下面我们就开始吧!
  
  5.1 设置sendmail作为守卫进程(daemon)启动
  如果你在安装LINUX的时候,选择了E-Mail服务。那么,sendmail就已经成为一个守卫进程启动了。所谓的守卫进程,指的是它就象DOS操作系统中的常驻内存程序一样,运行后,它们在后台侦听,当需要它进行服务的时候,它就完成特定的功能和服务。在LINUX系统中有许许多多的服务就是以守卫进程的方式启动着的。
  你可以使用以下命令来确认sendmail是否已经启动。
  ps –A|grep sendmail
  如果启动了sendmail,那么这个命令将显示出它的相关信息。否则将没有任何提示地回到命令行。如果没有启动,那么你只发好在/etc/rc.d/rc.net文件中加上以下几行代码。
  if [-f /usr/lib/sendmail ];
  then(cd /usr/spool/mqueue;rm –f if *)
  /usr/lib/sendmail-bd-qlh;echo –n ‘sendmail’>/dev/console
  fi
  
  5.2 设置sendmail.cf
  sendmail.cf是sendmail的配置文件。一般说来在安装了LINUX系统之后,它将自动生成一个适合本系统使用的sendmail.cf文件,而且在sendmail.8.9.3/cf目录下还有许多适应各种系统的sendmail.cf的文件样本,根据文件名也可以判断出它们所适用的场合。可以选择它们替换原有的sendmail.cf文件。也就是将它们复制到/etc目录中去,覆盖掉原来的sendmail.cf文件。
  而且sendmail还提供了一个sendmail.cf的生成器m4,它通过一系列的人机对话来生成一个用户定制的sendmail.cf文件。具体的用法可以阅读m4的帮助文档。在此就不再详述。
  
  5.3 开启SMTP、POP端口
  在Internet中,我们采用POP端口提供接收邮件服务,采用SMTP端口提供发送邮件服务。也就是说,客户端的邮件发送、接收系统在要发送邮件的时候,就与电子邮局的SMTP端口连接;当要接收邮件的时候,就与电子邮局的POP端口连接。
  而一般在所有的类UNIX系统中,SMTP端口默认是打开的,而POP端口在默认状态下是关闭的,我们必须将它打开。
  1. 用root(超级权限)登录到服务器上;
  2. 编辑文件/etc/inetd.conf;
  3. 找到描述POP端口的语句;
  #pop2 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop2d
  #pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop3d
  前面的#号代表这一行是注释语句,不生效。
  POP2是早期的端口协议版本,我们现在一般使用的是POP3.
  4. 将POP3的描述语句那一行的注释号“#”去掉。确保POP2的那一行是注释语句。
  5. 如果没有找到,就手工补上这一行;(另外,我们还可以验证一下是否存在SMTP端口的描述语句);
  6. 存盘后退出。
  7. 运行inetd命令,使得设置生效。
  8. 用以下命令验证,看POP3端口是否打开(生效)。
  netstat –a |grep pop
  如果打开的话,可以看到以下信息:
  tcp 0 0 *:pop3 *:* LISTEN
  
  5.4 为新用户开E-Mail帐号
  其实,在LINUX中,要为一个新的用户开E-Mail帐号是十分简单的。只要在LINUX系统中新增一个用户就可以了。那么这个用户帐号和密码就是E-Mail的帐号和密码。
  例如,我为一个新用户test开一个E-Mail帐号。就用以下命令:
  adduser testpasswd test
  这样,这个新用户的E-Mail地址就是:
  test@company.com
  密码当然就是帐号的密码了。
  
  5.5 为E-Mail帐号设置别名
  如果,有一些用户想使用多个E-Mail地址,是不是就要为他开多个帐号呢?如果是这样就会增加对帐号管理的难度。所以LINUX给我们提供了一种方法:设置别名。
  比如说,一个用户叫“王大明”,它想拥有以下的几个E-Mail地址:
  wdm@company.com
  wangdm@company.com
  daming@company.com
  我们就通过以下步骤来实现这样的别名设置。
  1. 以root登录服务器;
  2. 新增一个账号wdm;
  3. 编辑文件/etc/aliases;
  4. 加上两行:
  wangdm:wdm
  daming:wdm
  5. 存盘退出;
  6. 执行命令:
  newaliases
  这样,发给王大明的邮件可以使用三个邮件地址,而王大明只需要使用一个E-Mail帐号:wdm@company.com就可以接收所有寄给以上三个E-Mail邮件地址的电子邮件。
  
  5.6 邮件限额
  当一个E-Mail服务器为许多人提供E-Mail服务的时候,无限量的电子邮件将很容易塞满服务器的硬盘,造成很大的负载。如果你的服务器不想为用户提供无限空间的E-Mail暂存空间,那么你就可以使用“邮件限额”来给用户一个有限的暂存空间。
  其实,它是利用磁盘限额功能来实现的。电子邮件的暂存空间是在/var/spool/mail目录下,只要通过磁盘限额设定每一个用户在这个目录下能使用的最大空间就可以了。

原文转自:http://www.ltesting.net