postfix邮件服务的配置
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’
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
虚拟别名域的配置
使用虚拟别名域,可以将发给虚拟域的邮件实际投递到真实域的用户邮箱中;可以实现群组邮递的功能,即指定一个虚拟邮件地址,任何人发给这个邮件地址的邮件都将由邮件服务器自动转发到真实域中的一组用户的邮箱中。
这里的虚拟域可以是实际并不存在的域,而真实域既可以是本地域(即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