Postfix常见问题解答

 

增加postfix的进程数


下面的设置依赖于内核版本:



  1. 要在引导的时候修改参数,修改/etc/sysctl.conf添加:
    fs.file-max = 16384
    kernel.threads-max = 2048
     
  2. 要在系统运行的时候修改参数,以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还会乐此不疲地帮你修改回去。
解决方法有两个:



  1. 停止开机的linuxconf服务,并删除linuxconf。
     
  2. 如果是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功能让系统入侵者增加了一个障碍。
这里有两个解决方法:
 



  1. 取消master.cf中的chroot设置。
     
  2. 安装chroot运行需要的的文件,可以参考安装源码中examples/chroot-setup目录里面的说明

postfix出现错误“fatal: open database /etc/aliases.db”



  1. 文件存在,但是格式不对,导致的原因可能是aliases.db文件是由Berkeley DB版本1创建的,但是你现在使用的是版本2或者3,或者这个文件是用btree格式建立的,但是postfix能识别的格式是hash,解决的方法是以root的身份执行newaliases,这样就能建立一个postfix能识别的aliases.db文件。
     
  2. 如果按上面的方法处理后,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头部信息



  1. 很多MUA在配置文件里面可以设置禁止出现Delivered-To:头部信息(例如~/.mailrc和/usr/lib/Mail.rc)
     
  2. 在邮件列表里面,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
     
  3. 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数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值