Postfix小技巧 [ 网站地图 ]

发表于:2009-10-12 浏览:271 作者: 来源:互联网

关键字:POSTFIX,技巧

描述: Q1、如何讓postfix找到最佳MX記錄A1、postfix預設會按DNS上面定義的優先度搜尋所有MX地址,對應MX記錄的伺服器一應答,postfix就停止搜索並投遞信件。但是如果對方伺服器如果返回狀態碼4xx(拒絕信件

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"
 

站长资讯网 做中国最丰富的资讯网站 沪ICP备05004089号