如果您之前有看过小弟写过关于mandrake 支持sasl的文章您大概会发现在Mandrake 中好象不太能够执行了!我想我再一次的把这篇文章做个整理!希望可以帮助大家可以做好防止服务器被利用转寄的困扰!关于sasl 在电子邮件运行的初期大家并没有想到电子邮件寄送上的安全考量!smtp的认证机也一直没有被建立大家只可以使用封锁的方式!而 cyrussasl 的出现提供了一个更大的 弹性 的选择!也就是使用密码认证 在这之前我们必须说sasl并不一定是一个安全的而是提供更大的弹性!希望大家认清功能或服务的开启是等于是开启一个危险的可能!你如果看过postfix的说明文件第一个就会告欣你你使用的东西并不会加强你的安全性也希望大家可以有这样的认知如果您只是在内部使用而没有需要开启对外的服务建议还是使用邮件服务器的安全防护功能就好了( 例如关闭relay )系统环境 Mandrake 相关套件 postfix cryussasl您可以使用控制台中的安装功能或者使用urpmi都可以套件安装小弟就不多个说明了您可以参考下图安装 在上列的套件中包含了一些plugin及sasl系统 您可以依自己的需求进行安装! 如何设定sasl及postfix 我想在 上一节中我们已经介绍过了postfix的设定了 这个部份我们也不再多做讲解 首先我们在/etc/postfix/maincf中加入几行 基本上范例如下 # server smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworkspermit_sasl_authenticatedcheck_relay_domains #smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd smtpd_sasl_security_options = noanonymous # client smtp_sasl_auth_enable = yes 我们一个一个来解释一下 smtpd_sasl_auth_enable = yes 这是激活sasl支持如果您改成 no sasl功能也会停 止运作! smtpd_sasl_local_domain = $myhostname 指 sasl 预设 domain 如果你不使用sasldb方式管理密码的话 请设定 $myhostname (主要因为sasldb管理方式自行可以设定 ) smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated check_relay_domains 指使用认证的设定(请保持上列为一行 没有断行) apermit_mynetworks 允许 mynetworks (postfix设定) bpermit_sasl_authenticated 允许具有 sasl 认证设定( sasldb) ccheck_relay_domains 确认relay的区域 (postfix设定) smtpd_sasl_security_options = noanonymous 指 sasl 安全选项 i noanonymous 这里是允许任何非匿名认证方法 ii noplaintext 指不使用 PLAIN 和 LOGIN 方式 iii nodictionary ix noactive 任何一项不通过信件都可能造成信件无法送出 另外二个 broken_sasl_auth_clients = yes #client smtp_sasl_auth_enable = yes 这二个支持client端的服务 主要是针对客户端的连结软件个区隔例如 outlook大概很少人用了吧 所以 broken_sasl_auth_clients 就当没看到吧^ ^||| 接下来我们可以试着执行postfix 确认 # # postfix check #postfix reload 如果没有错误讯息您的设定 就算成功了! 接下来我们设定sasl的认证项目 修改 /usr/lib/sasl/nf # vi /usr/lib/sasl/nf 看起来像这样: pwcheck_method:sasldb 这是指定密码认证方式 (主要分成四种 pamshadowsasldbpwcheck) 这一行设定完成后这样您的发信服务器的 基本认证功能大至上就完了了哦 附注: 密码认证方式 pam : 使用系统的pam来做认证 以下为旧的方式:(参考一下就好了) 预设的pam 认证方式 /usr/lib/sasl/nf #%PAM auth required /lib/security/pam_stackso service=systemauth account required /lib/security/pam_stackso service=systemauth 也即和/etc/pamd/pop文件的内容是一致的 修改/etc/shadow文件权限 因为PAM最终要去读取/etc/shadow文件的内容来进行用户认证但是/etc/shadow文件 权限是设置为只有root用户可以读写而我们的postfix是运行在postfix用户权限之下所以我们要合理的设置/etc/shadow文件权限以便让pam可以读取其内容 执行以下命令让root组也可以读取shadow 方式 : 把postfix加入root群组 # chmod /etc/shadow # usermod G root postfix 方式 : 给他设 目前pam已经交由saslauthd来处理所以大至上不需要再改成 注意: pam 认证不支持 CRAMMD 只支持 LOGIN DIGESTMD PLAIN 这大概是pam本身的限制 ! shadow: 使用系统的影子文件来进行认证 因为要读取/etc/shadow档案(影子档)就必须要可以读取 而档限就必须要修改建议修改为 pwcheck: pwcheck 其实是和shadow认证是相同的 都是要读取影子档shadow但是pwcheck的想法 不需要去修改影子档shadow 的权限想法是: 在开机时就把影子文件中密码读出所以您就必须在开机的设定中加入一行 #vi /etc/rclocal 在最后加上这一行 /usr/sbin/pwcheck 这样您就不需要修改影子档的权限了 sasldb: 使用sasl资料库存放使用者帐号 一般建议使用 sasldb来设定 接下来我们来讨论如何存取sasldb的数据库 在安装好您的cyrussasl之后程序提供了二个语法 sasldblistusers (列出sasl使用者及密码设定) saslpasswd (设定使用者密码) 小弟不针对语法进行说明只进行实例操作 请自行参照man 我们先试着设定一个帐号 新增语法 #saslpasswd a smtpd c [帐号] 新增一个帐号为test #saslpasswd a smtpd c test Password:[输入密码 test] Again (for verification): [再输入一次 密码 test] 这样就完成了一个新增使用者的动作了 帐号为 : test 密码为 : test 再来我们试着用 sasldblistusers 查看使用者是否有新增 #sasldblistusers user: test realm: wwwphpidvtw mech: PLAIN user: test realm: wwwphpidvtw mech: CRAMMD user: test realm: wwwphpidvtw mech: DIGESTMD 列出了三个都是 test 帐号 这三个是密码格式 为什么有三个呢 ? 这要看您所安装的plugin而定 libsaslplugcrammdmdkirpm libsaslplugdigestmdmdkirpm libsaslplugplainmdkirpm * Mandrake 之后的变革 重点来了!!!!!! 我想大家一直很不解的是从前玩到这里重启postfix就会运作了为什么之后就不行了呢! 不管如何认证都不会通过! 在之后的Postfix 做了一个改变在 mastercf 他使用了 software chroot 来增加系统的安全性! 刻意的让 mail server在运作时和档案系统分开 使用saslauthd来中介取得认证! 而造成我们所设定的sasldb无法存在正确路径! 解决方法: 关闭software chroot 把相关档案copy到目录中 我想二个方法各有益毙 解法一: 修改 /etc/postfix/mastercf 关闭software chroot 范例如下: # ========================================================================== # service typeprivateunprivchrootwakeupmaxproccommand + args # (yes)(yes)(yes)(never)() # ========================================================================== smtpinetnnsmtpd #smtpsinetnnsmtpd #o smtpd_tls_wrappermode=yes o smtpd_sasl_auth_enable=yes #submissioninetnnsmtpd #o smtpd_enforce_tls=yes o smtpd_sasl_auth_enable=yes #inetnyqmqpd pickupfifonypickup cleanupunixnycleanup #qmgrfifonyqmgr qmgrfifonynqmgr #tlsmgrfifoytlsmgr rewriteunixytrivialrewrite bounceunixybounce deferunixybounce flushunixny?flush smtpunixysmtp showqunixnyshowq errorunixyerror localunixnnlocal virtualunixnyvirtual lmtpunixylmtp # # Interfaces to nonPostfix software Be sure to examin |