sendmail + sasl2安装笔记

由 yjnet 在 04-20-2004 22:10 发表:

sendmail + sasl2安装笔记

sendmail安装笔记 Ver 0.1 2004-3-30

安装所需软件

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(简单认证和安全层协议)的库文件的头文件。

解压缩:

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

  1<tmpf> -o /etc/mail/access.db')dnl   
  2  
  3FEATURE(`blacklist_recipients')dnl   
  4  
  5EXPOSED_USER(`root')dnl   
  6  
  7dnl This changes sendmail to only listen on the loopback device 127.0.0.1   
  8  
  9dnl and not on any other network devices. Comment this out if you want   
 10  
 11dnl to accept email over the network.   
 12  
 13DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')   
 14  
 15dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires   
 16  
 17dnl a kernel patch   
 18  
 19dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')   
 20  
 21dnl We strongly recommend to comment this one out if you want to protect   
 22  
 23dnl yourself from spam. However, the laptop and users on computers that do   
 24  
 25dnl not have 24x7 DNS do need this.   
 26  
 27FEATURE(`accept_unresolvable_domains')dnl   
 28  
 29dnl FEATURE(`relay_based_on_MX')dnl   
 30  
 31MAILER(smtp)dnl   
 32  
 33MAILER(procmail)dnl   
 34  
 35  
 36  
 37记得要使以下两个条语句有效,它的意思是如果access.db访问控制没有设置,则启用以下验证方式进行smtp验证。   
 38  
 39TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl   
 40  
 41define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl   
 42  
 43  
 44  
 45sendmail宏定义说明   
 46  
 47divert(n) 为m4定义一个缓冲动作,当n=-1时缓冲被删除,n=0时开始一个新缓冲   
 48  
 49OSTYPE 定义宏所使用的操作系统,该宏允许m4程序增加同相关操作系统相关的文件   
 50  
 51Domain 定义MTA将使用哪些域来传输邮件   
 52  
 53Feature 定义配置文件中使用的一个特定的功能集   
 54  
 55Define 定义配置文件中的一个特定的选项值   
 56  
 57MASQUERADE_AS 定义sendmail来应答邮件的其它主机名   
 58  
 59MAILER 定义sendmail使用的邮件传输方法   
 60  
 61dnl 注释   
 62  
 63  
 64  
 65完成sendmail.mc文档的编写后就可以用m4程序生成正式的sendmail.cf配置文档。语法如下:   
 66  
 67# m4 sendmail.mc &gt; sendmail.cf   
 68  
 69也可以用源码目录树下的cf/cf/Build命令生成。前提是你要在该目录下有一个sendmail.mc文档。语法如下:   
 70  
 71# ./Build sendmail.cf   
 72  
 73  
 74  
 75ok,接着就可以把sendmail.cf and submit.cf文档安装到/etc/mail目录中的,语法如下:   
 76  
 77# ./Build install-cf   
 78  
 79其实也可以自已用cp命令拷贝的啦。记得把sendmail.mc文档也拷贝一份到/etc/mail目录,以便以后修改配置时可重新生成sendmail.cf文档。   
 80  
 81  
 82  
 83ok,接着到/etc/mail目录下配置一些文档。   
 84  
 85# cd /etc/mail   
 86  
 87# echo 'examply.com' &gt;&gt; local-host-names 接收邮件的主机名   
 88  
 89# echo 'localhost RELAY' &gt;&gt; access 用来拒绝或允许来自某个域的邮件,本例允许本地转发。   
 90  
 91# makemap hash access &lt; access 生成access.db数据库   
 92  
 93# touch domaintable 用来把旧域名映射互新域名   
 94  
 95# makemap hash domaintable &lt; domaintable   
 96  
 97# touch mailertable 来覆盖向指定域的路由   
 98  
 99# makemap hash mailertable &lt; mailertable   
100  
101# touch trusted-users   
102  
103# touch virtusertable 用来把用户和域名映射到其它地址   
104  
105# makemap hash virtusertable &lt; virtusertable   
106  
107# chown root:wheel /var/spool/mqueue/   
108  
109# chmod 700 /var/spool/mqueue   
110  
111# touch aliases 别名数据库,文本形式。可参照源码目录树下sendmail/aliases文件。   
112  
113# newaliases 从文本文件中创建一个新的别名数据库文件。   
114  
115# sendmail -v -bi 调试启动。   
116  
117/etc/mail/aliases: 42 aliases, longest 10 bytes, 432 bytes total   
118  
119如果出现以上提示信息,则启动成功。可用以下命令正式启动:   
120  
121# sendmail -bd -q30m   
122  
123该命令以后台进程方式(-bd)运行,并使其每隔30分钟(-q30m)轮询一次未发送邮件队列,检查是否有新邮件。   
124  
125  
126  
127服务器启动后,可以用telnet连接服务器。   
128  
129# telnet localhost 25   
130  
131Trying 127.0.0.1...   
132  
133Connected to localhost.   
134  
135Escape character is '^]'.   
136  
137220 test.tigerhead ESMTP Sendmail 8.12.10/8.12.10; Tue, 30 Mar 2004 14:50:14 +0800   
138  
139ehlo test 你输入的命令,按回车结束。   
140  
141250-test.tigerhead Hello LOCALHOST.localdomain [127.0.0.1], pleased to meet you   
142  
143250-ENHANCEDSTATUSCODES   
144  
145250-PIPELINING   
146  
147250-8BITMIME   
148  
149250-SIZE   
150  
151250-DSN   
152  
153250-ETRN   
154  
155250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN   
156  
157250-DELIVERBY   
158  
159250 HELP   
160  
161以250-开头的为服务器的响应信息。注意倒数第三行,这就是成功配置smtp验证的显示。   
162  
163输入quit离开。   
164  
165  
166  
167  
168  
169  
170  
171安装完成后为确保系统安全,还需调整一些目录的权限。可参考sendmail源码目录下sendmail/SECURITY文档。   
172  
173# chmod 0640 /etc/mail/aliases /etc/mail/aliases.{db,pag,dir}   
174  
175# chmod 0640 /etc/mail/*.{db,pag,dir}   
176  
177# chmod 0640 /etc/mail/statistics /var/log/sendmail.st   
178  
179# chmod 0600 /var/run/sendmail.pid /etc/mail/sendmail.pid   
180  
181-r-xr-sr-x root smmsp ... /PATH/TO/sendmail   
182  
183drwxrwx--- smmsp smmsp ... /var/spool/clientmqueue   
184  
185drwx------ root wheel ... /var/spool/mqueue</tmpf>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus