参考地址:
1、打开 smtp 的认证模块
在/etc/postfix/main.cf文件最后加上:
smtpd_sasl_auth_enable = yes smtpd_delay_reject=yes smtpd_recipient_restrictions = permit_mynetworkspermit_sasl_authenticated permit_auth_destination reject smtpd_client_restrictions = permit_sasl_authenticated broken_sasl_auth_clients = yes smtpd_sasl_security_options = noanonymous这样用户的postfix就支持smtp认证了
#1、postfix配置说明(强烈建议参看“postfix权威指南 第十一章 反垃圾邮件”)
#fqdn格式:完全限定域名格式,即用点分隔开的包括域名和主机名的主机全名# smtpd related configsmtpd_recipient_restrictions = permit_mynetworks, #检测客户端是否来自mynetworks或者mynetworks_style的网络,是的话返回OK,否则返回DUNNO状态码。 permit_sasl_authenticated, #检测用户认证是否通过的,认证通过的返回状态OK,否则返回DUNNO状态码。 reject_non_fqdn_hostname, #HELO/EHLO时:客户端提供的主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。 reject_non_fqdn_sender, #MAIL FROM时:客户端提供的主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。 reject_non_fqdn_recipient, #RCPT TO时:客户端提供的主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。 reject_unauth_destination, #RCPT TO时:收件人不在postfix管辖的区域(由mydestination定义),返回REJECT,否则返回DUNNO状态码。 reject_unauth_pipelining, #禁止非授权客户端使用pipelining reject_invalid_hostname #HELO/EHLO时:客户端提供的主机名不是有效的主机名时,返回REJECT,否则返回DUNNO状态码。# SMTP sender login matching configsmtpd_sender_restrictions = permit_mynetworks, #检测客户端是否来自mynetworks或者mynetworks_style的网络,是的话返回OK,否则返回DUNNO状态码。 reject_sender_login_mismatch, #拒绝发送者在$smtpd_sender_owner_maps中所匹配的用户名和sasl登录名不一致的连接。 reject_authenticated_sender_login_mismatch, #拒绝认证成功的发送者在$smtpd_sender_owner_maps中所匹配的用户名和sasl登录名不一致的连接。 reject_unauthenticated_sender_login_mismatch #拒绝认证失败的发送者在$smtpd_sender_owner_maps中所匹配的用户名和sasl登录名不一致的连接。smtpd_sender_login_maps = mysql:/etc/postfix/mysql_virtual_sender_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_maps.cf #2、smtp会话过程的各个限制条件参数:详看图片“stmp对话过程以及各个阶段对于的限制条件.png”,共分为7个顺序过程的参数限制:1、smtpd_client_restrictions2、smtpd_helo_restrictions3、smtpd_sender_restrictions4、smtpd_recipient_restrictions5、smtpd_data_restrictions6、header_checks7、body_checks#3、会话过程对比:#---------------------------------------------------------------------------root@mail:/etc/postfix# telnet mail.jmail.com 25Trying 192.168.0.234...Connected to mail.jmail.com.Escape character is '^]'.220 ESMTP #smtpd_client_restrictions#---------------------------------------------------------------------------ehlo mail.zmail.com #smtpd_helo_restrictions250-mail.jmail.com250-PIPELINING250-SIZE 5242880250-VRFY250-ETRN250-STARTTLS250-AUTH LOGIN PLAIN250-AUTH=LOGIN PLAIN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSN#---------------------------------------------------------------------------MAIL FROM:<zyq@zmail.com> #smtpd_sender_restrictions250 2.1.0 Ok#---------------------------------------------------------------------------RCPT TO:<jj@extmail.org> #smtpd_recipient_restrictions250 2.1.5 Ok#---------------------------------------------------------------------------DATA #smtpd_data_restrictions354 End data with <CR><LF>.<CR><LF>#---------------------------------------------------------------------------Client: To: jingjing<jj@extmail.org> #header_checksFrom:<zyq@zmail.com>Subject:SMTP Test!#---------------------------------------------------------------------------this is a test message body! #body_checks.250 2.0.0 Ok: queued as 959FDE03CA#---------------------------------------------------------------------------#4、限制条件与对应的受检信息限制条件 客户端提供的受检信息#RBL:实时黑名单reject_rbl_client 客户端提供的IP地址或则主机名称 #smtpd_client_restrictionsreject_rhsbl_clientreject_unknown_clientcheck_client_access type:mapname helo提供的主机名称 #smtpd_helo_restrictions permit_naked_ip_addressreject_invalid_hostnamereject_non_fqdn_hosnamereject_unknown_hosnamecheck_helo_access type:mapname MAIL FROM提供的寄件人邮件地址 #smtpd_sender_restrictionsreject_non_fqdn_senderreject_rhsbl_senderreject_unknown_sender_domaincheck_sender_access type:mapname RCPT TO提供的收件人的地址 #smtpd_recipient_restrictionspermit_auth_destinationpermit_mx_backupreject_non_fqdn_recipientreject_unauth_destinationreject_unkownn_recipient_domaincheck_recipient_access type:mapname reject_unauth_pipeling DATA命令permint 无条件批准reject 无条件拒绝defer 无条件延迟warn_if_reject 将原本的REJECT动作改为WARN(eg:warn_if_reject reject_unauth_destination 注意此命令必须放在其他条件之前,不能单独调用)reject_unauth_pipelining 禁止非授权客户端使用pipelining#参数详细说明reject_rbl_client #拒绝来自属于rbl和rhsbl列表中的地址进行连接。通过检查一个ip地址或域名是否存在于domain.tld的rbl或rhsbl中,可以判断该客户端是否被列入了domain.tld的实时黑名单,从而决定是否接受连接。reject_rhsbl_client #拒绝来自属于rbl和rhsbl列表中的地址进行连接。通过检查一个ip地址或域名是否存在于domain.tld的rbl或rhsbl中,可以判断该客户端是否被列入了domain.tld的实时黑名单,从而决定是否接受连接。reject_unknown_client #拒绝客户的地址没有对应的dns的a记录或ptr记录的连接。通常有些机器,尤其是个人拨号用户的机器没有对应的a记录或ptr记录,所以要注意漫游用户的使用(漫游用户是指不在$mynetworks中,比如在别的isp拨号上网的用户。通常用smtp认证来解决这个问题)。check_client_access type:mapnamepermit_naked_ip_address #允许直接使用ip地址的连接。通常在helo/ehlo中使用主机名而不是ip地址。reject_invalid_hostname #拒绝无效格式的主机名的连接。 reject_non_fqdn_hosname #HELO/EHLO时:客户端提供的主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。 reject_unknown_hosname #HELO/EHLO时:客户端提供的主机名未知时,返回REJECT,否则返回DUNNO状态码。check_helo_access type:mapnamereject_non_fqdn_sender #MAIL FROM时:客户端提供的服务器主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。reject_rhsbl_sender #MAIL FROM时:拒绝来自实时黑名单的用户主机reject_unknown_sender_domain #MAIL FROM时:提供的网域无效时(DNS查询),返回REJECT,否则返回DUNNO状态码。check_sender_access type:mapnamepermit_auth_destination #RCPT TO时:#允许发往默认转发和默认接收的连接。#postfix默认转发以下的邮件:#来自$mynetworks中地址发送的邮件#发往$relay_domains中的域或其子域的邮件。但是不能包含邮件路由(如user@elsewhere@domain.tld)。#postfix默认接收最终投递目标符合如下条件的邮件:#目标在$inet_interfaces#目标在$mydestinations#目标在$virtual_alias_domains#目标在$virtual_mailbox_domainspermit_mx_backup #RCPT TO时:允许接收本地主机是邮件投递目标的mx地址的邮件。但是不能包含邮件路由(如user@elsewhere@domain.tld)reject_non_fqdn_recipient #RCPT TO时:客户端提供的服务器主机名不是RFC要求的完整形式(FQND),返回REJECT,否则返回DUNNO状态码。reject_unauth_destination #RCPT TO时:拒绝不是发往默认转发和默认接收的连接。(防止成为垃圾邮件服务器)。reject_unkownn_recipient_domain #RCPT TO时:拒绝发往未知域名的连接。check_recipient_access type:mapname reject_unauth_pipeling #DATA命令permint #无条件批准reject #无条件拒绝defer #无条件延迟warn_if_reject #将原本的REJECT动作改为WARN(eg:warn_if_reject reject_unauth_destination 注意此命令必须放在其他条件之前,不能单独调用)reject_unauth_pipelining #禁止非授权客户端使用pipelining