增加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= size=309 (queue active) Jul 14 12:45:39 myhostname postfix/smtp[2349]: 74FBF30501: to= 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数据库。 为什么Postfix提示“biff_notify: Connection refused” postfix本地投递代理缺省会尝试提示本地用户新邮件到达,这个特性使用了comsat网络服务,但是comsat网络服务经常由于系统性能或者安全原因而关闭,所以出现这个"biff_notify: Connection refused"的警告。 要在postfix投递代理中取消comsat客户端代码,只要在/etc/postfix/main.cf中指定: biff = no 或者起用comsat服务。
|