Q1、如何讓postfix找到最佳MX記錄 A1、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後面的版本才有提供。 Q2、postfix如何設置送出信件延遲通知 sendmail如果有信件因故延遲送出,每4個小時就會給送出者發信提示信件延遲送出。postfix能不能設置呢? A2、在main.cf中設置: delay_warning_time = 4 因為考慮到信件流量的問題,postfix預設不送出通知。 Q3、postfix時常提示出現關於set-uid的錯誤 提示的大概內容是:「sendmail has set-uid root file permissions, or is run from a set-uid root process」 A3、傳統的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" Q4、postfix出現錯誤「fatal: unknown service: smtp/tcp A4、這個可能出現地原因是master.cf中指定postfix SMTP客戶端運行在chroot環境中,但是必要的文件沒有安裝到/var/spool/postfix中。激活chroot功能讓系統入侵者增加了一個障礙。 這裡有兩個解決方法: (1)取消master.cf中的chroot設置。 (2)安裝chroot運行需要的的文件,可以參考安裝源碼中examples/chroot-setup目錄裡面的說明。 Q5、postfix出現錯誤「fatal: open database /etc/aliases.db」 A5、有兩個可能: (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開發包。 Q6、為什麼Postfix提示「biff_notify: Connection refused」 A6、postfix本地投遞代理預設會嘗試提示本地使用者新信件到達,這個特性使用了comsat網路服務,但是comsat網路服務常常由於系統性能或者安全原因而關閉,所以出現這個"biff_notify: Connection refused"的警告。 要在postfix投遞代理中取消comsat客戶端代碼,只要在/etc/postfix/main.cf中指定: biff = no 或者起用comsat服務。 Q7、為什麼Postfix提示"NIS domain name not set - NIS lookups disabled" A7、提示的資訊說明你的機器上面沒有啟動NIS,要在postfix本地投遞代理中禁用NIS客戶端代碼,更改main.cf中對應的部分,根據aliases文件的類型進行下面的類似設置: alias_maps = $alias_database 這將強制postfix只使用本地的aliases資料庫。 Q8、postfix如何設置取消Delivered-To Header資訊 A8、 (1)很多MUA在配置文件裡面可以設置禁止出現Delivered-To:Header資訊(例如~/.mailrc和/usr/lib/Mail.rc) (2)在信件列表裡面,Delivered-ToHeader資訊會妨礙列表使用不想在外發信件中出現的「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- ToHeader資訊。 Q9、如何讓postfix支持maildir A9、在main.cf中設置: home_mailbox = Maildir/ 任何相對路徑末尾加上「/」號都表示打開了maildir支持,home_mailbox設置的值將會追加到使用者的home目錄,也就是如果你指定 home_mailbox = mymail/,那麼postfix也認為打開了maildir支持,並把信件投遞到使用者home目錄下的mymail目錄中。 Q10、如何在postfix中使用procmail A10、在main.cf中設置: mailbox_command = /path/to/procmail 或者 /etc/postfix/main.cf: mailbox_command = /path/to/procmail -a $EXTENSION 如果可以的話,避免使用shell的關鍵字符,比如"$",IFS或者"&&",因為它們會迫使postfix運行一個shell進程。 Q11、為什麼使用了postfix,majordomo的"approve"命令會中斷 A11、postfix的本地投遞代理在信件頭部添加一個Delivered-To資訊,為了防止信件由於轉發造成循環。但是在majordomo信件列表中, Delivered-To會在管理員批準要送出到列表的信件有所妨礙,因為postfix會認為這封信是在循環送出。 現在推薦的解決方法是修改approve腳本,去掉任何帶「/delivered-to/i」的行。 Q12、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又能解析這個主電腦名。 A12、postfix會首先進行MX記錄搜尋,所以你執行nslookup的時候也應該首先搜尋MX記錄。有些DNS伺服器沒有MX記錄,那麼就會出現這個錯誤。 Q13、啟動postfix的時候提示unsupported dictionary type: dbm,怎麼辦 A13、原因是在main.cf中使用了錯誤的db類型,修改main.cf,把所有出現dbm的地方都替換成hash。 Q14、哪裡有最適合redhat的postfix rpm包 A14、有很多人在單獨開發postfix的各種rpm版本,但是對Redhat Linux兼容性最好的simon mudd開發的版本,可以到:http://postfix.wl0.org/en/available-packages/ 取得這些rpm。 Q15、有什麼適合postfix的日誌分析工具 A15、James S. Seymour用perl寫了一個叫pflogsumm.pl的腳本,可以到這裡下載: http://jimsun.linxnet.com/postfix_contrib.html 然後可以在crontab中添加下面的內容: 0 2 * * * /path/to/pflogsumm.pl -d today /var/log/maillog | mail -s "Mail Report" you@somewhere.com 定時把分析報告寄給你。 Q16、如何在撥號環境下使用postfix 有台撥號上網的機器,如何在它上面設置postfix使之在撥號成功後可以送出隊列中的信件? A16、在postfix站台上有個討論主題,解決方法是在main.cf中做如下設置: # your ISP‘s SMTP server name or IP address goes here relayhost = smtprelay.someprovider.com # # this line disables spontaneous PPP connections defer_transports = smtp # # this line disables dns lookups for mail. As you are using a relay you really don‘t need DNS. If you use this you should use an ip address for $relayhost. disable_dns_lookups = yes 並在撥號腳本中加入: /usr/sbin/sendmail -q Q17、如何處理syslogd昇級後qmgr突然停止寫日誌的問題 在redhat6.x上面使用postfix,根據redhat公司的建議昇級了syslogd,結果造成qmgr突然停止寫日誌,如何解決這個問題? A17、qmgr是一個長時間運行的進程,可能是新的syslogd使用了不同的接口,而正在運行的qmgr進程沒有注意到這個變化,使用postfix reload命令重新啟動Postfix和新的隊列管理qmgr. Q18.希望能備份所有寄出的郵件,給任一USER ? A18.在於 /etc/postfix/main.cf 中加入一行 always_bcc = user@mail.com.tw 將這行 mailbox_command = /usr/bin/procmail -a "$EXTENSION" 改為#mailbox_command = /usr/bin/procmail -a "$EXTENSION" |