增加postfix的进程数
下面的设置依赖于内核版本:
要在引导的时候修改参数,修改/etc/sysctl.conf添加:
fs.file-max = 16384
kernel.threads-max = 2048
要在系统运行的时候修改参数,以root身份执行下面的命令
# echo 16384 > /proc/sys/fs/file-max
# echo 2048 > /proc/sys/kernel/threads-max
如何让postfix找到最佳MX记录
postfix缺省会按DNS上面定义的优先度查找所有MX地址,对应MX记录的服务器一应答,postfix就停止搜索并投递信件。
但是如果对方服务器如果返回状态码4xx(拒绝信件)或者5xx(延迟)来拒绝连接,那么postfix就会延迟这封信的发送,而不是继续寻找可用的MX记录。
如何让postfix能继续寻找MX记录呢?在main.cf设置:
smtp_skip_4xx_greeting = yes
smtp_skip_5xx_greeting = yes
然后执行postfix reload。
smtp_skip_5xx_greeting只有在20000104后面的版本才有提供
postfix时常提示出现关于set-uid的错误
传统的UNIX系统中,sendmail命令被安装成具有set-uid root权限,很多其他的MTA也有这个问题,但是postfix的sendmail命令由于安全方面的原因被设计成不能被set-uid root。
但是有些linux系统上有个很有用的工具叫linuxconf,会缺省把postfix的sendmail命令当成Sendmail的sendmail命令,并自动纠正它的权限位,即使你取消了postfix的sendamil的set-uid位,linuxconf还会乐此不疲地帮你修改回去。
解决方法有两个:
停止开机的linuxconf服务,并删除linuxconf。
如果是Suse Linux,那么可以进行如下设置:
在/etc/permissions.local添加:
/usr/sbin/sendmail root.root 755
并确定/etc/rc.config中PERMISSIONS_SECURITY参数的最后有设置 local,例如:
CHECK_PERMISSIONS=set
PERMISSION_SECURITY="secure local"
postfix出现错误“fatal: unknown service: smtp/tcp”
这个可能出现地原因是master.cf中指定postfix SMTP客户端运行在chroot环境中,但是必要的文件没有安装到/var/spool/postfix中。激活chroot功能让系统入侵者增加了一个障碍。
这里有两个解决方法:
取消master.cf中的chroot设置。
安装chroot运行需要的的文件,可以参考安装源码中examples/chroot-setup目录里面的说明
postfix出现错误“fatal: open database /etc/aliases.db”
文件存在,但是格式不对,导致的原因可能是aliases.db文件是由Berkeley DB版本1创建的,但是你现在使用的是版本2或者3,或者这个文件是用btree格式建立的,但是postfix能识别的格式是hash,解决的方法是以root的身份执行newaliases,这样就能建立一个postfix能识别的aliases.db文件。
如果按上面的方法处理后,newaliases的结果报告aliases.db文件长度是0,那么可能是编译的时候使用的db.h等Berkeley DB的开发库文件有问题,解决方法是正确安装Berkeley DB开发包。
postfix日志中出现“Host not found, try again”
发信给远端服务器上的用户,出现:
Jul 14 12:45:38 myhostname postfix/qmgr[2246]: 74FBF30501:
from=<sender@sender.domain> size=309 (queue active)
Jul 14 12:45:39 myhostname postfix/smtp[2349]: 74FBF30501:
to=<recip@recip.domain> relay=none, delay=3944, status=deferred (Name
service error for domain recip.domain: Host not found, try again)
但是用nslookup又能解析这个主机名。
postfix会首先进行MX记录查找,所以你执行nslookup的时候也应该首先查找MX记录。有些DNS服务器没有MX记录,那么就会出现这个错误
什么使用了postfix,majordomo的"approve"命令会中断
postfix的本地投递代理在信件头部添加一个Delivered-To信息,为了防止邮件由于转发造成循环。但是在majordomo邮件列表中, Delivered-To会在管理员批准要发送到列表的邮件有所妨碍,因为postfix会认为这封信是在循环发送。
现在推荐的解决方法是修改approve脚本,去掉任何带“/delivered-to/i”的行。
postfix如何设置取消Delivered-To头部信息
很多MUA在配置文件里面可以设置禁止出现Delivered-To:头部信息(例如~/.mailrc和/usr/lib/Mail.rc)
在邮件列表里面,Delivered-To头部信息会妨碍列表使用不想在外发邮件中出现的“secret alias”,所以建议在SMTP端口上面使用正规表达式过滤,在main.cf中设置:
smtpd_recipient_restrictions =
... regexp:/etc/postfix/access_regexp ...
smtpd_recipient_restrictions =
... pcre:/etc/postfix/access_regexp ...
/etc/postfix/access_regexp:
/^(.*)-outgoing@(.*)/ 554 Use $1@ $2 instead
prepend_delivered_header配置参数也控制Delivered-To的使用。缺省的设置是command, file, forward(在把信件发送给命令,发送给文件或者转发的时候使用Delivered-To)。不推荐在转发邮件的情况下取消Delivered-To头部信息。
如何在postfix中使用procmail
在main.cf中设置:
mailbox_command = /path/to/procmail
或者
/etc/postfix/main.cf:
mailbox_command = /path/to/procmail -a $EXTENSION
如果可以的话,避免使用shell的关键字符,比如" $",IFS或者"&&",因为它们会迫使postfix运行一个shell进程。
如何让postfix支持maildir
在main.cf中设置:
home_mailbox = Maildir/
任何相对路径末尾加上“/”号都表示打开了maildir支持,home_mailbox设置的值将会追加到用户的home目录,也就是如果你指定home_mailbox = mymail/,那么postfix也认为打开了maildir支持,并把信件投递到用户home目录下的mymail目录中。
为什么Postfix提示"NIS domain name not set - NIS lookups disabled"
提示的信息说明你的机器上面没有激活NIS,要在postfix本地投递代理中禁用NIS客户端代码,更改main.cf中对应的部分,根据aliases文件的类型进行下面的类似设置:
alias_maps = $alias_database
这将强制postfix只使用本地的aliases数据库。