sendmail安装笔记

安装所需软件
sendmail.8.12.10.tar.gzhttp://www.sendmail.org/
cyrus-sasl-2.1.18.tar.gzhttp://asg.web.cmu.edu/cyrus/

安装步骤
1、 先安装cyrus-sasl-2.1.18.tar.gz,sendmail安装时要用到sasl(简单认证和安全层协议)的
2、 库文件的头文件。
解压缩:
#tar-zxvfcyrus-sasl-2.1.18.tar.gz
编译:
进入刚解压的源码目录,运行以下命令完成安装。
#./configure--prefix=/usr/local/sasl2--enable-login
一定要加--enable-login,因为SASL2默认不支持login这种验证方式,而OUTLOOK是通过
login来进行SMTP验证的。
#make#编译
#makeinstall #安装
完成以上linux程序安装三步曲之后,就可以开始配置和测试了。

2、配置SASL
为了把SASL应用于sendmail认证,还需进行一些配置工作。sendmail会到/usr/lib目录下去
找SASL2库,而我们是把程序安装在/usr/local/sasl2中,为什么不把软件安装在/usr/lib目录
呢?这主要是为了好管理自已安装的软件啦。所以我们要在/usr/lib目录下做一个链接:
#cd/usr/lib
#ln-s/usr/local/sasl2/lib/*.
ok,接着要在/var/目录下建一个目录给saslauthd进程存在临时数据。
#cd/var
#mkdirstate
#cdstate
#mkdirsaslauthd
注:如果没有这些目录,运行saslauthd时,会提示出错。
ok,接着为确保CYRUS-SASL2函数库知道怎样验证所收来的SASL认证请求,必须创建一
个SASL的配置文件来把MTA程序定义成一个SASL应用。配置文件名为Sendmail.conf(注
意是大写的S),位于/usr/lib/sasl2目录中,也就是/usr/local/sasl2/lib/sasl2这个目录,记得上
面新建的链接了吗?在该文件中你定义你希望使用的认证数据库方法,以下这个例子使用
saslauthd来验证认证请求。
#cd/usr/lib/sasl2
#echo'pwcheck_method:saslauthd'>;Sendmail.conf

3、测试
ok,现在可以运行saslauthd了,并进行测试。
#cd/usr/local/sasl2/sbin
#./saslauthd-ashadow
用shadow的用户和密码进行验证
#./testsaslauthd-uuserid-ppassword
0:OK"Success."
如果出现以上信息,就说明saslauthd正常运行了。testsaslauthd程序默认是没有编译的,你
需要在源码目录树的saslauthd子目录中运行#maketestsaslauthd命令生成。

4、sasl2安装完成后,就要开始安装sendmail了。
先解压sendmail源码。
#tar-zxvfsendmail.8.12.10.tar.gz
如果要sendmail支持SASL,需要修改源码的位置配置文件site.config.m4。site.config.m4位
于源码目录树的devtools/Site。文件中应包含以下行:
PREPENDDEF(`confMAPDEF',`-DMAP_REGEX')
APPENDDEF(`confENVDEF',`-DTCPWRAPPERS-DSASL=2')
APPENDDEF(`conf_sendmail_LIBS',`-lwrap-lsasl2')
APPENDDEF(`confLIBDIRS',`-L/usr/local/sasl2/lib')
APPENDDEF(`confINCDIRS',`-I/usr/local/sasl2/include')
第一行配置正则表达式相关内容
第二、三行配置表示在sendmail程序中支持sasl2和tcp_wrapper(可通过hosts.allow和
hosts.deny控制访问)
第四、五行配置指出sasl2的库文件和头文件的位置。

ok,接着在编译前要建立一些用户和目录,并确保有正确的权限。
sendmail必须有一个set-group-id(默认是smmsp组)的程序来在一个组可写的目录中查询
排队邮件。所以我们要建立一个smmsp用户和组。并建立如下目录并设置相应的权限,具
体设置要求可查询源码目录树下sendmail/SECURITY文档。
#groupaddsmmsp
#useraddsmmsp-d/var/spool/clientmqueue-s/dev/null
#mkdir/var/spool/clientmqueue
#chown-Rsmmsp:smmsp/var/spool/clientmqueue
#chmod-R770/var/spool/clientmqueue
#mkdir/etc/mail
#mkdir/var/spool/mqueue
#chmodgo-w//etc/etc/mail/usr/var/var/spool/var/spool/mqueue
#chownroot//etc/etc/mail/usr/var/var/spool/var/spool/mqueue

ok,接下来就可以进入源码目录树开始编译了。
#./Build-c
-c选项能删除上次编译产生的文件。
#./Buildinstall
编译完成后就可以进行安装。

5、sendmail配置
要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目录。

sendmail.mc配置文档内容如下:
divert(-1)
include(`/usr/share/sendmail-cf/m4/cf.m4')
VERSIONID(`linuxsetupforRedHatLinux')dnl
OSTYPE(`linux')
dnlUncommentandeditthefollowinglineifyourmailneedstobesentout
dnlthroughanexternalmailserver:
dnldefine(`SMART_HOST',`smtp.your.provider')
define(`confDEF_USER_ID',``8:12'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
dnldefine(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT',`1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE',`/etc/mail/aliases')dnl
define(`STATUS_FILE',`/etc/mail/statistics')dnl
define(`UUCP_MAILER_MAX',`2000000')dnl
define(`confUSERDB_SPEC',`/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS',`authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS',`A')dnl
TRUST_AUTH_MECH(`EXTERNALDIGEST-MD5CRAM-MD5LOGINPLAIN')dnl
define(`confAUTH_MECHANISMS',`EXTERNALGSSAPIDIGEST-MD5CRAM-MD5
LOGINPLAIN')dnl
dnldefine(`confCACERT_PATH',`/usr/share/ssl/certs')
dnldefine(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnldefine(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
dnldefine(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
dnldefine(`confTO_QUEUEWARN',`4h')dnl
dnldefine(`confTO_QUEUERETURN',`5d')dnl
dnldefine(`confQUEUE_LA',`12')dnl
dnldefine(`confREFUSE_LA',`18')dnl
define(`confTO_IDENT',`0')dnl
dnlFEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash-o/etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash-o/etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnlThe'-t'optionwillretrydeliveryife.g.theuserrunsoverhisquota.
FEATURE(local_procmail,`',`procmail-t-Y-a$h-d$u')dnl
FEATURE(`access_db',`hash-T<TMPF>;-o/etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnlThischangessendmailtoonlylistenontheloopbackdevice127.0.0.1
dnlandnotonanyothernetworkdevices.Commentthisoutifyouwant
dnltoacceptemailoverthenetwork.
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0,Name=MTA')
dnlNOTE:bindingbothIPv4andIPv6daemontothesameportrequires
dnlakernelpatch
dnlDAEMON_OPTIONS(`port=smtp,Addr=::1,Name=MTA-v6,Family=inet6')
dnlWestronglyrecommendtocommentthisoneoutifyouwanttoprotect
dnlyourselffromspam.However,thelaptopandusersoncomputersthatdo
dnlnothave24x7DNSdoneedthis.
FEATURE(`accept_unresolvable_domains')dnl
dnlFEATURE(`relay_based_on_MX')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl

记得要使以下两个条语句有效,它的意思是如果access.db访问控制没有设置,则启用以下
验证方式进行smtp验证。
TRUST_AUTH_MECH(`EXTERNALDIGEST-MD5CRAM-MD5LOGINPLAIN')dnl
define(`confAUTH_MECHANISMS',`EXTERNALGSSAPIDIGEST-MD5CRAM-MD5
LOGINPLAIN')dnl

sendmail宏定义说明
divert(n) 为m4定义一个缓冲动作,当n=-1时缓冲被删除,n=0时开始一个新缓冲
OSTYPE 定义宏所使用的操作系统,该宏允许m4程序增加同相关操作系统相关的
文件
Domain 定义MTA将使用哪些域来传输邮件
Feature 定义配置文件中使用的一个特定的功能集
Define 定义配置文件中的一个特定的选项值
MASQUERADE_AS 定义sendmail来应答邮件的其它主机名
MAILER 定义sendmail使用的邮件传输方法
dnl 注释

完成sendmail.mc文档的编写后就可以用m4程序生成正式的sendmail.cf配置文档。语法如
下:
#m4sendmail.mc>;sendmail.cf
也可以用源码目录树下的cf/cf/Build命令生成。前提是你要在该目录下有一个sendmail.mc
文档。语法如下:
#./Buildsendmail.cf

ok,接着就可以把sendmail.cfandsubmit.cf文档安装到/etc/mail目录中的,语法如下:
#./Buildinstall-cf
其实也可以自已用cp命令拷贝的啦。记得把sendmail.mc文档也拷贝一份到/etc/mail目录,
以便以后修改配置时可重新生成sendmail.cf文档。

ok,接着到/etc/mail目录下配置一些文档。
#cd/etc/mail
#echo'examply.com'>;>;local-host-names 接收邮件的主机名
#echo'localhostRELAY'>;>;access 用来拒绝或允许来自某个域的邮件,本例允许
本地转发。
#makemaphashaccess<access 生成access.db数据库
#touchdomaintable 用来把旧域名映射互新域名
#makemaphashdomaintable<domaintable
#touchmailertable 来覆盖向指定域的路由
#makemaphashmailertable<mailertable
#touchtrusted-users
#touchvirtusertable 用来把用户和域名映射到其它地址
#makemaphashvirtusertable<virtusertable
#chownroot:wheel/var/spool/mqueue/
#chmod700/var/spool/mqueue
#touchaliases 别名数据库,文本形式。可参照源码目录树下
sendmail/aliases文件。
#newaliases 从文本文件中创建一个新的别名数据库文件。
#sendmail-v-bi 调试启动。
/etc/mail/aliases:42aliases,longest10bytes,432bytestotal
如果出现以上提示信息,则启动成功。可用以下命令正式启动:
#sendmail-bd-q30m
该命令以后台进程方式(-bd)运行,并使其每隔30分钟(-q30m)轮询一次未发送邮件队
列,检查是否有新邮件。

服务器启动后,可以用telnet连接服务器。
#telnetlocalhost25
Trying127.0.0.1...
Connectedtolocalhost.
Escapecharacteris'^]'.
220test.tigerheadESMTPSendmail8.12.10/8.12.10;Tue,30Mar200414:50:14+0800
ehlotest 你输入的命令,按回车结束。
250-test.tigerheadHelloLOCALHOST.localdomain[127.0.0.1],pleasedtomeetyou
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTHDIGEST-MD5CRAM-MD5LOGINPLAIN
250-DELIVERBY
250HELP
以250-开头的为服务器的响应信息。注意倒数第三行,这就是成功配置smtp验证的显示。
输入quit离开。



安装完成后为确保系统安全,还需调整一些目录的权限。可参考sendmail源码目录下
sendmail/SECURITY文档。
#chmod0640/etc/mail/aliases/etc/mail/aliases.{db,pag,dir}
#chmod0640/etc/mail/*.{db,pag,dir}
#chmod0640/etc/mail/statistics/var/log/sendmail.st
#chmod0600/var/run/sendmail.pid/etc/mail/sendmail.pid
-r-xr-sr-x rootsmmsp .../PATH/TO/sendmail
drwxrwx--- smmspsmmsp .../var/spool/clientmqueue
drwx------ rootwheel .../var/spool/mqueue
-r--r--r-- rootwheel .../etc/mail/sendmail.cf
-r--r--r-- rootwheel .../etc/mail/submit.cf

6、sendmail功能介绍
aliases别名数据库设置
test: test1,test2,test3 设置test群组别名,test不是一个实际的用户,只是一个别名。发给
test的信,test1,2,3都可收到。
test: test,testbak 在testbak邮箱中备份test的邮件。
test: test,[email protected] 远程邮件备份,原理同上。
test::include:/etc/mail/userlist 使用用户列表设置群组。
userlist格式如下:
test1,\
test2,\
test3,\
test4
关于系统预设aliases,由于sendmail预设用mailer-daemonandpostmaster作为资料传送者,
或邮件退回的帐号,但系统实际没有这两个帐号,所以要如下设置别名。
mailer-daemon:postmaster
postmaster:root
设置完成后不要忘了用newaliases命令生成数据库。

~/.forward文件配置
其实该文档的作用和aliases数据库的作差不多啦,都是配置别名,做邮件转发的。因为alises
只能由管理员控制,个人用户不能修改,所以就可以在个人的目录下建立一个转寄文档。以
设置个人的邮件转寄列表。文档格式如下:
test
test1
test2
test3
andoson
但由于个人用户安全意识差,如果设置不当会有安全漏洞,不建议使用。

access访问控制列表设置
92.168RELAY
test.NET OK
test.COMREJECT
test.COM 550SORRY,WEDON'TALLOWSPAMMERSHERE
test.ORG DISCARD
Ok--远程主机可以向你的邮件服务器发送邮件;
RELAY--允许中转;
REJECT--不能向你的邮件服务器发邮件和不能中转;
DISCARD--发来的邮件将被丢弃,同时并不向发送者返回错误信息。
nnntext--发来的邮件将被丢弃,但sendmail将会向发送者返回nnn确定的smtp代码和text
变量确定的文本描述。
设置完成后要用makemaphashaccess.db<access命令生成数据库。

mailq邮件队列查询命令。
Q-ID 邮件id号。
Size 邮件容量。
Q-Time 邮件进入队列(也就是/var/spool/mqueue目录)的时间和不能邮寄的原因。
Sender/Recipient 发信和收信人的邮箱地址。

mailstats邮寄状态查询命令,可查询sendmail运行作至今邮件收发总计资料。
M:
msgsfr:发送的邮件数量。
bytes_from:邮件容量
megsto:收到邮件的数量。
bytes_to:同上
msgsrej:邮件deny的次数。
msgsdis:邮件discard的次数。
Mailer:esmtp对外邮件,local本地邮件。

mail邮件命令
mail 查看/var/spool/mail/目录下自已邮箱内容。以q退出把看过的邮件保存在
~/mbox中。
[email protected] 直接发邮件给人。
mail-s'titletext'[email protected]<mail.txt 把文档中内容邮寄出去。
mail-f~/mbox 查看home目录下邮箱内容。
用mail发附件也是可行,要用到uuencodeanduudecode命令进行编码。
编码:uuencode[file]nameexample:uuencodehellohello>;hello.uuedefaultinput
isstdin;defaultoutputisstdout.
解码:uudecode[-ooutfile]nameexample:uudecodehello.uue可以用-o选项输出另外一个
文件名。
#uuencode~/.bashrcbashrc|mail-s'testuuencode'[email protected]

转自:http://www.chinaunix.net/jh/14/480130.html

你可能感兴趣的:(linux,应用服务器,正则表达式,配置管理,Access)