歡迎您光臨本站 註冊首頁

Postfix 的FAQ 整理中 2005-11-17。

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

Postfix 的FAQ 整理中 2005-11-17。

Postfix 的FAQ
整理時間:2005-11-17
整理人員:Vincentzpf
註:所有資料全部來自網上。如果你有比較好的問題請跟貼,我把他們整理在一起。方便大家!
1. 增加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
  2.如何讓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後面的版本才有提供
3.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"
  4.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: 74FBF30501:
  from= size=309 (queue active)
   Jul 14 12:45:39 myhostname postfix/smtp: 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記錄,那麼就會出現這個錯誤
 5. 什麼使用了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目錄中。
  
6.為什麼Postfix提示"NIS domain name not set - NIS lookups disabled"
  
  提示的信息說明你的機器上面沒有激活NIS,要在postfix本地投遞代理中禁用NIS客戶端代碼,更改main.cf中對應的部分,根據aliases文件的類型進行下面的類似設置:
  alias_maps = $alias_database
  這將強制postfix只使用本地的aliases資料庫。
7. 為什麼Postfix提示「biff_notify: Connection refused」
  Postfix本地投遞代理預設會嘗試提示本地用戶新郵件到達,這個特性使用了comsat網路服務,但是comsat網路服務常常由於系統性能或者安全原因而關閉,所以出現這個"biff_notify: Connection refused"的警告。
  要在postfix投遞代理中取消comsat客戶端代碼,只要在/etc/postfix/main.cf中指定:
  biff = no
或者起用comsat服務。
8,Q:我從哪兒可以得到postfix的RPM安裝包?
  A:http://www.pobox.com/~sjmudd/postfix

9.Q:我下載的RPM安裝包,但是在安裝過程中出現了一個錯誤無法繼續安裝?
  A:Postfix是用來替代sendmail的,除非你用源碼進行安裝,否則,sendmail和postfix是不能同時存在在一個系統上的。要想解決這個問題,

必須要把sendmail刪掉,但刪除之前,最好對sendmail做一個備份。以root身份登錄:
mkdir /root/sendmail-old
cp /etc/aliases /root/sendmail-old
cp /etc/sendmail.cf /root/sendmail-old
cp /etc/sendmail.cw /root/sendmail-old
cp /etc/mail/* /root/sendmail-old
rpm -e sendmail sendmail-doc sendmail-cf --nodeps(在卸載sendmail的時候可能會有一些錯誤,用--nodeps可以不顯示錯誤信息)
killall sendmail
rpm -Uvh postfix-postfix-1.1.11-5.i386.rpm

10:Q:我是用的Red Hat Linux 7.3以上的版本,sendmail和postfix都已經安裝上了,但系統現在用的是sendmail,我應該怎麼辦?
  A:在Red Hat Linux 7.3以上的版本提供了兩個MTA軟體:sendmail和postfix,默認情況下,系統用的是sendmail,如果你想用postfix,你可

以在圖形界面下,GNOME選擇Main Menu Button (就是左下角的大按紐) => Programs => System => Red Hat Mail Transport Agent Switcher

。KDE選擇Main Menu Button (就是左下角的大按紐) System => Red Hat Mail Transport Agent  

Switcher。也可以在終端里輸入指令redhat-switchmail,如果這時沒有啟Xwindow系統,程序會自動

把Xwindow系統啟來,你可以用redhat-switchmail-nox來強制讓程序運行在text模式下。在這個程序里你可以選擇你所要用的MTA軟體,是send

mail還是postfix,如果想用postfix,選中postfix,保存退出。
/sbin/service sendmail stop  停止sendmail服務
/sbin/service postfix start  啟動postfix服務
這樣系統的MTA就換成postfix了。
《解決方案》

11,Q:安裝完成了,我應該怎麼來配置呢?
  A:postfix的配置文件位於/etc/postfix目錄下,一共有四個最基本的配置文件:install.cf main.cf master.cf postfix-script。mail.cf

:是postfix主要的配置文件。Install.cf:包含RPM包安裝過程中安裝程序產生的postfix初始化設置。master.cf:是postfix的master進程的

配置文件,該文件中的每一行都是用來配置postfix的組件進程的運行方式。postfix-script:這個裡面包含了一些postfix命令,以便我們在l

inux環境中安全地執行這些postfix命令。這些配置文件你只需要對/etc/postfix/mail.cf時行配置就可以了。

12,Q:我以前sendmail下的aliases怎麼辦?
  A:你可以把安裝postfix前備份的sendmail的aliases文件拷貝到/etc/postfix/aliases,如果確認配置沒有什麼問題並且在mail.cf中的配置

是正確的,就輸入newaliases把文件轉換成db文件就OK了。

13,Q:我使用了majordomo,並且我的所有aliases都在/etc/mail/majordomo里,我應該怎麼辦?
  A:把你以前用的majordomo文件可以拷貝到/etc/postfix/majordomo,並且保證在mail.cf中#alias_database = hash:/etc/aliases,  

hash:/opt/majordomo/aliases這一行是沒有被註釋掉的,修改這一行為#alias_database =  

hash:/etc/aliases,hash:/etc/postfix/majordomo,保存退出后,運行newaliases,如果你使用了bulk_mailer,你還需要對你的majordomo  

aliases做一些修改。

14,Q:postfix用的是什麼mail delivery agent (MDA)?
  A:postfix可以配置來用不同的MDA軟體,在Red Hat Linux下默認的MDA軟體是procmail,procmail對於Red Hat Linux和postfix是非常好用

的,沒有理由去使用其它的MDA軟體。你可以用rpm -q procmail檢查你的系統是否安裝了procmail。

15,Q:對於postfix的安全性,我如何讓postfix不響應verify請求?
  A:在默認的情況下,postfix是不對verify請求響應的。不充許通過發通電子郵件來探知用戶是否存在。可以看下面的例子:
# telnet localhost 25  
   Trying 127.0.0.1...  
   Connected to localhost.  
   Escape character is '^]'.  
   220 linuxserver.test.com ESMTP Postfix PostFix-v.2000  
   helo localhost  
   250 linuxserver.test.com  
   vrfy testuser  
   252 Send mail to find out  
   quit  
   221 Bye  
   Connection closed by foreign host.
#  

16,Q:在sendmail中我的設置有的虛擬域,在postfix下我如何來用呢?
  A:在postfix中使用虛擬域要比sendmail的配置方便多了,它沒有用m4來處理,是一些簡單易懂的E文。首先在/etc/postfix/mail.cf中要配

置上你的虛擬域為正確的轉發和接收域,修改/etc/postfix/main.cf中的mydestination參數,預設地,postfix接受符合以下條件的郵件:目

的地為$inet_interfaces的郵件、目的地為$mydestination的郵件、目的地為$virtual_maps的郵件。修改/etc/postfix/mail.cf文件中的參數

virtual_maps=hash:/etc/po stfix/virtual,如果/etc/postfix/virtual不存在,就新創建一個,下面是一個virtual文件的示例:
cat /etc/postfix/virtual
linux.net, abc.com, cc123.org, ppp.com

17,Q:postfix中我如何讓我的配置生效?
   A:以root用戶身份 postfix reload

18,Q:postfix中我如何刷新郵件隊列?
   A:以root用戶身份 postfix flush

19,Q:我必須使用一些map文件,來設置access文件和mailertable,我如何把這些轉換成.db格式?
   A:以root用戶身份 postmap /etc/postfix/access postmap 或 /etc/postfix/mailertable

20,Q:我如何讓postfix開機后自己運行?
   A:你可以通過ntsysv工具,選中postfix
《解決方案》

21,Q:我如何設置postfix的隊列延遲?
   A:你可以在postfix的主要配置文件/etc/postifx/main.cf中修改下列參數:
queue_run_delay (默認值 1000秒) 設置多長時間隊列管理進程去掃描無法投遞的郵件
Maximal_queue_lifetime (默認值 5天) 設置郵件在隊列里的最長時間
Minimal_backoff_time (默認值 1000秒) 在這個時間內,郵件不能夠被鎖定
Maximal_backoff_time (默認值 4000秒) 在這個時間之後,如果郵件仍然沒有被投遞,就認為是無法投遞
qmgr_message_recipient_limit (默認值 1000)

22,Q:如何禁止postfix對客戶端IP作反向域名解析?
   A:以root用戶身份登錄
postconf -e disable_client_dns_lookup = 1
postfix reload

23,Q:有什麼工具可以幫忙我分析我的postfix日誌嗎?
   A: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@youdomain.com
定時把分析報告寄給你,其它的一些使用參數可以看pflogsumm.pl里的信息。

24.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頭部信息。



25. 如何讓postfix支持maildir

在main.cf中設置:
home_mailbox = Maildir/
任何相對路徑末尾加上「/」號都表示打開了maildir支持,home_mailbox設置的值將會追加到用戶的home目錄,也就是如果你指定home_mailbox = mymail/,那麼postfix也認為打開了maildir支持,並把信件投遞到用戶home目錄下的mymail目錄中。



26. 如何在postfix中使用procmail

在main.cf中設置:
mailbox_command = /path/to/procmail
或者
/etc/postfix/main.cf:
mailbox_command = /path/to/procmail -a $EXTENSION
如果可以的話,避免使用shell的關鍵字元,比如"$",IFS或者"&&",因為它們會迫使postfix運行一個shell進程。

27. postfix如何設置發送郵件延遲通知

sendmail如果有信件因故延遲發送,每4個小時就會給發送者發信提示信件延遲發送。postfix能不能設置呢?



在main.cf中設置:
delay_warning_time = 4
因為考慮到信件流量的問題,postfix預設不發送通知。

28. 如何在撥號環境下使用postfix

有台撥號上網的機器,如何在它上面設置postfix使之在撥號成功后可以發送隊列中的信件?

在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
29. 啟動postfix的時候提示unsupported dictionary type: dbm,怎麼辦

原因是在main.cf中使用了錯誤的db類型,修改main.cf,把所有出現dbm的地方都替換成hash
《解決方案》

不是很明白
《解決方案》

謝謝樓主

我已經COPY成PDF、收藏了
《解決方案》

LZ真是個有心人!
《解決方案》

postfix 2x中,smtp_skip_4xx_greeting = yes 這項失效了。

smtp_skip_5xx_greeting = yes 這現為默認的了,不用重複添加了。
《解決方案》

很不錯啊,我又要重操舊業了。
《解決方案》

大俠們,請問,,,,
怎樣讓postfixadmin里新建郵箱時會自動產生想的郵箱目錄呀?
《解決方案》

在瀏覽器上進去postfixadmin/admin管理頁面的時候出現一登陸對話框,提示輸入用戶名和密碼,我看了這些個配置文件,實在不曉得該是什麼用戶名和密碼,有或者根本就是我那裡配置錯誤(在這之前安裝過一次,登陸這個頁面的時候就根本不需要用戶名和密碼,不過那次沒配置完機器就重新安裝了次系統),但是日誌文件也沒出現錯誤,啟動的時候也沒報錯,但是登陸管理頁面的時候會出現登陸對話框

麻煩大蝦們幫忙看看究竟什麼問題,怎麼解決?

[火星人 ] Postfix 的FAQ 整理中 2005-11-17。已經有765次圍觀

http://coctec.com/docs/service/show-post-32317.html