当前位置:操作系统 > Unix/Linux >>

SendmailSMTPSASL认证详尽指南

一:概述

  在现代网络环境中,mail relay是个讨论得非常热烈的话题,如何在公司的邮件服务器上允许外部用户或者移动用户进行mail relay则是人们关注的焦点,随着标准化的SASL认证的出现并结合开放源软件Sendmail新版本中对SMTP AUTH的支持,问题已经逐渐变得明朗而易于解决。

  二:目的

  本文的主要目的是要在任何一台linux系统上,不论是什么版本,我们将编译Cyrus-SASL和Sendmail 8.11来使系统支持SASL的SMTP认证,详尽解释如何编译和实现该功能及相关的问题。

  三:环境

  我所用的编译和测试环境是Redhat Linux 6.1和VA Linux 6.2.4,使用cyrus-SASL 1.5.24和Sendmail 8.11.4。在Redhat Linux 7.1上已经不需要再编译,只需要生成自己的sendmail.cf即可。

  四:步骤

  1.

  从ftp://ftp.andrew.cmu.edu/pub/cyrus-mail下载最新的cyrus-sasl-1.5.24.tar.gz放在/home/jephe目录下

  #cd /home/jephe

  #tar xvfz cyrus-sasl-1.5.24.tar.gz

  #cd cyrus-sasl-1.5.24

  #./configure

  --enable-login (默认配置不支持login认证机制,但对OutlookExpress是必需的)

  #make

  #make install

  这将自动安装所有的SASL库文件在/usr/local/lib/sasl/目录和头文件在/usr/local/include/目?br>迹?但是Sendmail却在/usr/lib/sasl中寻找这些文件,因此最简单的办法就是创建符号链接,做下面?br>模?

  #cd /usr/lib

  #ln -sf /usr/local/lib/sasl

  sasl

  #cp -a /usr/local/lib/libsasl* /usr/lib

  最后应该看上去象下面:

  [jephe@smtp lib]$ ls libsasl* sasl -l

  -r-x------

  1 root

  root

  683 Jul 27 16:32 libsasl.la

  lrwxrwxrwx

  1 root

  root

  16 Jul 27 16:32 libsasl.so ->libsasl.so.7.1.8

  lrwxrwxrwx

  1 root

  root

  16 Jul 27 16:33 libsasl.so.7 ->libsasl.so.7.1.8

  -r-x------

  1 root

  root

  194079 Jul 27 16:32 libsasl.so.7.1.8

  lrwxrwxrwx

  1 root

  root

  19 Jul 27 16:32 sasl ->/usr/local/lib/sasl

  现在更改文件的许可权限

  #chmod -R 500 /usr/local/lib/sasl /usr/local/lib/libsasl* /usr/lib/sasl/usr/lib/libsasl*

  再编辑文件/etc/ld.so.conf,加下面的行

  #/usr/lib/sasl

  然后运行

  #/sbin/ldconfig (不应该有任何错误警告显示)

  2. 现在编译Sendmail,从www.sendmail.org下载最新的Sendmail.8.11.4.tar.gz也放于/home/jephe目录下

  #cd /home/jephe

  #tar xvfz sendmail.8.11.4.tar.gz

  #cd /home/jephe/sendmail-8.11.4

  放下面的行到devtools/Site/site.config.m4 (注意文件名不要弄错,用vi编辑新文件site.config.m4)

  APPENDDEF(`confENVDEF', `-DSASL')

  APPENDDEF(`conf_sendmail_LIBS', `-lsasl')

  APPENDDEF(`confLIBDIRS', `-L/usr/lib/sasl')

  APPENDDEF(`confINCDIRS', `-I/usr/local/include')

  再用vi编辑一个新的配置文件放在cf/cf/config.mc,内容如下:(注意没有行号,此处的行号是为了下面对每行进行解释的方便)

  divert(-1) #

  # Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers.

  # All rights reserved.

  # Copyright (c) 1983 Eric P. Allman. All rights reserved.

  # Copyright (c) 1988, 1993

  # The Regents of the University of California. All rights reserved.

  #

  # By using this file, you agree to the terms and conditions set

  # forth in the LICENSE file which can be found at the top level of

  # the sendmail distribution.

  #

  #

  1 VERSIONID(`$Id: generic-linux.mc,v 8.1 1999/09/24 22:48:05 gshapiro Exp $')

  2 OSTYPE(linux)dnl

  3 DOMAIN(generic)dnl

  4 MAILER(local)dnl

  5 MAILER(smtp)dnl

  6 define(`confPRIVACY_FLAGS', `authwarnings,needmailhelo,novrfy,noexpn')dnl

  7 define(QUEUE_DIR,`/var/spool/mqueue/q*')

  8 FEATURE(`use_cw_file')dnl

  9 FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl

  10 FEATURE(`domaintable',`hash -o /etc/mail/domaintable')dnl

  11 FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl

  12 dnl FEATURE(`genericstable',`hash -o /etc/mail/genericstable')dnl

  13 dnl GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')dnl

  14 dnl FEATURE(allmasquerade)dnl

  15 dnl FEATURE(masquerade_envelope)dnl

  16 dnl MASQUERADE_AS(yourdomain.com)dnl

  17 FEATURE(redirect)dnl

  18 FEATURE(always_add_domain)dnl

  19 FEATURE(`access_db')dnl

  20 FEATURE(`blacklist_recipients')dnl

  21 define(`confAUTH_MECHANISMS', `LOGIN PLAIN GSSAPI KERBEROS_V4 DIGEST-MD5CRAM-MD5')dnl

  22 TRUST_AUTH_MECH(`LOGIN PLAIN GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5')dnl

  23 DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl

  24 FEATURE(`no_default_msa')dnl

  25 DAEMON_OPTIONS(`Port=587, Name=MSA, M=E')dnl

  注: 第6行 增强sendmail的安全性

  第7行 使用多个邮件队列增加性能

  第12-16行 此处被注释了,如果你需要这些高级设置你可以去掉前面的dnl来使用它,

  但你必须清楚地知道你在做什么。

  第20-25行 这些行最重要,因为它是用于SMTP AUTH的必须设置

  现在你能编译Sendmail.

  #cd /home/jephe/sendmail-8.11.4

  #sh ./Build

  (如果你已经不是第一次编译,则要sh ./Build -c 清除上一次编译的内容)

  #cd cf/cf

  #sh ./Build config.cf

  现在准备编译Sendmail,编译之前,请备份你原先版本的sendmail执行文件和配置文件,一般为/usr/sbin/sendmail 和 /etc/sendmail.cf

  #cd ../../

  #sh ./Build install

  #cp -f config.cf /etc/mail/sendmail.cf

  #cd /var/spool/mqueue

  #mkdir q1 q2 q3 q4 q5

  (你可以随时创建更多的目录,只要以q开头即可被立刻当作队列目录使用)

  #/etc/rc.d/init.d/sendmail restart

  确信在编译过程中你能看见下面的行:

  ...-I /usr/lib/include -DNEWDB -DSASL

  新版本的sendmail放所有的配置文件在/etc/mail下,你可能需要做下面的事情:

  a. #cp /etc/aliases /etc/mail/aliases

  b. #cp /etc/sendmail.cw /etc/mail/local-host-names

  c. #/etc/rc.d/init.d/sendmail restart

  现在,编译应该结束,试着运行下面的命令检查输出

  #/usr/sbin/sendmail -d0.1 -bv root |grep SASL

  你应该看到象下面的行

  NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG

  3.

  准备设置SASL认证


  用vi编辑新文件/usr/lib/sasl/Sendmail.conf放下面的行

  pwcheck_method:pam

  既然Redhat Linux普遍使用PAM,我们就用PAM 认证,后面再讲SASLDB方式的认证。

  现在放下面的行到/etc/pam.d/smtp (用vi编辑新文件smtp)

  #%PAM-1.0

  1 #auth required /lib/security/pam_deny

  2 #auth required /lib/security/pam_shells.so

  3 auth required /lib/security/pam_pwdb.so shadow md5

  4 auth sufficient /lib/security/pam_listfile.so item=user sense=allow file=/etc/m

  ail/smtpsuperusers.allow

  5 auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/mail

  /smtpusers.deny

  6 auth required /lib/security/pam_listfile.so item=group sense=allow file=/etc/ma

  il/smtpgroup.allow

  如果你有大量的POP3用户,且想使用与POP3同样的密码,则可使用PAM认证方式,上面的各行解释如下

  第1行 如果你想禁止所有人mail relay时,则简单地
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,