热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

sendmailsmtpsasl认证配置详解

一:概述在现代网络环境中,mailrelay是个讨论得非常热烈的话题,如何在公司的邮件服务器上允许外部用户或者移动用户进行mailrelay则是人们关注的焦点,随着标准化的SASL认证的出现并结合开放源软件Sendmail新版本中对SMTPAUTH的支持,问题已经逐渐变得明
  一:概述
  在现代网络环境中,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时,则简单地去掉前面的注释即可
  第2行 如果打开了,则如果用户的登录shell不在/etc/shells中,则禁止mail relay
  第3-6行 使用PAM_listfile模块通过外部文件控制认证
  
  第3行必须包括此行来使用文件/etc/shadow密码认证,放在最前面使得任何用户首先必须通过密码认证,再检查后面的规则
  
  第4行 只要用户被列在文件/etc/mail/smtpsuperusers.allow中,则允许relay注意这里用的是sufficient不是required,你必须放这一行在最前面,这样只要检测到用户被列在该文件中,则不再往下检查,无论如何允许mail relay
  
  第5行 如果用户列在/etc/mail/smtpusers.deny,一行一个用户名,则禁止relay
  
  第6行如果用户所在的组列在/etc/mail/smtpgroup.allow且不在/etc/mail/smtpusers.deny中,则允许relay
  
  现在可以用telnet来测试:
  
  #telnet localhost 25 
推荐阅读
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • 本文将详细介绍通过CAS(Central Authentication Service)实现单点登录的原理和步骤。CAS由耶鲁大学开发,旨在为多应用系统提供统一的身份认证服务。文中不仅涵盖了CAS的基本架构,还提供了具体的配置实例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
author-avatar
我思故我在
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有