为了能从网络上接收SMTP电子邮件,我们必须在Linux系统上运行Sendmail守护进程。命令是;
# /etc/rc.d/init.d/sendmail start
为了方便起见,我们应该使用ntsysv命令把Sendmail守护进程加到引导程序中,在多数情况下,安装时Linux就已经自动将Sendmail包含在引导程序中了。这样每次开机时,Linux都会启动Sendmail守护进程并侦听端口25,处理进入的邮件。
Sendmail的配置文件是/etc/sendmail.cf文件,它包含大部分的Sendmail配置的信息,包括在用户邮件程序和邮件传输程序之间为邮件选择路由所需的信息。Sendmail.cf文件有三个主要功能:
·定义Sendmail环境。
·按照接收邮件程序的语法重写地址。
·将地址映射成传送邮件所需的指令。
执行所有这些功能需要若干命令。一些宏定义和可选用的命令可定义其环境,一些重写规则可以重写电子邮件的地址,一些邮件程序定义可定义传送邮件所必需的指令。
sendmail.cf文件很大,看上去可复杂,但我们需要改动的地方很少。主要在local info中做文章。请在文件中寻找“Cw”,原来产生的cf 文件,Cw应是:
Cwlocalhost
# file containing names of hosts for which we receive email
# Fw/etc/sendmail.cw
请在localhost之后加上我们那一台机器所有可能用来当收信地址的主机的名字。例如,在局域网络Virtual Brewery中的一台机器叫:vlager.vbrew.com,而且也叫gopher.vbrew.com,而该网络的管理员希望这一台机器的这两个名字都能收信,那么他需要这样修改sendmail.cf文件:
Cwlocalhost vlager.vbrew.com gopher.vbrew.com
上面只是一种简便的方法,如果系统中运行着DNS,我们可以通过DNS来解析主机别名(如下所示),而不用加上主机别名gopher.vbrew.com。如果没有运行DNS,那么必须将本机器的所有名字都写上。
如果用作邮件服务器的主机有多个名字(hostname),例如:
vlager IN A 191.72.1.1
gopher IN CNAME vlager
那么我们可以不必在Cw上标明,系统会透过DNS 找到它的别名
如果一台机器有多个名字,但是每一个别名是用A record 建立的,例如:
vlager IN A 191.72.1.1
gopher IN A 191.72.1.1
在这种情况下【一定】要记得在Cw后写上所要收信主机的名字。如果忘记了,那么从外面寄来的以别名为地址的信件将无法正常接收,机器会抱怨:
“Local configuration error”
例如,如果在sendmail.cf中的Cw这行是Cw vlager.vbrew.com,那么局域网Virtual Brewery中的用户将无法使用邮件地址username@gopher.vbrew.com而只能用username@ vlager.vbrew.com,否则将出现上述错误。
如果一台机器有多interface,各interface有其本身的名字,而且要收信。这种情况也要在Cw之後写明所有要收信的hostname。
在我们的例子中F命令是作为注释处理的,如果去掉它前面的“#”号,那么sendmail将从/etc/sendmail.cw中读取主机的别名,并将别名储存在类w中。将F命令做注释处理,并让sendmail在内部定义别名这是一种最常用的方法。
打开/etc/mail/access文件时,会看到(注意一些系统的access文件不再/etc/mail下,如找不到请用whereis查找或检查是否安装正常):
|
如果我们主机的IP地址是191.72.1.1的话,就应该在最后一行加上它的记录项,这样,我们修改后的文件的最后三行应是:
localhost.localdomain RELAY
localhost RELAY
191.72.1.1 RELAY
加上这句话我们就可以用sendmail发送接收mail了。但是如果我们想让别人也可以使用sendmail的话,而他的IP是202.168.25.22,这样就在在最后一行加入他的主机的记录项,这时文件的最后四行应是:
localhost.localdomain RELAY
localhost RELAY
191.72.1.1 RELAY
202.168.25.22 RELAY
当我们考虑到多用户的时候,sendmail允许我们添入整个B类或C类地址,其格式如下:
localhost.localdomain RELAY
localhost RELAY
191.72 RELAY
202.168.25 RELAY
这样,我们就是把整个网络都加入的sendmail中,这个地址中的用户,如果在我们的系统里有账号的话,可以使用sendmail收发信件了。
Linux 还允许我们设置邮局协议(POP)邮件服务器,POP协议分两个版本POP2和POP3,很显然POP3是新版本的邮局协议,现在Inte.net网上主要是POP3协议。POP3并不需要我们来配置,RedHat已经为我们做好了这一工作。我们只需要修改一下 /etc/inetd.conf文件,确保POP3能正常工作即可:
# vi /etc/inetd.conf
查找到:
# pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
把这一行前面的“#”号删掉。然后修改/etc/services文件:
# vi /etc/services
在该文件中查找到
#pop-3 110/tcp # POP version 3
同样,将这一行前面的注释符“#”号删掉。之后使用下面的命令重新启动inetd和sendmail守护进程:
|
在我们配置完sendmail后,可以运行以下的命令来检查目录的读写权限以检查潜在的安全漏洞。
# sendmail –b –vi
这时,sendmail将开始初始化alias数据,如果在屏幕上回显:
WARNING: writable directory /etc
WARNING: writable directory /usr/spool/mqueue
那么这个目录列出了不适当的写特权,应该使用chmod和 chown命令以避免多方面的的安全攻击。一般我们需要对如下目录运行chmod和chown命令:
|
sendmail 的有一些参数可以用于验证地址处理的结果,以确保其新配置的合理性。一旦认为配置可以正常工作了,我们就可以选择各个站点上的朋友,并将邮件发送给他们。发送时使用-v参数就可以显示邮件传输的各个细节和两个站点之间进行SMTP交换的全过程。下面是一个测试的例子,使用的文件是test.cf,一旦测试成功,我们就可以将这个文件拷贝到/etc下并可以改名为sendmail.cf。
# sendmail –Ctest.cf –t –v
To:lack@vlager.vbrew.com
From:janet
Subject:Test for sendmail
Lack,please reply if you see this,Thanks.
^D
lark@ vlager.vbrew.com…..Connecting to vlager.vbrew.com via tcp…
Trying 191.72.1.1 ….connected.
220 VLAGER.VBREW.COM on Web, 30 Sep 99 16:23:23 CST
>>> HELLO maths.groucho.edu
250 VLAGER.VBREW.COM is my domain name
>>> MAIL From:< gauss.maths.groucho.edu.>
250 OK
>>> DATE
354 Enter mail body, End by new line with just a ‘.’
>>>.
250 Mail Delivered
>>> QUIT
221 VLAGER.VBREW.COM closing connection
lack@vlager.vbrew.com…sent
我们在CTRL-D之前输入所有的内容,而sendmail则显示^D之后的内容。通过对sendmail的测试,我们就可以发现潜在的配置问题,并使用sendmail提供的一些附加查错工具解决这些问题。
(责任编辑:城尘)