/ 中存储网

sendmail的配置详解

2014-07-13 20:17:38 来源:中存储网
介绍性文章,简单讲了sendmail的配置,而且也没有具体的介绍sendmail情况,因为网上有关他的文章太多了.

电子邮件的运行机制是由IETF出版的一组相关RFC文档定义,其中包括了SMTP、POP3、IMAP4、MIME等标准规范,涉及邮件传递、存取、安全等诸多方面。其在实现中主要包括两个部分MUA和MTA,MUA提供用户管理界面,MTA负责邮件传递。

SMTP定义邮件服务器间的通信,即邮件从发送端到接收端的传递过程,端口25。

MTA就确定这个邮件要路由到哪里,以及如何路由,常见的如SENDMAIL、QMAIL、POSTFIX、EXIM等;Windows的Exchange、imail等。

MUA是邮件系统为用户提供的可读写、发送邮件界面,通常使用的有elm、pine或email等程序。

POP协议规定,用户的邮件投递到一个中间机器上,叫做POP服务器,客户机通过端口110与服务器连接。

IMAP同POP一样,提供客户机存取远程服务器中的信件的功能,但能比POP提供更高效、更强大的邮件访问功能,支持同时对多个信箱进行访问,多个用户同时访问一个信箱,支持客户机取出信件的子集,支持客户机与服务器间的同步。

下面以sendmail为例,介绍简单的邮件服务器实现过程:

Redhat9 会默认安装Sendmail,如果没有选择安装他,则要到安装光盘中找到以下文件安装:

sendmail-812.8-4.i386.rpm sendmail可执行程序

sendmail-cf-812.8-4.i386.rpm sendmail.cf生成器

sendmail-doc-812.8-4.i386.rpm sendmail.cf文档

使用rpm -ivh sendmail-8-i386.rpm进行安装

安装后就是使用了,步骤如下:

首先,激活服务service sendmail restart ,再使用netstat -ln -A inet 察看端口状态,看25端口是否开启

进入/etc/mail编辑主配置文件,修改SMTP守护进程监听ip地址为服务器ip(在264行)vi +264 sendmail.cf

# SMTP daemon options

O DaemonPortOptions=Port=smtp,Addr=192.168.0.151, Name=MTA

# SMTP client options
#O ClientPortOptions=Family=inet, Address=0.0.0.0

# Modifiers to define {daemon_flags} for direct submissions
#O DirectSubmissionModifiers

# Use as mail submission program? See sendmail/SECURITY
#O UseMSP

# privacy flags
O PrivacyOptions=authwarnings,novrfy,noexpn,restrictqrun

编辑/etc/mail/access文件,如果没有就创建,更改如下:

localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY

192.168.0 RELAY

这里表示允许本机和192.168.0.0/24网段中的机为允许进行中继(设为RELAY),添加的纪录是根据我两台机器的ip来设的。

再将access的内容导入access.db实现对access.db的配置(因为access.db不能直接进行更改,所以使用导入的方式实现配置),命令如下:

makemap hash access.db

因为我配置了域名服务器来进行解析,所以下一步是重启域名服务有没有开启(没有建DNS的就不用了,没有建DNS因该如何做,稍后会介绍):

service named restart

nslookup mail.aaa.com //解析邮件纪录,看DNS是否工作正常

然后是建立SMTP后缀,并设置可用邮件后缀,编辑/etc/mail/local-host-names文件

# local-host-names - include all aliases for your machine here.

mail.aaa.com //建立这条纪录,因为我建的DNS中的邮件纪录为mail.aaa.com,aaa.com是我的域名。

aptech.com //这一条纪录是为后面的试验“虚拟用户”准备的

现在邮件服务器基本可以工作了。

telnet mail.aaa.com 25 //telnet到25端口,telnet 192.168.0.151 25(192.168.0.151是我设的ip)也可以。

如果连接成功,服务器会返回一个表示通信连接成功的220应答代码,如果telnet不到,就察看25端口有没有打开。

HELO mail.aaa.com //向服务器表识发件人的身份,成功,会收到250应答代码,这一步可以省略。

mail from :root@mail.aaa.com //指定发件人为root,成功就会返回250应答代码.

rcpt to :net1@mail.aaa.com //指定收件人地址为,成功就会返回250应答代码.

data //发送data命令,准备开始传输邮件内容,成功会返回354应答代码,表示准备接收邮件内容,可以在下一行开始输入邮件内容。

邮件内容写完后回车并输入“.”结束 回车后会返回250代码。

quit结束,退出。

使用mail查看文件.

(可以使用 sendmail -v aa@aa.com < /dev/null 来判断是否可以发送成功

如果出现 Defferd: refused by [127.0.0.1]

需要再/etc/mail/sendmail.mc 中将

DAEMON -OPTIONS('PORT=SMTP,addr=127.0.0.1,Name=MTA')中的addr=127.0.0.1删除掉

使用m4 sendmail.mc > sendmail.cf 重新生成配置文件

重启sendmail服务 service sendmail restart)

现在来介绍没有架设DNS因该如何做:

首先,在/etc/hosts里面建一条记录

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1        hsxlinux       localhost.localdomain   localhost
192.168.0.151 mail.aaa.com //192.168.0.151是sendmail服务器ip,mail.aaa.com是sendmail的域名
像上面一样,在access里添加记录,使允许中继.在导入access.db里,因为防火墙默认会阻止25端口,所以在服务器端需要开启防火墙的25端口.
客户机访问:
客户机首先要将DNS指向服务器(如果不指向,在/etc/hosts里面添加一条和上面一样的记录)
如果不出意外,就可以用telnet mail.aaa.com 25访问了,如果是DNS指向的方式就telnet 192.168.0.151 25.
设置别名:
首先,编辑/etc/aliases,在最后面添加如下记录:
# trap decode to catch security attacks
decode:         root
# Person who should get root's mail
#root:          marc
administrator :root  //设置root的别名为administrtor,冒号左边的为别名,右边的为当前系统用户.
user :net1
guest :nobody
使用命令newliases生成新的别名信息库
这样就可以了,当发往别名邮箱时,也就是发往root用户的邮箱中.
进入/etc/aliases添加一条记录如下:
# trap decode to catch security attacks
decode:         root
# Person who should get root's mail
#root:          marc
administrator :root user :net1 guest :nobody
mailgrp : root net1 net2 //定义一个邮件组,将root、net1、net2三个用户加入这个组,当向组发送邮件时,也会向组中的用户发送邮件.
虚拟邮件帐号:
当网络中存在多个域,而在另一个域中又不想再建立同样的用户时,可以使用sendmail的虚拟邮件帐户功能.我在
首先,编辑local-host-names添加另一个域的域名aptech.com,编辑virtusertable,打开后文件中没有内容,我添加了如下内容:
net@aptech.com   root   //让root帐号对应aptech.com域中的net帐户.
net1@aptech.com  net1
将配置写入数据库:
makemap hash virtusertable.db
然后,在测试一下,如果不出意外,是可以成功的.
设置mail验证:
首先,检查组件cyrus-sasl-2.1.10-4有没有安装,如果没有就先安装,再用命令sendmail -d0.1 -bv检验是否支持安全验证.
编辑/etc/mail/sendmail.mc,在43行44行找到如下内容:
dnl #
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
将前面代表注释的"dnl"去掉:
dnl #
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
再找到第92行,同样将前边的注释去掉:
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 587 for dnl # mail from MUAs that authenticate. Roaming users who can't reach their dnl # preferred sendmail daemon due to port 25 being blocked or redirected find dnl # this useful.
dnl #
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
将修改导入sendmail.cf,因为sendmail.cf才是真正的配置文件:
m4 sendmail.mc >sendmail.cf
service sendmail restart重启sendmail服务,这个时候,一般会出错,说sendmail.cf 39行出错,vi sendmail.cf干脆删掉39行,因为也没用,就可以了.
service sendmail restart重启服务,然后telnet会出错,Cnection refused,这是因为sendmail 的264行中ip被覆盖了,编辑sendmail.mc,将264行的ip改回来,并使用
命令:m4 sendmail.mc >sendmail.cf,然后重启sendmail服务.
然后,当你使用linux中的客户端软件Evolution发送邮件,就会需要进行SMTP验证.
linux实现POP3和IMAP:
首先,检查IMAP组件有没有安装,安装后就进行如下步骤:
cd /etc/xinetd.d进入xinetd.d目录,编辑ipop3文件
# default: off
# description: The POP3 service allows remote users to access their mail
#              using an POP3 client such as Netscape Communicator, mutt,
#              or fetchmail.
service pop3
{
disable   = yes
socket_type             = stream
wait                    = no
user                    = root
server                  = /usr/sbin/ipop3d
log_on_success  += HOST DURATION
log_on_failure  += HOST
}
 其中有一行"disable = yes",将yes改为no,开启pop3功能(同样的,可以通过编辑imap文件,做同样修改,也可以开启imap功能).
然后,重启xinetd服务,就可以通过pop3来接收邮件了,可以通过linux中的客户端软件Evolution,或windows中的outlook进行测试.