postfix技巧
2024-07-21 02:37:28
供稿:網(wǎng)友
增加postfix的進程數(shù)
下面的設(shè)置依靠于內(nèi)核版本:
要在引導(dǎo)的時候修改參數(shù),修改/etc/sysctl.conf添加:
fs.file-max = 16384
kernel.threads-max = 2048
要在系統(tǒng)運行的時候修改參數(shù),以root身份執(zhí)行下面的命令
# echo 16384 > /PRoc/sys/fs/file-max
# echo 2048 > /proc/sys/kernel/threads-max
如何讓postfix找到最佳MX記錄
postfix缺省會按DNS上面定義的優(yōu)先度查找所有MX地址,對應(yīng)MX記錄的服務(wù)器一應(yīng)答,postfix就停止搜索并投遞信件。
但是假如對方服務(wù)器假如返回狀態(tài)碼4xx(拒絕信件)或者5xx(延遲)來拒絕連接,那么postfix就會延遲這封信的發(fā)送,而不是繼續(xù)尋找可用的MX記錄。
如何讓postfix能繼續(xù)尋找MX記錄呢?在main.cf設(shè)置:
smtp_skip_4xx_greeting = yes
smtp_skip_5xx_greeting = yes
然后執(zhí)行postfix reload。
smtp_skip_5xx_greeting只有在20000104后面的版本才有提供
postfix時常提示出現(xiàn)關(guān)于set-uid的錯誤
傳統(tǒng)的UNIX系統(tǒng)中,sendmail命令被安裝成具有set-uid root權(quán)限,很多其他的MTA也有這個問題,但是postfix的sendmail命令由于安全方面的原因被設(shè)計成不能被set-uid root。
但是有些linux系統(tǒng)上有個很有用的工具叫l(wèi)inuxconf,會缺省把postfix的sendmail命令當(dāng)成Sendmail的sendmail命令,并自動糾正它的權(quán)限位,即使你取消了postfix的sendamil的set-uid位,linuxconf還會樂此不疲地幫你修改回去。
解決方法有兩個:
停止開機的linuxconf服務(wù),并刪除linuxconf。
假如是Suse Linux,那么可以進行如下設(shè)置:
在/etc/permissions.local添加:
/usr/sbin/sendmail root.root 755
并確定/etc/rc.config中PERMISSIONS_SECURITY參數(shù)的最后有設(shè)置 local,例如:
CHECK_PERMISSIONS=set
PERMISSION_SECURITY="secure local"
postfix出現(xiàn)錯誤“fatal: unknown service: smtp/tcp”
這個可能出現(xiàn)地原因是master.cf中指定postfix SMTP客戶端運行在chroot環(huán)境中,但是必要的文件沒有安裝到/var/spool/postfix中。激活chroot功能讓系統(tǒng)入侵者增加了一個障礙。
這里有兩個解決方法:
取消master.cf中的chroot設(shè)置。
安裝chroot運行需要的的文件,可以參考安裝源碼中examples/chroot-setup目錄里面的說明
postfix出現(xiàn)錯誤“fatal: open database /etc/aliases.db”
文件存在,但是格式不對,導(dǎo)致的原因可能是aliases.db文件是由Berkeley DB版本1創(chuàng)建的,但是你現(xiàn)在使用的是版本2或者3,或者這個文件是用BTree格式建立的,但是postfix能識別的格式是hash,解決的方法是以root的身份執(zhí)行newaliases,這樣就能建立一個postfix能識別的aliases.db文件。
假如按上面的方法處理后,newaliases的結(jié)果報告aliases.db文件長度是0,那么可能是編譯的時候使用的db.h等Berkeley DB的開發(fā)庫文件有問題,解決方法是正確安裝Berkeley DB開發(fā)包。
postfix日志中出現(xiàn)“Host not found, try again”
發(fā)信給遠端服務(wù)器上的用戶,出現(xiàn):
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記錄查找,所以你執(zhí)行nslookup的時候也應(yīng)該首先查找MX記錄。有些DNS服務(wù)器沒有MX記錄,那么就會出現(xiàn)這個錯誤
什么使用了postfix,majordomo的"approve"命令會中斷
postfix的本地投遞代理在信件頭部添加一個Delivered-To信息,為了防止郵件由于轉(zhuǎn)發(fā)造成循環(huán)。但是在majordomo郵件列表中, Delivered-To會在治理員批準要發(fā)送到列表的郵件有所妨礙,因為postfix會認為這封信是在循環(huán)發(fā)送。
現(xiàn)在推薦的解決方法是修改approve腳本,去掉任何帶“/delivered-to/i”的行。
postfix如何設(shè)置取消Delivered-To頭部信息
很多MUA在配置文件里面可以設(shè)置禁止出現(xiàn)Delivered-To:頭部信息(例如~/.mailrc和/usr/lib/Mail.rc)
在郵件列表里面,Delivered-To頭部信息會妨礙列表使用不想在外發(fā)郵件中出現(xiàn)的“secret alias”,所以建議在SMTP端口上面使用正規(guī)表達式過濾,在main.cf中設(shè)置:
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配置參數(shù)也控制Delivered-To的使用。缺省的設(shè)置是command, file, forward(在把信件發(fā)送給命令,發(fā)送給文件或者轉(zhuǎn)發(fā)的時候使用Delivered-To)。不推薦在轉(zhuǎn)發(fā)郵件的情況下取消Delivered-To頭部信息。
如何在postfix中使用procmail
在main.cf中設(shè)置:
mailbox_command = /path/to/procmail
或者
/etc/postfix/main.cf:
mailbox_command = /path/to/procmail -a $EXTENSION
假如可以的話,避免使用shell的要害字符,比如"$",IFS或者"&&",因為它們會迫使postfix運行一個shell進程。
如何讓postfix支持maildir
在main.cf中設(shè)置:
home_mailbox = Maildir/
任何相對路徑末尾加上“/”號都表示打開了maildir支持,home_mailbox設(shè)置的值將會追加到用戶的home目錄,也就是假如你指定home_mailbox = mymail/,那么postfix也認為打開了maildir支持,并把信件投遞到用戶home目錄下的mymail目錄中。
為什么Postfix提示"NIS domain name not set - NIS lookups disabled"
提示的信息說明你的機器上面沒有激活NIS,要在postfix本地投遞代理中禁用NIS客戶端代碼,更改main.cf中對應(yīng)的部分,根據(jù)aliases文件的類型進行下面的類似設(shè)置:
alias_maps = $alias_database
這將強制postfix只使用本地的aliases數(shù)據(jù)庫。
為什么Postfix提示“biff_notify: Connection refused”
postfix本地投遞代理缺省會嘗試提示本地用戶新郵件到達,這個特性使用了comsat網(wǎng)絡(luò)服務(wù),但是comsat網(wǎng)絡(luò)服務(wù)經(jīng)常由于系統(tǒng)性能或者安全原因而關(guān)閉,所以出現(xiàn)這個"biff_notify: Connection refused"的警告。
要在postfix投遞代理中取消comsat客戶端代碼,只要在/etc/postfix/main.cf中指定:
biff = no
或者起用comsat服務(wù)。