postfix 配置詳解

來源:互聯網
上載者:User

 .1 postfix的設定檔結構

postfix的設定檔位於/etc/postfix下,安裝完postfix以後,我們可以通過ls命令查看postfix的設定檔:

[root@mail postfix]# ls

install.cf main.cf master.cf postfix-script

這四個檔案就是postfix最基本的設定檔,它們的區別在於:

mail.cf:是postfix主要的設定檔。

Install.cf:包含安裝過程中安裝程式產生的postfix初始化設定。

master.cf:是postfix的master進程的設定檔,該檔案中的每一行都是用來配置postfix的組件進程的運行方式。

postfix-script:封裝了一些postfix命令,以便我們在linux環境中安全地執行這些postfix命令。

4.2 postfix的基本配置

postfix大約有100個配置參數,這些參數都可以通過main.cf 指定。配置的格式是這樣的,用等號串連參數和參數的值。如:

myhostname = mail.mydomain.com

等號的左邊是參數的名稱,等號的右邊是參數的值; 當然,我們也可以在參數的前面加上$來引用該參數,如:

myorigin = $myhostname

雖然postfix有100個左右的參數,但是 postfix為大多數的參數都設定了預設值,所以在讓postfix正常為你服務之前,你只需要配置為數不多的幾個參數。下面我們一起來看一看這些基本的postfix參數。需要注意的是,一旦你更改了main.cf檔案的內容,則必須運行 postfix reload命令使其生效。

1. myorigin

myorigin參數指明寄件者所在的網域名稱。如果你的使用者的郵件地址為user@domain.com,則該參數指定@後面的網域名稱。預設地, postfix使用本地主機名稱作為myorigin,但是建議你最好使用你的網域名稱,因為這樣更具有可讀性。比如:安裝postfix的主機為 mail.domain.com則我們可以這樣指定myorigin:

myorigin = domain.com

當然我們也可以引用其他參數,如:

myorigin = $mydomain

2. mydestination

mydestination參數指定postfix內送郵件時收件者的網域名稱,換句話說,也就是你的postfix系統要接收什麼樣的郵件。比如:你的使用者的郵件地址為user@domain.com, 也就是你的域為domain.com, 則你就需要接收所有收件者為user_name@domain.com的郵件。與myorigin一樣,預設地,postfix使用本地主機名稱作為 mydestination。如:

mydestination = $mydomain

mydestination = domain.com

3. notify_classes

在postfix系統中,必須指定一個postfix系統管理員的別名指向一個使用者,

只有這樣,在使用者遇到問題時才有報告的對象,postfix也才能將系統的問題報告給管理員。notify_classes參數就是用來指定向postfix管理員報告錯誤時的資訊層級。共有以下幾種層級:

bounce:將不可以投遞的郵件的拷貝發送給postfix管理員。出於個人隱私的緣故,該郵件的拷貝不包含信頭。

2bounce:將兩次不可投遞的郵件拷貝發送給postfix管理員。

delay:將郵件的投遞延遲資訊發送給管理員,僅僅包含信頭。

policy:將由於UCE規則限制而被拒絕的使用者請求發送給postfix管理員,包含整個SMTP會話的內容。

protocol:將協議的錯誤資訊或使用者企圖執行不支援的命令的記錄發送給postfix管理員。同樣包含整個SMTP會話的內容。

resource:將由於資源錯誤而不可投遞的錯誤資訊發送給postfix管理員,比如:隊列檔案寫錯誤等等。

software:將由於軟體錯誤而導致不可投遞的錯誤資訊發送給postfix管理員。

預設值為:

notify_classes = resource, software

4.myhostname

myhostname 參數指定運行postfix郵件系統的主機的主機名稱。預設地,該值被設定為本地機器名。你也可以指定該值,需要注意的是,要指定完整的主機名稱。如:

myhostname = mail.domain.com

5.mydomain

mydomain參數指定你的網域名稱,預設地,postfix將myhostname的第一部分刪除而作為mydomain的值。你也可以自己指定該值,如:

mydomain = domain.com

6.mynetworks

mynetworks 參數指定你所在的網路的網路地址,postfix系統根據其值來區別使用者是遠端還是本地的,如果是本網使用者則允許其訪問。你可以用標準的A、B、C類網路地址,也可以用CIDR(無類域間路由)地址來表示,如:

192.168.1.0/24

192.168.1.0/26

7.inet_interfaces

inet_interfaces 參數指定postfix系統監聽的網路介面。預設地,postfix監聽所有的網路介面。如果你的postfix運行在一個虛擬ip地址上,則必須指定其監聽的地址。如:

inet_interfaces = all

inet_interface = 192.168.1.1

4.3 postfix的UCE(unsolicited commercial email)控制

所謂UCE控制就是指控制postfix接收或轉寄來自於什麼地方的郵件。

預設地,postfix轉寄符合以下條件的郵件:

* 來自用戶端ip地址符合$mynetworks的郵件。

* 來自用戶端主機名稱符合$relay_domains及其子域的郵件。

* 目的地為$relay_domains及其子域的郵件。

預設地,postfix接受符合以下條件的郵件:

* 目的地為$inet_interfaces的郵件。

* 目的地為$mydestination的郵件。

* 目的地為$virtual_maps的郵件。

但是我們也可以通過下面的規則來實現更強大的控制功能。

1. 信頭過濾

通過header_checks參數限制內送郵件的信頭的格式,如果符合指定的格式,則拒絕接收該郵件。可以指定一個或多個查詢列表,如果新郵件的信頭符合列表中的某一項則拒絕該內送郵件。如:

header_checks = regexp:/etc/postfix/header_checks

header_checks = pcre:/etc/postfix/header_checks

預設地,postfix不進行信頭過濾。

2.用戶端主機名稱/地址限制

通過smtpd_client_restrictions參數限制可以向postfix發起SMTP 串連的用戶端的主機名稱或ip地址。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條合格規則被執行。可用的規則有:

reject_unknown_client:如果用戶端的ip 地址在DNS中沒有PTR記錄則拒絕轉寄該用戶端的串連請求。可以用 unknown_client_reject_code參數指定返回給客戶機的錯誤碼(預設為450)。如果你有使用者沒有作DNS記錄則不要啟用該選項。

permit_mynetworks:如果用戶端的ip地址符合$mynetworks參數定義的範圍則接受該用戶端的串連請求,並轉寄該郵件。

check_client_access maptype:mapname:根據用戶端的主機名稱、父網域名稱、ip地址或屬於的網路搜尋access資料庫。如果搜尋的結果為REJECT 或者 '[45]XX text' 則拒絕該用戶端的串連請求;如果搜尋的結果為OK、RELAY 或數字則接受該用戶端的串連請求,並轉寄該郵件。。可以用access_map_reject_code參數指定返回給客戶機的錯誤碼(預設為 554)。

reject_maps_rbl:如果用戶端的網路地址符合$maps_rbl_domains參數的值則拒絕該用戶端的串連請求。可以用maps_rbl_reject_code參數指定返回給客戶機的錯誤碼(預設為554)。

樣本:

smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rbl

smtpd_client_restrictions = permit_mynetworks, reject_unknown_client

該參數的預設值為:

smtpd_client_restrictions =

也即接收來自任何用戶端的SMTP串連。

3. 是否請求HELO命令

可以通過smtpd_helo_required參數指定用戶端在SMTP會話的開始是否發送一個HELO命令。你可以指定該參數的值為yes或no。預設值為:

smtpd_helo_required = no

4. HELO主機名稱限制

可以通過smtpd_helo_restrictions參數指定用戶端在執行HELO命令時發送給postfix的主機名稱。預設地, postfix 接收用戶端發送的任意形式的主機名稱。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條合格規則被執行。可用的規則有:

reject_invalid_hostname:如果HELO命令所帶的主機名稱參數不符合文法規範則拒絕客戶機的串連請求。可以用invalid_hostname_reject_code參數指定返回給客戶機的錯誤碼(預設為501)。

permit_naked_ip_address:RFC要求用戶端的HELO命令包含的ip地址放在方括弧內,你可以用permit_naked_ip_address參數取消該限制。因為有的mail用戶端不遵守該RFC的規定。

reject_unknown_hostname:如果用戶端執行HELO命令時的主機名稱在DNS中沒有相應的A 或 MX 記錄則拒絕該用戶端的串連請求。可以用invalid_hostname_reject_code參數指定返回給客戶機的錯誤碼(預設為450)。

reject_non_fqdn_hostname:如果用戶端執行HELO命令時的主機名稱不是RFC規定的完整的網域名稱則拒絕用戶端的串連請求。可以用invalid_hostname_reject_code參數指定返回給客戶機的錯誤碼(預設為504)。

check_helo_access maptype:mapname:根據用戶端HELO的主機名稱、父網域名稱搜尋access資料庫。如果搜尋的結果為REJECT 或者 '[45]XX text' 則拒絕該用戶端的串連請求;如果搜尋的結果為OK、RELAY 或數字則接受該用戶端的串連請求。可以用access_map_reject_code參數指定返回給客戶機的錯誤碼(預設為554)。

樣本:

smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname

5. RFC 821信頭限制

RFC 821對郵件的信頭做了嚴格的規定,但是廣泛使用的sendmail並不支

持該規定,所以對於該參數我們只能說不,即:

strict_rfc821_envelopes = no

6. 通過寄件者地址進行限制

可以用smtpd_sender_restrictions參數通過寄件者在執行MAIL FROM命令時提供的地址進行限制。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條合格規則被執行。可用的規則有:

reject_unknown_sender_domain:如果MAIL FROM命令提供的主機名稱在DNS中沒有相應的A 或 MX 記錄則拒絕該用戶端的串連請求。可以用unknown_address_reject_code參數指定返回給客戶機的錯誤碼(預設為450)。

check_sender_access maptype:mapname:根據MAIL FROM命令提供的主機名稱、父域搜尋access資料庫。如果搜尋的結果為REJECT 或者 '[45]XX text' 則拒絕該用戶端的串連請求;如果搜尋的結果為OK、RELAY 或數字則接受該用戶端的串連請求。可以用access_map_reject_code參數指定返回給客戶機的錯誤碼(預設為554)。可以通過該參數過濾來自某些不受歡迎的寄件者的郵件。

reject_non_fqdn_sender:如果MAIL FROM命令提供的主機名稱不是RFC規定的完整的網域名稱則拒絕用戶端的串連請求。可以用non_fqdn_reject_code 參數指定返回給客戶機的錯誤碼(預設為504)。

預設地,postfix接受來自任何寄件者的郵件。

樣本:

smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain

7. 通過收件者地址進行過濾

可以用smtpd_recipient_restrictions參數通過寄件者在執行RCPT TO命令時提供的地址進行限制。預設值為:

smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains

可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條合格規則被執行。可用的規則有:

check_relay_domains:如果符合以下的條件,則接受SMTP串連請求,否則拒絕該串連,可以用relay_domains_reject_code 參數指定返回給客戶機的錯誤碼(預設為504)。

* 用戶端主機名稱符合$relay_domains及其子域

* 目的地為$inet_interfaces、$mydestination或$virtual_maps

permit_auth_destination:不管用戶端的主機名稱,只要符合以下的條件,就

接受SMTP串連請求:

* 解析後的目標地址符合$relay_domains及其子域

* 解析後的目標地址符合$inet_interfaces、$mydestination或$virtual_maps

reject_unauth_destination:不管用戶端的主機名稱,只要符合以下的條件,就拒絕該用戶端SMTP串連請求:

* 解析後的目標地址符合$relay_domains及其子域

* 解析後的目標地址符合$inet_interfaces、$mydestination或$virtual_maps

check_recipient_access:根據解析後的目標地址、父域搜尋access資料庫。如果搜尋的結果為REJECT 或者 '[45]XX text' 則拒絕該用戶端的串連請求;如果搜尋的結果為OK、RELAY 或數字則接受該用戶端的串連請求。可以用access_map_reject_code參數指定返回給客戶機的錯誤碼(預設為554)。

reject_unknown_recipient_domain:如果收件者的郵件地址在DNS中沒有相應的A 或 MX 記錄則拒絕該用戶端的串連請求。可以用unknown_address_reject_code參數指定返回給客戶機的錯誤碼(預設為450)。

reject_non_fqdn_recipient:如果寄件者在執行RCPT TO命令時提供的地址

不是完整的網域名稱則拒絕其SMTP串連請求。可以用The non_fqdn_reject_code參數指定返回給客戶機的錯誤碼(預設為504)。

4.4 posftfix的效能控制

之所以對postfix的效能進行控制,是為了在遇到郵件風暴時保證postfix可以正常運行。通常,我們可以通過對下列postfix 參數的配置來調節postfix的效能,這些參數都是通過mail.cf設定檔進行配置的,修改以後不要忘了運行postfix reload命令來使配置生效。

1. 進程數限制

可以通過default_process_limit 參數來控制postfix系統同時可以啟動並執行最大進程數目。預設值是50個。

2. 對同一目標主機的並發串連限制

當向同一目標主機發出SMTP串連時,postfix初始化發出兩個SMTP串連,如果投遞成功則增加並發的SMTP串連數目,遇到擁塞時又減少並發串連的數目。postfix中通過以下的參數對同一目標主機的並發串連進行控制:

* initial_destination_concurrency:控制對同一目標主機的初始化並發串連數目。預設值為2。

* default_destination_concurrency_limit:控制初始化串連後對同一目標主機的最大並發串連數目。預設值為10。

* local_destination_concurrency_limit:控制對同一本地收件者的最大同時投遞的郵件數目。預設值為2,因為對本地同一收件者投遞郵件時投遞工作只能一個接一個的進行,所以設得在大也沒用。

3. 對同一封郵件的收件者數目限制

通過default_destination_recipient_limit參數來控制postfix的投遞代理(如

smtp進程)可以將同一封郵件發送給多少個收件者。預設值為50。也可以用明確指出該投遞代理的參數來覆蓋該預設值。如用smtpd_recipient_limit來指定smtp投遞代理可以將同一封郵件發送給多少個收件者,該參數的預設值為1000。

4. 延遲投遞控制

通過defer_transports參數,我們可以延遲投遞該參數指定的郵件直到postfix明確的提出投遞要求。下面我們看一個例子:

有一個小型的區域網路,使用者都將郵件發送給區域網路內部的一台postfix郵件伺服器,然後通過在該伺服器上撥號將郵件發送出去。這時我們可以這樣指定該參數的值:

defer_transports = smtp

該語句表示postfix延遲投遞所有的郵件直到執行sendmail -q命令,這樣我們就可以在ppp的指令碼中加上sendmail -q,以便在撥號成功後讓postfix開始投遞郵件。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.