|
sendmail安装笔记下篇
<div class="center title">sendmail安装笔记下篇 </div>
<hr align="center" width="720" size="1" color="#A1BED4" height="1"></hr>
<div class="center"> 2006-10-24 18:54:59 作者:1teng 出处:本站收集 浏览次数:<span id="hits" class="rb12">0</span> 评分等级:0</div>
<div class="con_text" id="11616872991"><a href="http://bbs.1teng.com/Site/2006/1024/851.htm">来源:服务器论坛(http://bbs.1teng.com/)<br />作者:magi<br />原文:sendmail安装笔记下篇(http://bbs.1teng.com/Site/2006/1024/851.htm)</a></div>
<div class="con_text" id="1161687299l"><strong>5、sendmail配置</strong> <br /> 要sendmail正常运行,还需配置几个文件,首先最重要的就是sendmail.cf 文件了。它在源码目录树下的cf/cf目录下有很多例子可参考。你可以拷贝使用。由于sendmail.cf中的语法很复杂,所以不建议手工修改。我们可以以sendmail.mc文档配合sendmail-cf目录下的宏通过m4预处理器自动生成。m4预处理器用来从一组宏文件中创建sendmail配置文件。宏文件作为输入被读进来。宏被展开,然后写到一个输出文件。sendmail-cf目录一般放在/usr/share目录下。其实sendmail-cf目录的内容和源码目录树下的cf目录的内容是一样的,所以,为了保证sendmail-cf目录的内容与安装版本同步,要把源码目录树下的cf目录的内容拷贝到/usr/share/sendmail-cf目录。
<p> sendmail.mc配置文档内容如下: <br /> divert(-1) <br /> include(`/usr/share/sendmail-cf/m4/cf.m4') <br /> VERSIONID(`linux setup for Red Hat <a href="http://bbs.1teng.com/system/Linux/index.htm" target="_blank" class="keylink">Linux</a>')dnl <br /> OSTYPE(`linux') <br /> dnl Uncomment and edit the following line if your mail needs to be sent out <br /> dnl through an external mail server: <br /> dnl define(`SMART_HOST',`smtp.your.provider') <br /> define(`confDEF_USER_ID',``8:12'')dnl <br /> undefine(`UUCP_RELAY')dnl <br /> undefine(`BITNET_RELAY')dnl <br /> dnl define(`confAUTO_REBUILD')dnl <br /> define(`confTO_CONNECT', `1m')dnl <br /> define(`confTRY_NULL_MX_LIST',true)dnl <br /> define(`confDONT_PROBE_INTERFACES',true)dnl <br /> define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl <br /> define(`ALIAS_FILE', `/etc/mail/aliases')dnl <br /> define(`STATUS_FILE', `/etc/mail/statistics')dnl <br /> define(`UUCP_MAILER_MAX', `2000000')dnl <br /> define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl <br /> define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl <br /> define(`confAUTH_OPTIONS', `A')dnl <br /> TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl <br /> define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 <br /> LOGIN PLAIN')dnl <br /> dnl define(`confCACERT_PATH',`/usr/share/ssl/certs') <br /> dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt') <br /> dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem') <br /> dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem') <br /> dnl define(`confTO_QUEUEWARN', `4h')dnl <br /> dnl define(`confTO_QUEUERETURN', `5d')dnl <br /> dnl define(`confQUEUE_LA', `12')dnl <br /> dnl define(`confREFUSE_LA', `18')dnl <br /> define(`confTO_IDENT', `0')dnl <br /> dnl FEATURE(delay_checks)dnl <br /> FEATURE(`no_default_msa',`dnl')dnl <br /> FEATURE(`smrsh',`/usr/sbin/smrsh')dnl <br /> FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl <br /> FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl <br /> FEATURE(redirect)dnl <br /> FEATURE(always_add_domain)dnl <br /> FEATURE(use_cw_file)dnl <br /> FEATURE(use_ct_file)dnl <br /> dnl The '-t' option will retry delivery if e.g. the user runs over his quota. <br /> FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl <br /> FEATURE(`access_db',`hash -Tlt;TMPF> -o /etc/mail/access.db')dnl <br /> FEATURE(`blacklist_recipients')dnl <br /> EXPOSED_USER(`root')dnl <br /> dnl This changes sendmail to only listen on the loopback device 127.0.0.1 <br /> dnl and not on any other network devices. Comment this out if you want <br /> dnl to accept email over the network. <br /> DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA') <br /> dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires <br /> dnl a kernel patch <br /> dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6') <br /> dnl We strongly recommend to comment this one out if you want to protect <br /> dnl yourself from spam. However, the laptop and users on computers that do <br /> dnl not have 24x7 DNS do need this. <br /> FEATURE(`accept_unresolvable_domains')dnl <br /> dnl FEATURE(`relay_based_on_MX')dnl <br /> MAILER(smtp)dnl <br /> MAILER(procmail)dnl </p>
<p> 记得要使以下两个条语句有效,它的意思是如果access.db访问控制没有设置,则启用以下验证方式进行smtp验证。 <br /> TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl <br /> define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 <br /> LOGIN PLAIN')dnl </p>
<p> sendmail宏定义说明 <br /> divert(n) 为m4定义一个缓冲动作,当n=-1时缓冲被删除,n=0时开始一个新缓冲OSTYPE 定义宏所使用的操作<a href="http://bbs.1teng.com/system" target="_blank" class="keylink">系统</a>,该宏允许m4程序增加同相关操作<a href="http://bbs.1teng.com/system" target="_blank" class="keylink">系统</a>相关的文件 <br /> Domain 定义MTA将使用哪些域来传输邮件 <br /> Feature 定义配置文件中使用的一个特定的功能集 <br /> Define 定义配置文件中的一个特定的选项值 <br /> MASQUERADE_AS 定义sendmail来应答邮件的其它主机名 <br /> MAILER 定义sendmail使用的邮件传输方法 <br /> dnl 注释 </p>
<p> 完成sendmail.mc文档的编写后就可以用m4程序生成正式的sendmail.cf配置文档。语法如下: <br /> # m4 sendmail.mc gt; sendmail.cf <br /> 也可以用源码目录树下的cf/cf/Build命令生成。前提是你要在该目录下有一个sendmail.mc文档。语法如下: <br /> # ./Build sendmail.cf </p>
<p> ok,接着就可以把sendmail.cf and submit.cf文档安装到/etc/mail目录中的,语法如下: <br /> # ./Build install-cf <br /> 其实也可以自已用cp命令拷贝的啦。记得把sendmail.mc文档也拷贝一份到/etc/mail目录,以便以后修改配置时可重新生成sendmail.cf文档。 </p>
<p> ok,接着到/etc/mail目录下配置一些文档。 <br /> # cd /etc/mail <br /> # echo 'examply.com' >> local-host-names 接收邮件的主机名 <br /> # echo 'localhost RELAY' >> access 用来拒绝或允许来自某个域的邮件,本例允许本地转发。 <br /> # makemap hash access < access 生成access.db数据库 <br /> # touch domaintable 用来把旧域名映射互新域名 <br /> # makemap hash domaintable < domaintable <br /> # touch mailertable 来覆盖向指定域的路由 <br /> # makemap hash mailertable < mailertable <br /> # touch trusted-users <br /> # touch virtusertable 用来把用户和域名映射到其它地址 <br /> # makemap hash virtusertable < virtusertable <br /> # chown root:wheel /var/spool/mqueue/ <br /> # chmod 700 /var/spool/mqueue <br /> # touch aliases 别名数据库,文本形式。可参照源码目录树下 <br /> sendmail/aliases文件。 <br /> # newaliases 从文本文件中创建一个新的别名数据库文件。 <br /> # sendmail -v -bi 调试启动。 <br /> /etc/mail/aliases: 42 aliases, longest 10 bytes, 432 bytes total <br /> 如果出现以上提示信息,则启动成功。可用以下命令正式启动: <br /> # sendmail -bd -q30m <br /> 该命令以后台进程方式(-bd)运行,并使其每隔30分钟(-q30m)轮询一次未发送邮件队列,检查是否有新邮件。 </p>
<p> 服务器启动后,可以用telnet连接服务器。 <br /> # telnet localhost 25 <br /> Trying 127.0.0.1... <br /> Connected to localhost. <br /> Escape character is '^]'. <br /> 220 test.tigerhead ESMTP Sendmail 8.12.10/8.12.10; Tue, 30 Mar 2004 14:50:14 0800 <br /> ehlo test 你输入的命令,按回车结束。 <br /> 250-test.tigerhead Hello LOCALHOST.localdomain , pleased to meet you <br /> 250-ENHANCEDSTATUSCODES <br /> 250-PIPELINING <br /> 250-8BITMIME <br /> 250-SIZE <br /> 250-DSN <br /> 250-ETRN <br /> 250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN <br /> 250-DELIVERBY <br /> 250 HELP <br /> 以250-开头的为服务器的响应信息。注意倒数第三行,这就是成功配置smtp验证的显示。输入quit离开。</p>
<p> 安装完成后为确保<a href="http://bbs.1teng.com/system" target="_blank" class="keylink">系统</a>安全,还需调整一些目录的权限。可参考sendmail源码目录下 <br /> sendmail/SECURITY文档。 <br /> # chmod 0640 /etc/mail/aliases /etc/mail/aliases.{db,pag,dir} <br /> # chmod 0640 /etc/mail/*.{db,pag,dir} <br /> # chmod 0640 /etc/mail/statistics /var/log/sendmail.st <br /> # chmod 0600 /var/run/sendmail.pid /etc/mail/sendmail.pid <br /> -r-xr-sr-x root smmsp ... /PATH/TO/sendmail <br /> drwxrwx--- smmsp smmsp ... /var/spool/clientmqueue <br /> drwx------ root wheel ... /var/spool/mqueue <br /> -r--r--r-- root wheel ... /etc/mail/sendmail.cf <br /> -r--r--r-- root wheel ... /etc/mail/submit.cf </p>
<p> <strong>6、sendmail功能介绍</strong> <br /> aliases 别名数据库设置 <br /> test: test1,test2,test3 设置test群组别名,test不是一个实际的用户,只是一个别名。发给test的信,test1,2,3都可收到。 <br /> test: test,testbak 在testbak邮箱中备份test的邮件。 <br /> test: test,test@163.com 远程邮件备份,原理同上。 <br /> test: :include: /etc/mail/userlist 使用用户列表设置群组。 <br /> userlist格式如下: <br /> test1, \ <br /> test2, \ <br /> test3, \ <br /> test4 <br /> 关于<a href="http://bbs.1teng.com/system" target="_blank" class="keylink">系统</a>预设aliases,由于sendmail预设用mailer-daemon and postmaster作为资料传送者,或邮件退回的帐号,但<a href="http://bbs.1teng.com/system" target="_blank" class="keylink">系统</a>实际没有这两个帐号,所以要如下设置别名。 <br /> mailer-daemon: postmaster <br /> postmaster: root <br /> 设置完成后不要忘了用newaliases命令生成数据库。 </p>
<p> ~/.forward文件配置 <br /> 其实该文档的作用和aliases数据库的作差不多啦,都是配置别名,做邮件转发的。因为alises只能由管理员控制,个人用户不能修改,所以就可以在个人的目录下建立一个转寄文档。以设置个人的邮件转寄列表。文档格式如下: <br /> test <br /> test1 <br /> test2 <br /> test3 <br /> and os on <br /> 但由于个人用户安全意识差,如果设置不当会有安全<a href="http://bbs.1teng.com/safe/loop/index.htm" target="_blank" class="keylink">漏洞</a>,不建议使用。 </p>
<p> access访问控制列表设置 <br /> 92.168 RELAY <br /> test.NET OK <br /> test.COM REJECT <br /> test.COM 550 SORRY,WE DON'T ALLOW SPAMMERS HERE <br /> test.ORG DISCARD <br /> Ok--远程主机可以向你的邮件服务器发送邮件; <br /> RELAY--允许中转; <br /> REJECT--不能向你的邮件服务器发邮件和不能中转; <br /> DISCARD--发来的邮件将被丢弃,同时并不向发送者返回错误信息。 <br /> nnn text-- 发来的邮件将被丢弃,但sendmail将会向发送者返回nnn确定的smtp代码和text变量确定的文本描述。 <br /> 设置完成后要用makemap hash access.db < access命令生成数据库。 </p>
<p> mailq邮件队列查询命令。 <br /> Q-ID 邮件id号。 <br /> Size 邮件容量。 <br /> Q-Time 邮件进入队列(也就是/var/spool/mqueue目录)的时间和不能邮寄的原因。 <br /> Sender/Recipient 发信和收信人的邮箱地址。 </p>
<p> mailstats邮寄状态查询命令,可查询sendmail运行作至今邮件收发总计资料。 <br /> M : <br /> msgsfr:发送的邮件数量。 <br /> bytes_from:邮件容量 <br /> megsto:收到邮件的数量。 <br /> bytes_to:同上 <br /> msgsrej:邮件deny的次数。 <br /> msgsdis:邮件discard的次数。 <br /> Mailer :esmtp对外邮件 ,local本地邮件 。 </p>
<p> mail邮件命令 <br /> mail 查看/var/spool/mail/目录下自已邮箱内容。以q退出把看过的邮件保存在~/mbox中。 <br /> mail <a class="10" href="mailto:test@example.com">test@example.com</a> 直接发邮件给人。 <br /> mail -s 'title text' <a class="10" href="mailto:test@example.com">test@example.com</a> < mail.txt 把文档中内容邮寄出去。 <br /> mail -f ~/mbox 查看home目录下邮箱内容。 <br /> 用mail发附件也是可行,要用到uuencode and uudecode命令进行编码。 <br /> 编码:uuencode [file] name example:uuencode hello hello>hello.uue default input <br /> is stdin;default output is stdout. <br /> 解码:uudecode [-o outfile] name example:uudecode hello.uue 可以用-o选项输出另外一个 <br /> 文件名。 <br /> # uuencode ~/.bashrc bashrc | mail -s 'test uuencode' <a class="10" href="mailto:test@example.com">test@example.com</a><br /></p><p><br /> |
|