* Postfix 默认值
Postfix 采用默认值启动时有2个重要特性:
1.只在127.0.0.1的port 25上Listen(inet_interfaces=127.0.0.1)也就是不管是MUA或MTA要寄信给postfix,postfix一概不接受。这样除非是登入到主机,利用mail指令寄信外,便无法寄信。
2.允许一个网段的主机转发信件/Reply(mynetwork_style=subnet)。事务上,通常利用Postfix中的mynetworks来限制允许Relay的主机范围。
* 因为Suse默认是利用YaST来设定Postfix,如想自己手动设置postfix,需修改/etc/sysocnfig/mail中
MAIL_CREATE_CONFIG="yes"--> no
SMTPD_LISTEN_REMOTE="no"--> yes
* 过滤掉main.cf中的说明内容,可以使用这条命令:#grep '^[^#]' /etc/postfix/main.cf
建议是在过滤前备份原文件,文件中的说明是非常有用的,唯一的缺点是E文的。
× myhostname
此为mail server的主机名,如果安装时有设置或者使用YaST修改过主机名,此选项默认会被设置,当然, 检查下最好了。
例如:myhostname = mailtest.tm
× mydomain
此为设置域名,在main.cf中没有这个设定值,其默认值就是你设置主机名时候的域名名称。
例如:mydomain = mailtest.tm
mail:# postconf mydomain
mydomain = mailtest.tm
× inet_interface(解除只在127.0.0.1的port25上监听的限制)
默认值为127.0.0.1,会造成外部MUA,MTA无法跟postfix交互,建议更改为all。也可以使用postconf指令来修改,如下:
mail:~ # postconf inet_interfaces
inet_interfaces = 127.0.0.1 ::1 <- 127.0.0.1
mail:~ # postconf -e 'inet_interfaces = all'<- 利用postconf指令修改
mail:~ # postconf inet_interfaces
inet_interfaces = all
× mynetworks_style设定允许relay邮件的具体方式,默认值为:subnet,主要有以下3种方式:
class:会根据服务器设置的IP地址属于A/B/C中的哪一类地址,来决定允许relay的服务器
例如mail server地址为220.11.35.2,则允许所有220.x.x.x的IP都可以利用你的mail server来做邮件转发relay,这个是非常危险的,你的mail server非常容易成为垃圾邮件的载体,强烈建议,不使用class方式
subnet:根据mail server的IP及netmask计算,只允许同一个网段的主机利用你的mail server来relay邮件。
host:如设定为host,则只允许localhost可以relay邮件
× mynetworks (允许IP/netmask及本机可以realy邮件)
指定可以使用此mail server来relay邮件的IP/netmask。如果mynetwoks跟mynetworks_style同时设置,则myneworks会覆盖mynetworks_style的值。
× myorigin
当使用mail命令来收发邮件时,如果没有指定@mailtest.tm,postfix会自动根据myorigin中的设置,来自动补齐地址。
× mydestination
此参数非常重要,postfix默认使用此参数来判断收到的信件是否为本地信件,其默认值应该包含$myhostname
× 使用postconf命令时,后面的参数,请用单引号',勿用双引号"。
* SUSE使用qpopper作为pop3工具
没有的话,自己安装下,安装完成后,使用如下命令进行检查及启动服务,qpopper是由xinetd服务来管理的,所以重启是需要启动xinetd,当然首先是要确定服务是on的
#chkconfig --list qpopper
#chkconfig qpopper on
#rcxinetd restart
* mail server的DNS,默认使用/etc/resolv.conf中设置的dns服务器来做解析,所以,完全没有必要在mail server上再架设DNS server。当然,你有兴趣搞定,那是perfect。笔者尝试过powerdns+dnscache,比传统的bind好用,支持web维护,后话了。。。,有空也整理这块,^_^。
* 使用Postfix+SASL来完成SMTP的SMTP-AUTH功能
Postfix本身并无帐号认证机制,故使用系统SASL service来做这块,工作原理是,当postfix发现有人要relay邮件时,会将帐号及密码信息传给SASL(saslauthd daemon),SASL会根据自己的验证方式,比如对/etc/passwd及/etc/shadow来决定是否可以relay邮件。
× 修改mynetworks为127.0.0.1可以relay邮件,所以此时当MUA尝试将邮件邮寄至另一台mail server时,会出现rlay access denied的错误提示
mail:~ # postconf -e 'mynetworks = 127.0.0.1'
mail:~ # postconf mynetworks
mynetworks = 127.0.0.1
mail:~ # rcpostfix restart
Shutting down mail service (Postfix) done
Starting mail service (Postfix) done
× 修改/etc/postfix/main.cf
mail:~ #vi /etc/postfix/main.cf
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,reject_unauth_destination
(注意,在main.cf中,缩进是意味着上一行的延续,可以看成是同一行)
利用postconf方式如下:
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e
'smtpd_recipient_restrictions= permit_sasl_authenticated,
permit_mynetworks,reject_unauth_destination'
× 上述参数的解释如下:
smtpd_sasl_auth_enable:开启mail client启动sasl认证,默认此项是不开启的
smtpd_sasl_security_options:取消匿名登陆方式
broken_sasl_auth_clients:开启此项的目的是让不支持RFC2554的smtp client也可以跟postfix做交互。
smtpd_recipient_restrictions:设定邮件中有关收件人部分的限制,(rcpt to:<收件人e-mail>),应用规则是[第一条符合后,便不会往下继续检查]。
permit_sasl_authenticated:允许使用sasl认证方式的使用者relay邮件
permit_mynetworks:允许mynetworks中设置的用户relay邮件
reject_unauth_destination:阻止@xxx.xxx,不在my_destination中的地址,退回他们的邮件。
× 修改系统sasl的相关设置vi /etc/sysconfig/saslauthd
## Path: System/Security/SASL
## Type: list(getpwent,kerberos5,pam,rimap,shadow,ldap)
## Default: pam
## ServiceRestart: saslauthd
#
# Authentication mechanism to use by saslauthd.
# See man 8 saslauthd for available mechanisms.
#
SASLAUTHD_AUTHMECH=pam
看这里是否为pam,其实默认就是使用pam的,主要检查下
× 检查,启动saslauthd service
#chkconfig --list saslauthd
#rcsaslauthd start
× 重新启动postfix
#rcpostfix restart
* 部门邮件,邮件列表功能/etc/aliases,其语法如下:
mail帐号:真实帐号1,真实帐号2,真实帐号3
mail帐号::include:邮寄人名单
例如:
vi /etc/aliases
mis:ray,fly,edison
vi /etc/aliases
allusers::include:/etc/allusers
前者直接写明帐号,适合人员少的情况;后者使用了一个文件,适合大量人员的情况
重新生成aliases.db,执行
#newaliases
#ls -l /etc/aliases
-rw-r--r-- 1 root root 2579 Jun 16 2006 aliases
-rw-r--r-- 1 root root 12288 Dec 23 02:54 aliases.db
* 同时,利用/etc/aliases文件,还能实现邮件的简单转发功能
#vi /etc/aliases
ray:ray,fly(这里邮寄给ray的信件会同时转发给ray和fly)
#newaliases
利用此文件有一个明显的缺点:只有root用户有操作权限,普通用户无法直接操作,提供如下方法,可以使普通用户也有权限。
以普通用户登陆后,创建~/.forward文件
/ray,fly
或者简化为
ray,fly
* 利用~/.forward还可以使用vacation命令来做假期邮件自动回复
在用户的家目录,编译.forward文件
ray@mailtest:~> vi .forward
/neo, "|/usr/bin/vacation neo"
编写内容文件vi ~/.vacation.msg
Subject: ray 1/10~1/22休假
7/10~7/20我正在休假中
有关你的Mail "$SUBJECT"
我回来,会尽快处理
初始化vacation库,使用如下命令
ray@mailtest:~> vacation -i
取消自动回复,只需要删除或重新命名.forward文件即可。
* Postfix的转录机制(always_bcc)
Postfix可以设置把所有收到和寄出的邮件,都转发到某个帐号里,设定非常简单
mailtest:~ # postconf always_bcc
always_bcc = <- 默认值为空
mail:~ # postconf -e 'always_bcc = ray@mailtest.tm'
此功能适合对信息安全要求较高的公司,或者满足保留公司邮件的需要,很多外国公司,按照他们的法律,所有的邮件都要保存7年,比如美国。
来自:http://blog.chinaunix.net/u2/62904/showart_1736668.html