sendmail学习随笔
时间:2006-08-29 来源:zhjno1xp
需要安装的套件:
Sendmail-cf-xx //sendmail的设定文件
Sendmail-xx //sendmail邮件服务器程序
m4-xx //转换sendmail设定文件的程序,
mailx-xx //mail命令
建立mailserver最好给主机邦定一个internet上的mx记录用来和外界通信(a记录也可以),对方服务器可以使用[email protected]来发送邮件到本地服务器,本地服务器发送邮件给外部服务器的时候,如果本地域名不能被解析有可能造成邮件被阻挡(根据对方服务器的设置)。
相关设定文件:
/etc/mail/sendmail.cf:sendmail的主要设定文件,但其可读性很差,一般都修改/etc/mail/sendmail.mc,然后使用m4命令到出到sendmail.cf
/etc/mail/local-host-names:设定收发邮件的主机名称,如果主机名为linux1.slq.com,linux2.slq.com,在这里添加这两个主机名来使[email protected],[email protected]都可以接收到邮件。
/etc/mail/access.db:用来设定邮件服务器的访问权限,设定ip地址与权限对,主要权限有RELAY(接受来自该主机要求发送的邮件),DISCARD(拒绝该主机要求发送的邮件),REJECT(拒绝该主机要求发送的邮件,返回错误信息), 编辑本文件,需要修改/etc/access,然后使用makemap来转成access.db,所作的更改即时生效,但如果服务器启用了smtp身份验证,那么access.db所作的设置就失效了。
/etc/aliases.db:用来指定用户的别名,可以用来设定邮件群组。编辑本文件,需要修改/etc/aliases,然后使用newalias来转成aliases.db,所作的更改即时生效。
/etc/mail/statistics:纪录sendmail收发邮件的信息。
~/.forward:普通用户设定转发功能,将收到的邮件转发给这个文件中设定的邮箱。
相关程序文件:
/usr/sbin/sendmail:sendmail的主程序,读取sendmail.cf中的设置,使用25号端口。
/usr/bin/m4:将sendmail.mc转成sendmail.cf的工具。
/usr/sbin/ipop3d:pop程序,使用110端口。
/usr/sbin/makemap:将access转成access.db的工具。
/usr/sbin/mailstats:将/etc/mail/statistics读取出来的工具。
/usr/bin/newaliases:将/etc/aliases转成/etc/aliases.db的工具。
/usr/bin/mailq:查看/var/spool/mqueue所堵信件的工具
邮件目录:
/var/spool/mail/username:MTA收到邮件的时候会存在这个目录的username文件中,等待用户使用pop3工具取走邮件。
/var/spool/mqueue:所有因为网络或者对方主机问题堵住的邮件都会暂存在这个目录中,主机会每隔30~60分钟重新发送一边,通过修改/etc/sysconfig/sendmail文件中的QUEUE=1h可以更改重试间隔,比如改为QUEUE=15m。
启动邮件服务器:
service sendmail start //启动sendmail服务
vi /etc/xinetd.d/ipop3
将disabled = yes 改正 disabled = no //取消对pop3的禁用
service xinetd restart //重新启动xinetd服务来应用改动,使pop3工作。
设定sendmail.cf:
先修改/etc/mail/sendmail.mc文件,几个重要的配置选项如下:
l DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1,Name=MTA’)改为
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0,Name=MTA’)
这样sendmail可以监听所有网络发过来的邮件,否则只会监听本地邮件(127.0.0.1送过来的邮件)。
l dnl TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PALIN’)dnl以及
dnl define(`confAUTH_MECHANISMS’, `DIGEST-MD5 LOGIN PLAIN’)dnl
的注释去掉,可以启用smtp的身份验证。
然后运行以下命令:
m4 sendmail.mc > sendmail.cf //来将sendmail.mc转变为sendmail.cf,做之前备份sendmail.cf
设定local-host-names:
vi /etc/mail/local-host-names
添加主机名称到这个文件中,比如主机在dns中有linux1.slq.com,linux2.slq.com,他们都指向10.138.8.253这台主机,那么在local-host-names中添加这两个FQDN,[email protected],[email protected]这两个地址都可以接受发给leozhang的邮件。
设定access.db:
cd /etc/mail
vi access
添加主机的域名或ip地址-权限对,范例如下:
192.168.0 RELAY //接受192.168.0.0/24网络上来的邮件发送请求
192.168.1.100 DISCARD //不接受192.168.1.100主机上来的邮件发送请求
[email protected] REJECT //不接受abc.com主机上的test用户的发送邮件请求
from:[email protected] //不接受来自your-domain.com主机上的test用户的发送邮件请求
to: [email protected] //不接受发送给your-domain.com主机上的test用户的发送邮件请求
然后,makemap hash /etc/mail/access < /etc/mail/access 来使配置生效。
设定aliases.db:
vi /etc/aliases
IT: leozhang, jason, kaiser //设定IT这个别名包含3个邮件地址,发送给IT的邮件会分发到这3个人
leozhang: [email protected] //发送给leozhang的邮件都会发一份到[email protected]
vi /etc/mail/edp.maillist //首先建立一个文件添加如下内容
leozhang, \
daniel, \
jason, \
kaiser //可以写在一行也可以用“\”来断行
edp: :include:/etc/mail/edp.maillist //将设定好的别名文件include进来
在任何路径下输入:newaliases //将/etc/aliases内容转换到/etc/aliases.db,使设置生效
设定.forward文件:
假设用户leozhang登录,
cd ~
vi .forward
fidelio //.forward文件中添加要转到的用户邮箱,每个占一行
jason //.forward文件中添加要转到的用户邮箱,每个占一行
[email protected] //.forward文件中添加要转到的用户邮箱,每个占一行
此文件保存后立即生效,保存推出后运行,
chmod 644 .forward //只有拥有者才能修改列表来提高安全性
察看邮件队列内容:
mailq 或者 sendmail –bp
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
k7TDIVMI001446 450 Tue Aug 29 21:18 <[email protected]>
(Deferred: 451 mta136.mail.cnb.yahoo.com Resources temporaril)
Q-ID:邮件的队列号。Size:邮件的大小。Q-Time:进入队列的时间。Sender/Recipient:发送与接受人的邮箱。
察看邮件服务器统计信息:
mailstats
M msgsfr bytes_from msgsto bytes_to msgsrej msgsdis Mailer
3 41 19626K 67 183K 1 0 local
4 23 48K 284 321K 1 0 smtp
5 17 34K 36 19583K 5 0 esmtp
9 294 479K 134 462K 0 0 procmail
=====================================================
T 375 20187K 521 20549K 7 0
C 364 363 7
M:是mailer的代号。msgsfr:从此服务器上发出去的邮件。
Msgsfr:代表本服务器发送的邮件数。
Bytes_from:发送出邮件的大小。
Msgsto:收到邮件数。
Bytes_to:首要邮件的大小。
Msgsrej:邮件被deny的次数。
Msgsdis:邮件被discard的次数。
Mailer:sendmail包含的mailer,esmtp主要对外,local主要处理本地的mail。