1,问题的提出
为了防止垃圾邮件,通常管理员会 启用邮件服务器的smtp认证功能。但是发现在配置了smtp的认证之后,如果客户端不勾选“我的服务器需要认证”,则客户端同样能够发送邮件
2,质疑
如果用户都能够不勾选认证选项就进行邮件的发送,还要smtp的认证做什么?
3,测试环境 red hat Linux AS 4 sendmail 8.14,新建邮件用户,测试的时候用这个用户样为自己发邮件
4,问题的分析
分析中。。。反复测始终。。。
5,问题的解决
1,发现问题所在,通常配置smtp的方法
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=submission, Name=MSA,ME=a' )dnl
问题就出现在了第一句话上(他的意思是只要通过其列出的认证方法认证的用户,不通过smtp也可以发送邮件)
2,初步方案
dnl #TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=submission, Name=MSA,ME=a' )dnl
注释掉第一行的内容,这样只有通过认证的用户才能发送邮件了.
3,第二方案,
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl #DAEMON_OPTIONS(`Port=25, Name=MSA')dnl
这样就强制所有使用该邮件服务器进行邮件转发的用户在认证后才能发邮件了。此时只有在发件人或收件人中至少有一方是服务器本地用户是才予以发送,否则拒绝.
4.注意问题,初步方案和第二方案中的access文件中必须保持只有127.0.0.1 是RELAY的,其它内容都清空掉.不要忘记把它生成数据库格式