Sendmail作为客户端(as Client)的SMTP 认证
摘要:Sendmail作为客户端(As Client)的SMTP认证(AUTH)在Redhat/Fedora下相关设置方法。
目标:Sendmail做系统mailer把所有mail转发给一台指定的SMTP,该SMTP需要发信认证,要让Sendmail自动完成认证和转发。
相关文件:
/etc/mail/sendmail.mc
/etc/mail/access
/etc/mail/Makefile
/etc/mail/authinfo(新增加的)
需要安装的RPM包:
sendmail
sendmail-cf
相应修改:
确信sendmail.mc中包含如下行,
FEATURE(`authinfo')dnl执行DefaultAuthInfo的认证
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl认证方式定义,这两行只要取消原来的注释
define(`confAUTH_OPTIONS',`A')dnl认证选项
define(`SMART_HOST',`smtp:smtp.domain.com')dnl这行是关键,它定义了需要使用的SMTP
LOCAL_DOMAIN(`localhost.localdomain')dnl localhost域
MASQUERADE_AS(`yourdomain.com')dnl
FEATURE(masquerade_envelope)dnl这两行原来也是注释的,打开它,并把上面行改成mail地址相应的域名,这样sendmail发信时把信按这个域名封装成一个有效mail地址
确信access中包含以下行,
Try_TLS:mail.a3linux.net NO
改行可以被注释掉,不过打开注释可以告诉sendmail不要尝试STARTTLS握手,因为默认sendmail是执行的,如果SMTP确实使用STARTTLS(TLS)方式认证且证书设置正确,请从access文件中删除该行。
确信你的authinfo文件有如下行,
AuthInfo:smtp.domain.com "U:username" "I:username" "P:password" "M:认证方式" "R:"
其中认证方式可以通过telnet SMTP服务器执行EHLO命令获得,用户名和密码就不用说了:-) 注意保证该文件只有root权限用户可读写,因为里面以明文记录了你的用户名和密码。
最后修改Makefile,
all: ${CFFILES} ${POSSIBLE} virtusertable.db access.db domaintable.db mailertable.db authinfo.db
改行最后的authinfo.db是要自己加上去的。
执行make,然后重起sendmail。
可以用mail命令尝试发信了,有问题的话可以查看/var/log/maillog来调试,如果再不行就用sniffer把mail之后的网络数据包抓下来,分析SMTP会话过程的情况。
OK!
目标:Sendmail做系统mailer把所有mail转发给一台指定的SMTP,该SMTP需要发信认证,要让Sendmail自动完成认证和转发。
相关文件:
/etc/mail/sendmail.mc
/etc/mail/access
/etc/mail/Makefile
/etc/mail/authinfo(新增加的)
需要安装的RPM包:
sendmail
sendmail-cf
相应修改:
确信sendmail.mc中包含如下行,
FEATURE(`authinfo')dnl执行DefaultAuthInfo的认证
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl认证方式定义,这两行只要取消原来的注释
define(`confAUTH_OPTIONS',`A')dnl认证选项
define(`SMART_HOST',`smtp:smtp.domain.com')dnl这行是关键,它定义了需要使用的SMTP
LOCAL_DOMAIN(`localhost.localdomain')dnl localhost域
MASQUERADE_AS(`yourdomain.com')dnl
FEATURE(masquerade_envelope)dnl这两行原来也是注释的,打开它,并把上面行改成mail地址相应的域名,这样sendmail发信时把信按这个域名封装成一个有效mail地址
确信access中包含以下行,
Try_TLS:mail.a3linux.net NO
改行可以被注释掉,不过打开注释可以告诉sendmail不要尝试STARTTLS握手,因为默认sendmail是执行的,如果SMTP确实使用STARTTLS(TLS)方式认证且证书设置正确,请从access文件中删除该行。
确信你的authinfo文件有如下行,
AuthInfo:smtp.domain.com "U:username" "I:username" "P:password" "M:认证方式" "R:"
其中认证方式可以通过telnet SMTP服务器执行EHLO命令获得,用户名和密码就不用说了:-) 注意保证该文件只有root权限用户可读写,因为里面以明文记录了你的用户名和密码。
最后修改Makefile,
all: ${CFFILES} ${POSSIBLE} virtusertable.db access.db domaintable.db mailertable.db authinfo.db
改行最后的authinfo.db是要自己加上去的。
执行make,然后重起sendmail。
可以用mail命令尝试发信了,有问题的话可以查看/var/log/maillog来调试,如果再不行就用sniffer把mail之后的网络数据包抓下来,分析SMTP会话过程的情况。
OK!
Comments