1、第19章 邮件服务器,电子邮件服务是当前互联网中使用最广泛的服务之一。电子邮件已成为网络用户不可或缺的需要。在Linux环境下,邮件服务器软件很多,如:Postfix、Sendmail及Qmail等等。本章主要对Linux环境下应用最广泛Sendmail邮件服务器的安装配置进行详细的讨论。,19.1 邮件服务器Sendmail简介,Linux下的邮件传递代理(Mail Transfer Agent)通常使用Sendmail,这个系统在所有的UNIX平台上都有相应的版本。邮件传输代理程序负责把邮件从一台机器发送到另外一台机器。Sendmail不是邮件阅读程序,它只是用于把邮件通过Internet
2、发送到目的地服务器的后台程序。 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是基于TCP协议的应用层协议,定义邮件传递的协议,SMPT协议命令是以明文方式进行的。下面以向发送邮件为实例介绍SMTP的工作原理。 在linux环境下使用telnet 25连接的25号端口,该端口是SMTP的标准服务端口。在命令提示符下使用telnet程序登陆到远程主机,端口号指定为25,交互过程如下。 $telnet 25 Trying 202.99.11.120. Connected to . Escape character is . HELLO 220 ES
3、MTP Sendmail 8.10.2/8.10.2; Mon, 18 Sep 2000 13:40:44 +0800 250 Hello 210.12.114.130, pleased to meet you MAIL FROM: 250 2.1.0 . Sender ok RCPT TO: 250 2.1.5 . Recipient ok DATA 354 Enter mail, end with “.“ on a line by itself hello , Pls to get to meet u :) good luck 250 2.0.0 e8I5j1M11204 Message
4、 accepted for delivery QUIT 221 2.0.0 closing connection Connection closed by foreign host. 对上面的命令行含义,下面详细介绍如下。,这里发送信件的主机域名是。 客户向远程邮件服务器表示自己的身份,这通过HELLO命令实现。 “MAIL FROM”标识发送者的邮件地址,“RCPT TO”标识接受者的邮件地址,这里以为邮件接收者地址。 如果邮件接收者不是本地用户,例如,RCPTTO:,则说明希望对方邮件服务器为自己RELAY邮件,如果该邮件服务器是OPEN RELAY的,则该服务器允许发送这样的邮件,否则
5、表明服务器不能RELAY。 DATA行下面开始到“.”行结束的部分表示邮件的数据部分。 QUIT表示退出这次会话,结束邮件发送。 上面是一个发送邮件的会话过程。SMTP协议定义了命令及相关规定。本地客户端通过POP3或IMAP协议与邮件服务器交互,将邮件信息传递到给客户本地进行处理。如果读者向来信者回复信件,MUA使用SMTP与读者的邮件服务器建立连接,指示邮件服务器帮助发送邮件到朋友的邮件服务器地址。然后读者的邮件服务器通过SMTP协议发送邮件到对方的邮件服务器。这就是接收和发送邮件的全部过程。,19.2 邮件服务器的安装配置,接下来看看怎样安装Sendmail服务器,这里介绍采用源代码安装
6、方式,RPM包在RedHat9.0安装光盘中有,将光盘挂载后进入光盘位置即可开始安装。 具体的安装于配置请参考书中内容。,19.3 使用Sendmail服务器,如果上面所介绍的Sendmail服务器安装没有问题,那么可以进入这一节看看如何更好的使用服务器。 19.3.1 建立电子邮件新账号 在Linux中,要为一个新的用户开E-Mail账号是十分简单的,只要在Linux系统中新增一个用户就可以了。那么这个用户账号和密码就是E-mail的账号和密码。例如,我为一个新用户xscancmd开一个E-mail账号。就用以下命令: (1)新增用户xscancmd。 #adduser xscancmd (
7、2)更改用户密码。 #passwd xscancmd 这样,这个新用户的E-mail地址就是:,密码当然就是账号的密码了。,19.3.2 设置别名,通过以上步骤实现了新增用户的处理,如果有一些用户想使用多个E-mail地址,可以不用给每个E-MAIL地址设置对应的账户。如果是这样就会增加对账号管理的难度。有另外一种方法可以使一个用户对应多个E-mail地址并设置别名。如说,一个用户叫“xscancmd”,它想拥有以下的几个E-mail地址: 实现别名机制可用以下几个步骤: (1)以root登录服务器,新增一个账号xscancmd。 #user add xscancmd (2)编辑文件/e
8、tc/aliases,并加入下面两行。 xiaodong:lxd tigger:lxd (3)执行命令并实现。 #Newaliases 这样可以使用3个邮件地址发给xscancmd,而xscancmd用户只需要使用一个E-Mail账号:就可以接收所有寄给以上三个E-Mail邮件地址的电子邮件。,19.3.3 限制单个用户邮箱容量,如果对用户的邮件容量不加限制,服务器硬盘很快就会枯竭。电子邮件的缓存空间是在/var/spool/mail目录下的,所以只需通过磁盘配额设定每一个邮件账户在此目录下能使用的最大空间就能限制邮件容量。,19.3.4 收取邮件-Pop3服务器安装,经过以上步骤后,应该就可
9、以用Outlook Express正常发送邮件了。但这时还不能用Outlook Express从服务器端收取邮件的,因为Sendmail默认状态并不具备POP3收取邮件功能,必须首先安装POP3。这里用Red Hat Linux光盘中自带的程序安装。 (1)首先用以下命令行检查系统是否安装。 #rpm -qa imap (2)如果没有安装则插入第2张安装光盘,使用下面的命令行开始安装。 #cd /mnt/cdrom/RedHat/RPMS #rpm -ivh imap-2001a-18.i386.rpm,19.3.5 收取邮件-启动Pop3服务,在Internet中,我们采用POP端口提供接收
10、邮件服务。采用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 /
11、usr/sbin/tcpd /usr/sbin/in.pop3d 前面的“#“号代表将这一行是注释掉,也就是改行配置不起作用。POP2是早期的端口协议版本,我们现在一般使用的是POP3。 (4)将POP3的描述语句那一行的注释号“#”去掉,使该行生效。确保POP2的那一行被注释掉。 (5)存盘后退出。 (6)运行inetd命令,使得设置生效。 (7)用以下命令验证,看POP3端口是否打开。 netstat a |grep pop (8)显示信息。 tcp 0 0 *:pop3 *:* LISTEN,19.3.6 保证Sendmail的安全,Smrsh程序是一个受限制的shell,它的目的是作为
12、mailer中为Sendmail定义的代理/bin/sh的shell。Smrsh中可执行程序通过/etc/smrsh目录来确定,当Sendmail与smrsh一起使用时,smrsh将sendmail可执行程序的范围限制在smrsh目录之下,则就保障了系统安全。如果一个入侵者可以使Sendmail不通过别名或者转发文件来运行其他程序,smrsh限制了可执行的程序集体。 请参考书中的详细内容。,19.3.7 Sendmail管理工具,以下这些命令是日常维护工作时经常要用到的。但是还有许多命令我们没有列出,请阅读以下手册页和其他的参考文献,以便能够得到更加详细的信息。 (1)newaliases负责
13、为“/etc/aliases”这个邮件别名文件重建随机访问数据库。每次更改“/etc/aliases”文件时,都必须运行一次本命令,以使所做的更改能够生效。newaliases命令与sendmail -bi命令的功能完全相同。使用以下命令运行newaliases。 # /usr/bin/newaliases (2)Makemap用来创建数据库,该数据库用于Sendmail进行关键字映射检索,它从标准输入中读取数据,再把结果输出到指定的映射名字。Makemap可以为aliases、access、domaintable、mailertable和virtusertable创建一个新的数据库,例如,下
14、面的命令利用makemap来为access创建一个新数据库。 # makemap hash /etc/mail/access.db 是一种数据库格式,makemap可以处理3种不同的数据库格式,它们是hash、btree和dbm。表示新数据库的位置和名称,表示makemap所要读取的输入文件。 (3)mailq工具用来打印准备投递的邮件信息队列的汇总信息。用下面的命令来打印准备投递的邮件信息队列的汇总信息。 # mailq,19.3.8 Sendmail用户工具,Sendmail用户工具给系统管理员日常维护提供了方便,但是这只是一篇入门级教材,还有很多的命令没有列出,有兴趣的读者请查阅相关ma
15、n页或者其他资料。 (1)mailstats命令。Mailstats命令用来显示邮件的统计信息。用下面的命令来显示邮件的统计信息。 # mailstats Statistics from Tue Dec 14 20:31:48 1999 M msgsfr bytes_from msgsto bytes_to msgsrej msgsdis Mailer 8 7 7K 7 7K 0 0 local = T 7 7K 7 7K 0 0 (2)praliases命令。Praliases命令用来显示当前系统中的别名,每个一行。用下面的命令来显示当前系统中的别名。 # praliases postmaster:root daemon:root root:admin : mailer-daemon:postmaster bin:root nobody:root www:root,19.4 小结,Sendmail是目前从多邮件服务器中使用最为广泛的一种,而它的配置很让人头痛。本章也只是初略的一些讲述,如果读了本章仍然一头雾水,请查看相关的详细资料。本章从介绍Sendmail开始然后讲述了怎么安装Sendmail以及它的配置、安全性等,关键在于它的配置,亲自动手配置实践是学习的好方法。,