zoukankan      html  css  js  c++  java
  • postfix config

    smtp auth success,other not sure

    service saslauthd start 

    [root@localhost ~]# cat /etc/sysconfig/saslauthd
    # Directory in which to place saslauthd's listening socket, pid file, and so
    # on. This directory must already exist.
    SOCKETDIR=/run/saslauthd

    # Mechanism to use when checking passwords. Run "saslauthd -v" to get a list
    # of which mechanism your installation was compiled with the ablity to use.
    MECH=shadow

    # Additional flags to pass to saslauthd on the command line. See saslauthd(8)
    # for the list of accepted flags.
    FLAGS=

    [root@localhost ~]# telnet localhost.localdomain 25
    Trying ::1...
    Connected to localhost.localdomain.
    Escape character is '^]'.
    220 localhost.localdomain ESMTP Postfix
    elho localhost.localdomain --input
    502 5.5.2 Error: command not recognized
    ehlo localhost.localdomain --input
    250-localhost.localdomain
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-AUTH PLAIN LOGIN
    250-AUTH=PLAIN LOGIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250 DSN

    -----------------------------------------------------------------------------------------------------------------------------

    http://zhumeng8337797.blog.163.com/blog/static/10076891420117502232742/

    9.3  postfix邮件服务的配置

    9.3.1  postfix服务的基本配置

    与Sendmail相比,Postfix最被人称道的地方就在于其配置文件的可读性很高。Postfix的主配置文件是/etc/postfix/main.cf。虽然该配置文件的内容比较多,但其中大部分内容都是注释(“#”号开头的行),真正需要自行定义的参数并不多,而且这些参数就算不去定义,按照默认值也可以运行,只不过它只监听127.0.0.1这个接口的邮件收发。如果要使它能够支持客户端完成最基本的邮件收发任务,通常还需要进行下面的设置。

    注记:在main.cf文件中,参数都是以类似变量的设置方法来设置的,例如要设置
    Postfix主机名称,可使用下面的语句:myhostname = mail.gdvcp.net

    等号左边是变量的名称,等号右边是变量的值。当然,也可以在变量的前面加上符号
    “$”来引用该变量,如:myorigin = $myhostname   
    (相当于myorigin = mail.gdvcp.net)

    需要注意的是,等号两边需要有空格字符。此外,如果变量有两个以上的设置值,
    就必须用逗号“,”或者空格符“ ”将它们分开,如:
    mydestination = $mydomain,$myhostname,localhost.$mydomain

    1.设置运行Postfix服务的邮件主机的主机名、域名
    用myhostname参数指定运行Postfix服务的邮件主机的主机名称(FQDN名),用mydomain参数指定该主机的域名称。当然这两个参数也可以不进行设置,缺省情况下,myhostname参数被设置为本地主机名,而且Postfix会自动将myhostname参数值的第一部分删除并将其余部分作为mydomain参数的值。

    myhostname = mail.gdvcp.net
    mydomain = gdvcp.net

    2.设置由本机寄出的邮件所使用的域名或主机名称
    myorigin参数实际上是设置由本台邮件主机寄出的每封邮件的邮件头中mail from的地址。由于Postfix默认使用本地主机名作为myorigin参数的值,因此一封由本地邮件主机寄出的邮件的邮件头中就会含有如“From:‘lbt’<lbt@mail.gdvcp.net>”这样的内容,它表明这封邮件是从mail.gdvcp.net主机发来的。不过,建议读者将myorigin参数设置为本地邮件主机的域名(即“myorigin = gdvcp.net或$mydomain”),这样一封由本地邮件主机寄出的邮件的邮件头中就会含有如“From:‘lbt’<lbt@gdvcp.net>”这样的内容,显然更具有可读性。

    myorigin = $mydomain

    3.设置Postfix服务监听的网络接口
    默认情况下,inet_interfaces参数的值被设置为localhost,这表明只能在本地邮件主机上寄信。如果邮件主机上有多个网络接口,而又不想使全部的网络接口都开放Postfix服务,就可以用主机名指定需要开放的网络接口。不过,通常是将所有的网络接口都开放,以便接收从任何网络接口来的邮件,即将inet_interfaces参数的值设置为“all”。

    inet_interfaces = all

    4.设置可接收邮件的主机名称或域名
    mydestination参数非常重要,因为只有当发来的邮件的收件人地址与该参数值相匹配时,Postfix才会将该邮件接收下来。例如,这里将该参数值设置为$mydomain和$myhostname,表明无论来信的收件人地址是xxx@gdvcp.net(其中xxx表示某用户的邮件账户名),还是xxx@mail.gdvcp.net,Postfix都会接收这些邮件。

    mydestination = $mydomain, $myhostname

    5.设置可转发(Relay)哪些网络的邮件
    可以使用mynetworks参数来设置。可将该参数值设置为所信任的某台主机的IP地址,也可设置为所信任的某个IP子网或多个IP子网(用“,”或者“ ”分隔)。这里,将mynetworks参数值设置为192.168.16.0/24,则表示这台邮件主机只转发子网192.168.16.0/24中的客户端所发来的邮件,而拒绝为其他子网转发邮件。

    mynetworks = 192.168.16.0/24
    除了mynetworks参数外,还有一个用于控制网络邮件转发的参数是mynetworks-style,
    它主要用来设置可转发邮件网络的方式。通常有以下3种方式。

    class:在这种方式下,Postfix会自动根据邮件主机的IP地址得知它所在的IP网络类型
    (即A类、B类或是C类),从而开放的它所在的IP网段,例如,如果邮件主机的IP地址为
    168.100.192.10,这是一个B类网络的IP地址,则postfix会自动开放168.100.0.0/16
    整个IP网络;

    subnet:这是postfix的默认值,postfix会根据邮件主机的网络接口上所设置的IP地址、
    子网掩码来得知所要开放的IP网段,例如,如果邮件主机的IP地址为192.168.16.177,
    子网掩码为255.255.255.192,则postfix会开放192.168.16.128/30子网;

    host:在这种方式下,postfix只会开放本机。

    通常,用户不设置mynetworks-style参数,而直接设置mynetworks参数。如果这两个参
    数都进行了设置,那么mynetworks参数的设置有效。

    6.设置可转发哪些网域的邮件
    mynetworks参数是针对邮件来源的IP来设置的,而relay_domains参数则是针对邮件来源的域名或主机名来设置的。例如,将该参数值设置为gdvcp.net,则表示任何由域gdvcp.net发来的邮件都会被认为是信任的,Postfix会自动对这些邮件进行转发。

    relay_domains = gdvcp.net

    完成了上面的基本设置后,重新启动Postfix服务,这台Postfix邮件主机就基本准备好了。但是目前它仅支持客户端发信,还不支持收信。

    此外,要使它能在单位内部网络中更好地转发邮件,还必须进行DNS设置。本例中,在内部网络的DNS服务器上定义了一个主区域gdvcp.net,并在该区域配置文件中定义了以下记录
    (除定义了SOA、NS记录外):

    rhel5.gdvcp.net.  IN   A  192.168.16.177
    mail.gdvcp.net.  IN CNAME  rhel5.gdvcp.net.
    gdvcp.net.      IN MX  10  mail.gdvcp.net.
    技巧:当编辑好Postfix主配置文件/etc/postfix/main.cf后,为了便于调试,
    应在不打开该文件的情况下,直接读取该文件的各类设置数据,
    可执行/usr/sbin/postconf命令。例如,要查看Postfix的当前主要配置
    文件的存放路径,可以使用下面的命令:postconf -n

    9.3.2  虚拟别名域的配置

    使用虚拟别名域,可以将发给虚拟域的邮件实际投递到真实域的用户邮箱中;可以实现群组邮递的功能,即指定一个虚拟邮件地址,任何人发给这个邮件地址的邮件都将由邮件服务器自动转发到真实域中的一组用户的邮箱中。

    这里的虚拟域可以是实际并不存在的域,而真实域既可以是本地域(即main.cf文件中的mydestination参数值中列出的域),也可以是远程域或Internet中的域。虚拟域是真实域的一个别名。实际上,通过一个虚拟别名表(virtual),实现了虚拟域的邮件地址到真实域的邮件地址的重定向。

    下面通过一些例子来说明虚拟别名域的设置方法。

    【例1】如果要将发送给虚拟域@dzxx.cn的邮件实际投递到真实的本地域@gdvcp.net,那么可在虚拟别名表中进行如下定义:

    @dzxx.cn  @gdvcp.net

    【例2】如果要将发送给虚拟域的某个虚拟用户(或组)的邮件实际投递到本地Linux系统中某个用户账户的邮箱中,那么可在虚拟别名表中进行如下定义:

    admin@example.com  lbt
    st0321@example.com  st0321001,st0321002,st0321003

    【例3】如果要将发送给虚拟域中的某个虚拟用户(或组)的邮件实际投递到本地Linux系统中和Internet中某个用户账户的邮箱中,那么可在虚拟别名表中进行如下定义:

    daliu@example.com  lbt,liu6812@163.com

    在实际应用中,要实现上述虚拟别名域,必须按以下步骤进行。

    编辑Postfix主配置文件/etc/postfix/main.cf,进行如下定义:

    virtual_alias_domains = dzxx.cn,example.com
    virtual_alias_maps = hash:/etc/postfix/virtual

    这里,参数virtual_alias_domains用来指定虚拟别名域的名称,参数virtual_alias_maps用来指定含有虚拟别名域定义的文件路径。

    编辑配置文件/etc/postfix/virtual,进行如下定义:

    @dzxx.cn  @gdvcp.net
    admin@example.com  lbt
    st0321@example.com  st0321001,st0321002
    daliu@example.com  lbt,liu6812@163.com

    在修改配置文件main.cf和virtual后,要使更改立即生效,应分别执行/usr/sbin目录下以下的两条命令。

    postmap /etc/postfix/virtual
    postfix reload

    其中,第1条命令用来将文件/etc/postfix/virtual生成Postfix可以读取的数据库文件/etc/postfix/virtual.db;第2条命令用于重新加载Postfix主配置文件main.cf文件。这两条命令的执行情况如图9-5所示。

     

    图9-5  使虚拟别名域设置生效

    9.3.3  用户别名的配置

    使用用户别名最重要的功能是实现群组邮递(也称邮件列表)的功能,通过它可以将发送给某个别名邮件地址的邮件转发到多个真实用户的邮箱中。与虚拟别名域不同的是,用户别名机制是通过别名表(aliases)在系统范围内实现别名邮件地址到真实用户邮件地址的重定向的。

    下面通过一些例子来说明用户别名的设置方法。

    【例1】假设一个班级中的每位同学都在本地Linux系统中拥有真实的电子邮件账户,现在要发信给班上的每一位同学,那么可以在别名表中进行如下定义:

     

    st0322: st0322001,st0322002,st0322003,st0322004

    这里的st0322是用户别名,它并不是一个Linux系统中的真正用户或组。当发信给st0322@gdvcp.net这个邮件地址时,这封邮件就会自动发送给st0322001@gdvcp.netst0322002@gdvcp.netst0322003@gdvcp.netst0322001@gdvcp.net

    此外,当真正用户人数比较多时,还可以将这些用户定义到一个文件中,然后用include参数来引用该文件。例如,先用vi编辑器生成一个/etc/mail/st0323文件,其内容为:

    st0323001,
    st0323002,
    st0323003,

    st0323050

    然后,在别名表中进行如下定义:

    st0323:  :include: /etc/mail/st0323

    如果Linux系统中的用户账户名太长或者不希望让外人知道它,那么可以为它设置一个或多个用户别名,平时发邮件时只需使用别名邮件地址,邮件服务器就会自动将邮件转发给真实用户,甚至还可以将邮件转发到该用户在Internet中的邮件信箱中。

    【例2】某用户在本地Linux系统中的用户账户名为jczliuming,并且他在Internet中拥有一个电子邮件地址为liuming86@163.com。如果为它设置多个用户别名(如jcz01、lm01等),那么在别名表中可进行如下定义。

    jcz01:  jczliuming
    lm01:  jczliuming,liuming86@163.com

    在实际应用中,要实现上述用户别名,还必须按以下步骤进行。

    打开Postfix主配置文件/etc/postfix/main.cf,应确认文件中包含以下两条默认语句。

    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases

    这里,参数alias_maps用来指定含有用户别名定义的文件路径,alias_database用来指定别名表数据库文件路径。

    编辑配置文件/etc/aliases,进行如下定义。

    st0322:  st0322001,st0322002,st0322003,st0322004
    st0323:  :include: /etc/mail/st0323
    jcz01:  jczliuming
    lm01:  jczliuming,liuming86@163.com

    注意,别忘了要编辑生成文件/etc/mail/st0323。

    在修改配置文件main.cf和aliases后,要使更改立即生效,应分别执行/usr/sbin目录中的以下两条命令。

    postalias /etc/aliases          
    postfix reload

    其中,第1条语句用来将文件/etc/aliases生成Postfix可以读取的数据库文件/etc/aliases.db。这两条命令的执行情况如图9-6所示。

     

    图9-6  使用户别名设置生效

      注记:用户别名可以实现邮件列表的功能,但是只有root用户才能修改aliases文件,
    那么普通用户能否实现自己的邮件列表功能呢?可以,这需要通过在该用户账户的主目录
    下建立.forward文件来实现,具体实现方法请参考有关书籍。

    9.3.4  SMTP认证的配置

    如果任何人都可以通过一台邮件服务器来转发邮件,会有什么后果呢?很可能这台邮件服务器就成为了各类广告与垃圾信件的集结地或中转站,网络带宽也会很快被耗尽。为了避免这种情况的出现,Postfix默认不会对外开放转发功能,而仅对本机(localhost)开放转发功能。但是,在实际应用中,必须在Postfix主配置文件中通过设置mynetworks、relay_domains参数来开放一些所信任的网段或网域,否则该邮件服务器几乎没有什么用处。在开放了这些所信任的网段或网域后,还可以通过设置SMTP认证,对要求转发邮件的客户端进行用户身份(用户账户名与密码)验证。只有通过了验证,才能接收该用户寄来的邮件并帮助转发。

    目前,比较常用的SMTP认证机制是通过Cyrus SASL包来实现的。

    在默认情况下,Postfix邮件主机可以接收和转发来自什么地方的邮件呢?

    注记:
    (1)默认情况下,Postfix接收符合以下条件的邮件:
    目的地为$inet_interfaces的邮件;
    目的地为$mydestination的邮件;
    目的地为$ virtual_alias_maps的邮件。

    (2)默认情况下,Postfix转发符合以下条件的邮件:
    来自客户端IP地址符合$mynetworks的邮件;
    来自客户端主机名称符合$relay_domains及其子域的邮件;
    目的地为$relay_domains及其子域的邮件。
    此外,还可以通过其他方式来实现更强大的控制,如STMP认证就是其中的一种方式。

    Cyrus SASL是Cyrus Simple Authentication and Security Layer的简写,它最大的功能是为应用程序提供了认证函数库。应用程序可以通过函数库所提供的功能定义认证方式,并让SASL通过与邮件服务器主机的沟通从而提供认证的功能。

    下面介绍使用Cyrus SASL包实现SMTP认证的具体方法。

    1.Cyrus-SASL认证包的安装
    默认情况下,Red Hat Enterprise Linux安装程序会自动安装Cyrus-SASL认证包。读者可使用下面的命令检查系统是否已经安装了Cyrus-SASL认证包或查看已经安装了何种版本。

    rpm -qa | grep sasl

    命令执行结果如图9-7所示,这表示Cyrus-SASL已安装,它的版本为2.1.22-4(V2版),但它的相关程序还没有安装完全。

     

    图9-7  检查系统是否已经安装了Cyrus-SASL

    如果系统还没有安装Cyrus-SASL认证包,应将Red Hat Enterprise Linux 5第1、2和3张安装光盘分别放入光驱,加载光驱后在光盘的Server目录下找到与Cyrus-SASL认证包相关的RPM包文件,然后分别使用rpm -ivh命令安装。例如,要安装第1张光盘上的cyrus-sasl-2.1.22-4.i386.rpm包文件,可使用下面的命令。

    rpm -ivh /mnt/Server/cyrus-sasl-2.1.22-4.i386.rpm

    2.Cyrus-SASL V2的密码验证机制
    默认情况下,Cyrus-SASL V2版使用saslauthd这个守护进程进行密码认证,而密码认证的方法有多种,使用下面的命令可查看当前系统中的Cyrus-SASL V2所支持的密码验证机制。

    saslauthd -v

    命令的执行情况如图9-8所示。

     

    图9-8  查看可以使用的密码验证机制

    从图中可以看到,当前可使用的密码验证方法有getwent、kerberos5、pam、rimap、shadow和ldap。为简单起见,这里准备采用shadow验证方法,也就是直接用/etc/shadow文件中的用户账户及密码进行验证。因此,在配置文件/etc/sysconfig/saslauthd中,应修改当前系统所采用的密码验证机制为shadow,即:

    MECH=shadow

    3.测试Cyrus-SASL V2的认证功能
    由于Cyrus-SASL V2版默认使用saslauthd这个守护进程进行密码认证,因此需要使用下面的命令来查看saslauthd进程是否已经运行。

    ps aux | grep saslauthd

    如果没有发现saslauthd进程,则可用下面的命令启动该进程并设置它开机自启动。

    /etc/init.d/saslauthd start
    chkconfig saslauthd on

    然后,可用下面的命令测试saslauthd进程的认证功能。

    /usr/sbin/testsaslauthd –u lbt –p ‘123456’

    其中,lbt为Linux系统中的用户账户名,‘123456’为用户lbt的密码。该命令执行后,如果出现如图9-9所示的结果,则表示saslauthd的认证功能已起作用。

     

    图9-9  测试saslauthd的认证功能

    4.设置Postfix启用smtp认证
    默认情况下,Postfix并没有启用SMTP认证机制。要让Postfix启用SMTP认证,就必须对Postfix的主配置文件/etc/postfix/main.cf进行修改。
    下面先给出main.cf文件中有关SMTP认证的设置部分(位于文件的最后面),然后对这部分内容进行说明。

        smtpd_sasl_auth_enable = yes
    smtpd_sasl_local_domain = ''
    smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated, reject_unauth_destination
    broken_sasl_auth_clients=yes
    smtpd_client_restrictions = permit_sasl_authenticated
    smtpd_sasl_security_options = noanonymous

    (1)smtpd_sasl_auth_enable:指定是否要启用SASL作为SMTP认证方式。默认不启用,这里必须将它启用,所以要将该参数值设置为“yes”。

    (2)smtpd_sasl_local_domain:如果采用Cyrus-SASL V2版进行认证,那么这里不做设置。

    (3)smtpd_recipient_restrictions:表示通过收件人地址对客户端发来的邮件进行过滤。通常有以下几种限制规则。

    permit_mynetworks:表示只要是收件人地址位于mynetworks参数中指定的网段就可以被转发邮件。

    permit_sasl_authenticated:表示允许转发通过SASL认证的邮件。
    reject_unauth_destination:表示拒绝转发含未信任的目标地址的邮件。

    (4)broken_sasl_auth_clients:表示是否兼容非标准的SMTP认证。有一些Microsoft的SMTP客户端(如Outlook Express 4.x)采用非标准的SMTP认证协议,只需将该参数设置为“yes”就可解决这类不兼容问题。

    (5)smtpd_client_restrictions:表示限制可以向Postfix发起SMTP连接的客户端。如果要禁止未经过认证的客户端向Postfix发起SMTP连接,则可将该参数值设置为

    “permit_sasl_authenticated”。

    (6)smtpd_sasl_security_options:用来限制某些登录的方式。如果将该参数值设置为“noanonymous”,则表示禁止采用匿名登录方式。

    在完成上述设置后,必须使用命令“/etc/init.d/postfix reload”重新载入配置文件,或使用命令“/etc/init.d/postfix restart”重新启动Postfix服务。

    此外,由于当Postfix要使用SMTP认证时,会读取/usr/lib/sasl2/smtpd.conf文件中的内容,以确定所采用的认证方式,因此如果要使用saslauthd这个守护进程来进行密码认证,就必须确保/usr/lib/sasl2/smtpd.conf文件中的内容为:

    pwcheck_method: saslauthd

    5.测试Postfix是否启用了SMTP认证
    经过上面的设置,Postfix邮件服务器应该已具备了SMTP认证功能。可采用Telnet命令连接到Postfix服务器端口25来进行测试,测试过程如图9-10所示。

     

    图9-10  测试Postfix是否启用了SASL认证

    如图9-10所示,第6行输入EHLO命令向远程163.com域发出消息,在随后得到的本地Postfix响应信息中,如果出现第12、13行信息(显示当前Postfix所支持的认证方式),则表明Postfix已启用了SMTP认证功能。

    如果没有安装Cyrus-SASL认证包的相关程序如 cyrus-sasl-md5-2.1.22-4.i386.rpm、cyrus-sasl-gssapi-2.1.22-4.i386.rpm等,第12、13行信息就显示为:

    250-AUTH LOGIN PLAIN

    250-AUTH=LOGIN PLAIN


     
     
     
     
     
  • 相关阅读:
    .net GC的工作原理
    ISAPI的作用ASP.NET的HTTP请求的处理方法
    进程和线程
    浅论ViewState及其与Session的关系
    堆和栈的区别
    关于system.resources名称空间引用的问题
    多线程和多进程
    HTTP 状态码含义
    WebView 载入本地的html
    Intentfilter的介绍
  • 原文地址:https://www.cnblogs.com/eiguleo/p/4215493.html
Copyright © 2011-2022 走看看