文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» Mail服务器 » sendmail学习笔记~转       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: [转载] sendmail学习笔记~转  ( 查看:424  回复:6 )   
  本主题由 夏日的风 于 2008-9-1 21:11 设置高亮  
 
夏日的风
副版主  点击可查看详细


论坛万户侯  
帖子 720
精华 1
无忧币 2587
积分 914
阅读权限 140
注册日期 2005-12-31
最后登录 2008-10-9 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-6-19 11:45   标题:sendmail学习笔记~转
上一帖 |
sendmail学习笔记 Ver 1.0 作者:Jims
http://www.ringkee.com
说明:欢迎转载

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

安装步骤
1、 先安装cyrus-sasl-2.1.18.tar.gz,sendmail安装时要用到sasl(简单认证和安全层协议)的
2、 库文件的头文件。
解压缩:
# tar -zxvf cyrus-sasl-2.1.18.tar.gz
编译:
进入刚解压的源码目录,运行以下命令完成安装。
#./configure --prefix=/usr/local/sasl2 --enable-login
一定要加--enable-login,因为SASL2默认不支持login这种验证方式,而OUTLOOK是通过
login来进行SMTP验证的。
#make           # 编译
#make install # 安装
完成以上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
# mkdir state
# cd state
# mkdir saslauthd
注:如果没有这些目录,运行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 -a shadow
用shadow的用户和密码进行验证
# ./testsaslauthd -u userid -p password
0: OK "Success."
如果出现以上信息,就说明saslauthd正常运行了。testsaslauthd程序默认是没有编译的,你
需要在源码目录树的saslauthd子目录中运行     # make testsaslauthd命令生成。

4、sasl2安装完成后,就要开始安装sendmail了。
先解压sendmail源码。
# tar -zxvf sendmail.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文档。
# groupadd smmsp  
# useradd smmsp -d /var/spool/clientmqueue -s /dev/null
# mkdir /var/spool/clientmqueue
# chown -R smmsp:smmsp /var/spool/clientmqueue   
# chmod -R 770 /var/spool/clientmqueue   
# mkdir /etc/mail
# mkdir /var/spool/mqueue
# chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
# chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue

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

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(`linux setup for Red Hat Linux')dnl
OSTYPE(`linux')
dnl Uncomment and edit the following line if your mail needs to be sent out
dnl through an external mail server:
dnl define(`SMART_HOST',`smtp.your.provider')
define(`confDEF_USER_ID',``8:12'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
dnl define(`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(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl               
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5  
LOGIN PLAIN')dnl
dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
define(`confTO_IDENT', `0')dnl
dnl FEATURE(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
dnl The '-t' option will retry delivery if e.g. the user runs over his quota.
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db',`hash -T; -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnl This changes sendmail to only listen on the loopback device 127.0.0.1
dnl and not on any other network devices. Comment this out if you want
dnl to accept email over the network.
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')
dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl       a kernel patch
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not have 24x7 DNS do need this.
FEATURE(`accept_unresolvable_domains')dnl
dnl FEATURE(`relay_based_on_MX')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl

记得要使以下两个条语句有效,它的意思是如果access.db访问控制没有设置,则启用以下
验证方式进行smtp验证。
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl               
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5  
LOGIN PLAIN')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配置文档。语法如
下:
# m4 sendmail.mc >; sendmail.cf
也可以用源码目录树下的cf/cf/Build命令生成。前提是你要在该目录下有一个sendmail.mc
文档。语法如下:
# ./Build sendmail.cf  

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

ok,接着到/etc/mail目录下配置一些文档。
# cd /etc/mail  
# echo 'examply.com' >;>; local-host-names  接收邮件的主机名
# echo 'localhost    RELAY'  >;>; access  用来拒绝或允许来自某个域的邮件,本例允许
本地转发。
# makemap hash access ;hello.uue   default input  
is stdin;default output is stdout.
解码:uudecode [-o outfile] name    example:uudecode hello.uue 可以用-o选项输出另外一个
文件名。
# uuencode ~/.bashrc bashrc | mail -s 'test uuencode' test@example.com



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2008-6-19 11:451楼
[ 顶部 ]
 
jqc521
新新人类  点击可查看详细


帖子 46
精华 0
无忧币 4
积分 59
阅读权限 20
注册日期 2008-6-19
最后登录 2008-10-5 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-6-24 10:26 
ding



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2008-6-24 10:262楼
[ 顶部 ]
 
yy1297
技术员  点击可查看详细


十二生肖之鼠   天蝎座   行业勋章   技术勋章   诚信兄弟  
帖子 272
精华 0
无忧币 279
积分 275
阅读权限 30
注册日期 2007-8-10
最后登录 2008-10-8 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-7-1 10:00 
强啊。一步一步很详细啊。



2008-7-1 10:003楼
[ 顶部 ]
 
linzongjian
技术员  点击可查看详细


帖子 643
精华 0
无忧币 496
积分 705
阅读权限 30
注册日期 2006-5-27
最后登录 2008-10-7 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-7-1 19:05 
复制下了。好好学习。。



不求剑破天下高手寂寞,不求权倾朝野万人之上!但求红袖添香于身侧,妙伶清舞于榻前,天下美女尽在我手!
2008-7-1 19:054楼
[ 顶部 ]
 
ye8656
新新人类  点击可查看详细



帖子 68
精华 0
无忧币 0
积分 72
阅读权限 20
注册日期 2007-7-6
最后登录 2008-7-10 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-7-7 18:47 
一步一步很详细啊。



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2008-7-7 18:475楼
[ 顶部 ]
 
jjsmm2008
新新人类  点击可查看详细



帖子 37
精华 0
无忧币 -2
积分 34
阅读权限 20
注册日期 2008-7-17
最后登录 2008-9-27 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-7-24 10:56 
好东西,不过现在看不懂。



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2008-7-24 10:566楼
[ 顶部 ]
 
zengerkeren
新新人类  点击可查看详细



帖子 5
精华 0
无忧币 0
积分 5
阅读权限 20
注册日期 2008-7-31
最后登录 2008-7-31 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-7-31 22:49 
学习中



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2008-7-31 22:497楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号