Sendmail邮件服务器的配置.docx
《Sendmail邮件服务器的配置.docx》由会员分享,可在线阅读,更多相关《Sendmail邮件服务器的配置.docx(15页珍藏版)》请在冰豆网上搜索。
![Sendmail邮件服务器的配置.docx](https://file1.bdocx.com/fileroot1/2022-11/23/062938ea-754c-4bca-805a-6bc2145b8177/062938ea-754c-4bca-805a-6bc2145b81771.gif)
Sendmail邮件服务器的配置
使用SendMail搭建邮件服务器
一、电子邮件系统的组成
电子邮件系统分五部分:
MTA,MSA,MUA,MDA,MAA
1)邮件用户代理(MailUserAgent,MUA)MUA是一个邮件系统的客户端程序,它提供了阅读,发送和接受电子邮件的用户接口。
最常用的MUA有:
linux中的mail,elm,pine等。
Windows的outlook,foxmail等
2)邮件代理器(MailTransferAgent,MTA)
MTA负责邮件的存储和转发(storeandforward)。
MTA监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接受到的邮件进行缓冲。
在linux下的MTA程序有:
sendmail,qmail等,
3)邮件提交代理(MailSubmmissionAgent,MSA)
MSA负责消息有MTA发送之前必须完成的所有准备工作和错误检测,MSA就像在MUA和MTA之间插入了一个头脑清醒的检测员对所有的主机名,从MUA得到的信息头等信息进行检测。
4)邮件投递代理(MailDdliveryAgent,MDA)
MDA从MTA接收邮件并进行适当的本地投递,可以投递个一个本地用户,一个邮件列表,一个文件或是一个程序。
Linux下常用的MDA是mail.local,smrsh和procmail
5)邮件访问代理(MailAccessAgent,MAA)
MAA用于将用户连接到系统邮件库,使用POP或IMAP协议收取邮件。
Linux下常用的MAA有UW-IMAP,Cyrus-IMAP,COURIER-IMAP等
SendMail属于MTA,用来存储和转发邮件,配合dovecot使用pop3协议将邮件下载到foxmail等邮件客户端。
二、SendMail服务器的搭建
涉及到的主要服务有:
/etc/init.d/sendmail#MTA
/etc/init.d/dovecot#pop3协议转发服务
/etc/init.d/saslauthd#安全认证服务
主要配置文件在/etc/mail/下:
1)access数据库文件,用于配置邮件中继和邮件收发权限控制。
2)sendmail.mc,sendmail的主要配置文件。
3)local-host-names域名文件可以用他来实现虚拟域名或多域名支持。
4)/etc/aliases,mail别名文件,用来进行别名控制,邮件转发控制。
5)/etc/mail/mailertable,为特定的域指定特殊的路由规则。
6)/etc/mail/domaintable,域名映射。
其他相关的配置文件:
1)/etc/hosts,/etc/sysconf/network对于主机名进行修改
A.Sendmail.mc的主要参数说明
Sendmail的实际配置文件为sendmail.cf,但是格式规则很复杂;sendmail.mc用来生成sendmail.cf,命令为:
$m4/etc/mail/sendmail.mc>/etc/mail/sendmail.cf
生成之后需要重启sendmail服务
sendmail.mc文件中指令的意义:
指令意义
divert(-1)删除结果文件中的垃圾
divert(0)保存通常的配置文件
Dnl注解
Include包含一个文件
definearg1arg2定义宏arg1设置为arg2
undefinearg1取消arg1的定义
OSTYPE('Linux')定义操作系统类型
FEATURE功能选项,对应/usr/lib/sendmail-cf/feature里定义的文件名称
MAILER定义所有必要的邮件投递代理程序
ASQUERADE_AS用来处理多主机名称问题
Sendmail.mc中行首为dnl的为注释,一些可能用到的参数:
include(`/usr/share/sendmail-cf/m4/cf.m4")dnl (将sendmail-cf/m4/cf.m4包含进来)
VERSIONID(`setupforRedHatLinux")dnl(定义版本信息)
OSTYPE(`linux")dnl(选择包含操作系统指定属性的文件)
define(`confDEF_USER_ID",``8:
12"")dnl(指定使用的用户ID为8,组ID为12)
dnldefine(`confAUTO_REBUILD")dnl
define(`confTO_CONNECT",`1m")dnl (设置等待连接的最大时间为1分钟)
define(`confTRY_NULL_MX_LIST",true)dnl(若MX记录指向本机,则sendmail直接连接到远程主机)
define(`confDONT_PROBE_INTERFACES",true)dnl(sendmial不会自动将服务器的网络接口视为有效地址)
define(`PROCMAIL_MAILER_PATH",`/usr/bin/procmail")dnl(设置procmail的存放路径)
define(`ALIAS_FILE",`/etc/aliases")dnl(设置邮件别名存放路径)
define(`STATUS_FILE",`/var/log/mail/statistics")dnl
define(`UUCP_MAILER_MAX",`2000000")dnl(设置处理信息的最大限制为2M)
define(`confUSERDB_SPEC",`/etc/mail/userdb.db")dnl(设置用户数据库文件路径)
define(`confPRIVACY_FLAGS",`authwarnings,novrfy,noexpn,restrictqrun")dnl(设置限制某些邮件命令的标志)
define(`confAUTH_OPTIONS",`A")dnl仅在授权成功时。
将AUTH参数加到邮件的消息头中
FEATURE(`no_default_msa",`dnl")dnl(允许MSA被DAMEMON_OPTION覆盖的默认设置)
FEATURE(`smrsh",`/usr/sbin/smrsh")dnl(设置邮件发送器smrsh的存放路径)
FEATURE(`mailertable",`hash-o/etc/mail/mailertable.db")dnl(设置邮件发送器数据库的存放路径)
FEATURE(`virtusertable",`hash-o/etc/mail/virtusertable.db")dnl(设置虚拟邮件域数据库的存放路径)
FEATURE(redirect)dnl(支持.redirect虚拟域)
FEATURE(always_add_domain)dnl(增加主机名到所有本地发送的邮件)
FEATURE(use_cw_file)dnl(装载/etc/mail/local-host-names文件中定义的主机名)
FEATURE(use_ct_file)dnl (装载可信任用户名单)
FEATURE(local_procmail,`",`procmail-t-Y-a$h-d$u")dnl(使用procmail作为本地邮件发送者)
FEATURE(`access_db",`hash-T-o/etc/mail/access.db")dnl(从/etc/mail/access.db装载可以中继的域)
FEATURE(`blacklist_recipients")dnl(根据访问数据库的值过滤外来邮件)
EXPOSED_USER(`root")dnl(禁止伪装发送者地址中出现root用户)
DnlDAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1,Name=MTA")dnl(指定sendmail作为MTA运行时的参数,默认系统只开放25端口给本机连接,关闭此项表示开放25端口给任何用户,使如下参数即可
DAEMON_OPTIONS(`Port=25,Name=MTA")dnl,
不使用smtp而是用25,是因为在smtp的默认端口(25)上进行认证,而不是587端口。
这样就强制所有使用该邮件服务器进行邮件转发的用户在认证后才能发邮件了。
)
DAEMON_OPTIONS(`Port=submission,Name=MSA,M=Ea")dnl
提供对于587端口的监听,认证,对于由于MUA所在域阻塞25端口或者被重定向的用户起作用。
DnlFEATURE(`accept_unresolvable_domains")dnl设置可以接受不能由NDS主机所发送的邮件
LOCAL_DOMAIN(`localhost.localdomain")dnl设置本地域,注意域名
MAILER(smtp)dnl(指定sendmail所有SMTP发送者,包括smtp,esmtp,smtp8,和replay)
MAILER(procmail)dnl(指定使用procmail作为本地邮件的发送者)
DnlTRUST_AUTH_MECH(`EXTERNALDIGEST-MD5CRAM-MD5LOGINPLAIN")dnl
define(`confAUTH_MECHANISMS",`EXTERNALGSSAPIDIGEST-MD5CRAM-MD5LOGINPLAIN")dnl
TRUST_AUTH_MECH的作用是使sendmail不管access文件中如何设置,都能relay那些通过EXTERNAL,LOGIN,PLAIN,CRAM-MD5或DIGEST-MD5等方式验证的邮件,如果需要组织mail服务器向外发送邮件,可以注释掉这一项,然后再access中加入规则。
confAUTH_MECHANISMS的作用是确定系统的认证方式。
OutlookExpress支持的认证方式是LOGIN。
B.Access的主要参数简单说明(详细说明参考附录)
/etc/mail/access.db数据库可以用来防止smtp转发功能被滥用,是用来给sendmail提供权限控制的文件,由/etc/mail/access配置文件生成,命令为:
$makemaphash/etc/mail/access.db
要使用该数据库,必须确保在mc中一下两行被使用:
FEATURE(`access_db',`hash -T -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
TODO:
文件生效是否需要重启sendmail
/etc/mail/access.db是一个散列数据库,它是用/etc/mail/access产生出来的,/etc/mail/access是纯文本文件,格式为:
<地址> <操作>中间以空格做为分隔符
地址字段
domain* 域内所有主机
192.168.12192.168.12.*即该网段内所有主机,相当于192.168.12.0/24
192.168.1.1特定的主机
username@domainsomeone@一个特定的邮件地址
username@someone@用户名为someone的邮件
TO:
host1.domain指定方向
FROM:
host1.domain指定方向
Connect:
connectioninformation(${client_addr},${client_name})
操作字段
0K无条件接受或发送
RELAY允许SMTP代理投递
REJECT拒绝接受并发布错误信息
DISCARD丢弃邮件,勿错误信息发布
ERROR:
D.S.N:
###anytext返回给sender的错误信息
###anytext
ERROR:
###anytext
C.Aliases别名和转发控制,virtusertable虚表控制
查看aliases文件命令:
praliases命令可以查看/etc/aliases文件,要是修改的aliases文件立即生效,需要运行newaliases.
/etc/aliases数据库主要改写入站地址,不能改写出站地址
要使用别名功能,必须确保在mc文件中该行使用
define(`ALIAS_FILE',`/etc/aliases')dnl
/etc/aliases文件是一个文本文件,格式为:
alias:
recipient[,recipient, ...]
alias:
邮件地址中的用户名
recipient:
是实际上接受该邮件的用户
也可以使用下面的设置方法:
mkdir /etc/mail/maillist
echo“mail1mail2”>/etc/mail/maillist/net-adm
echonet-adm:
:
include:
/etc/mail/maillist/net-adm>>/etc/aliases
aliases定义别名的作用:
1.为单个用户设置别名:
Test1:
mail1
Test2:
mail2
Mail1,mail2为本地系统实际用户名
2.利用别名来保护登陆帐号,系统管路员可以使用别名来保护合法用户的帐号不被泄漏
假设我在210.22.128.203()上有个系统帐号为mail1(可以使用mail1@),而对外的电子邮件帐号可以是test,就需要如下设置
test:
mail1
3.将发给特殊用户的邮件转发给实际用户
mail-daemon:
test1
root:
test2
4.实现邮件列表
net-adm:
test1,andrew 可以通过发送给net-adm@转发给test1和andrew多个用户
5、转发邮件
test1:
mail1@
这样发给test1@的邮件自动转发到mail1@邮箱中
/etc/mail/virtusertable数据库说明:
要使用虚拟域功能,必须确保在mc文件中该行使用:
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
虚拟域用户的文件缺省为/etc/mail/virtusertable.db,它用/etc/mail/virtusertable文件生成,格式为:
虚拟域地址 真是地址(中间用tab键分开)
someone@localuser
#发送给someone@的邮件现在要发送给本级的用户localuser
@test@
#所有发往***@的邮件都会被发送到test@
@%1@
#user1@的邮件发给user1@,
#user2@的邮件发给user2@
@ %1test@
#user1@的邮件发给user1test@,
#user2@的邮件发给user2test@
然后建立新的数据库:
makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertabl
设置虚拟域用户能够工作有以下的前提:
(1)配置DNS,并设置虚拟域的MX记录
(2)将所有的虚拟域田间到文件/etc/mail/local-host-names中作为本地域别名
(3)将所有的虚拟域添加到文件/etc/mail/access并允许RELAY
D.Sendmail域名控制
Sendmail对于域名设置要求比较严格,涉及的文件包括
/etc/mail/sendmail.mc(LOCAL_DOMAIN(`host1.domain‘)dnl)
/etc/mail/local-host-names
/etc/hosts
/etc/sysconfig/network(HOSTNAME=)
各个文件配置要求一致,例如需要配置一个域名为host1.domain的server的话:
/etc/mail/sendmail.mc
LOCAL_DOMAIN(`host1.domain‘)dnl
/etc/mail/local-host-names
host1
/etc/hosts
127.1.1.1host1host1.domainlocalhost
/etc/sysconfig/network
NETQWORKING=yes
HOSTNAME=host1
可以使用sendmail–d0
E.Sendmail实现ssl加密传输的设置
进入/etc/pki/dovecot/certs/目录,执行:
$makesendmail.pem
输入相应的信息生成sendmail.pem认证文件。
修改/etc/mail/sendmail.mc文件,找到以下四行,将其前面的注释符号去掉,打开Sendmail的ssl认证:
define(`confCACERT_PATH',`/etc/pki/tls/certs')dnl
define(`confCACERT',`/etc/pki/tls/certs/ca-bundle.crt')dnl
define(`confSERVER_CERT',`/etc/pki/tls/certs/sendmail.pem')dnl
define(`confSERVER_KEY',`/etc/pki/tls/certs/sendmail.pem')dnl
注释掉其他没有ssl认证的端口(这个默认端口为465):
注意一个问题:
OutLookExpre3ss只能从端口25进行STARTTLS,Mozilla只能使用STARTTLS,ForMail支持指定端口465进行传输,所以如果要提供对于OutLook或者Mozilla的支持,需要打开25端口或者587端口
dnlDAEMON_OPTIONS(`Port=smtp,。
。
。
。
)dnl#25
dnlDAEMON_OPTIONS(`Port=submission,。
。
。
。
)dnl#587
dnlDAEMON_OPTIONS(`Port=25,。
。
。
。
)dnl
dnlDAEMON_OPTIONS(`Port=587,。
。
。
。
)dnl
打开默认的ssl认证端口:
DAEMON_OPTIONS(`Port=smtps,Name=TLSMTA,M=s')dnl
运行命令,使配置生效:
$m4sendmail.mc>sendmail.cf
重启sendmail服务
三、Dovect服务器的搭建,提供pop3s和imaps服务
SendMail只能实现SMTP协议的功能,而目前在使用邮件系统时很多用户还是习惯使用类似foxmail的一些邮件客户端软件,这些软件通常都支持pop3、IMAP4等协议。
如果希望在RHEL中实现pop3、IMAP4需要使用dovecot。
默认的pop3和imap提供的是明文传输,安装完成后,只要直接启动dovecot服务即可,如果需要打开pop3s和imaps服务,需要如下配置:
修改在/etc/dovecot.conf文件,在
protocls=imapimapspop3pop3s
行中删除不需要协议,为了安全,我们使用如下配置:
protocls=imapspop3s
在/etc/pki/tls/certs目录下输入以下命令生成密钥:
$makedovect.pem
根据提示输入相应信息生成认证文件,并修改相应配置
重启dovect服务即可
使用命令查看端口:
$netstat–lnupt
tcp 0 00.0.0.0:
465 0.0.0.0:
* LISTEN 4150/sendmail:
ace
tcp 0 0192.168.1.12:
993 0.0.0.0:
* LISTEN 4111/dovecot
tcp 0 0192.168.1.12:
995 0.0.0.0:
* LISTEN 4111/dovecot
附录:
1添加本地路由
在linux下添加本地路由修改/etc/hosts即可;
在windows下,修改%windir%/system32/drivers/etc/hosts即可。
2Access数据的参数说明
Thesendmailaccessdatabasefilecanbecreatedtoacceptorrejectmailfromselecteddomains.
Since"/etc/mail/access"isadatabase,aftercreatingthetextfile,usemakemaptocreatethedatabasemap.
#makemaphash/etc/mail/access.db
Belowiswhatmyaccessfilecurrentlylookslikeandcanbeusedasastartingpoint.Allinternaladdresseshavebeenchangedexceptforspammers!
!
#bydefaultweallowrelayingfromlocalhost...
localhost.localdomainRELAY
localhostRELAY
127.0.0.1RELAY
#AllowConnectfromlocalserverIPs
Connect:
207.44.206.144OK
#AcceptMail
#acceptmailfromPayPa