天天看點

郵件伺服器-postfix伺服器

postfix 是一種電子郵件伺服器,它是由任職于ibm華生研究中心(t.j. watson research center)的荷蘭籍研究員wietse venema為了改良sendmail郵件伺服器而産生的。最早在1990年代晚期出現,是一個開放源代碼的軟體。

sendmail由于出現的比較早,但是各方面的問題也比較突出,postfix就是為了替代sendmail的缺點而出現的,postfix 郵件伺服器的優點很明顯:

1. 開源的,要知道開源的即是免費的

2. 速度更快,比sendmail×××倍

3. 相容性好,與sendmail相容,兩者互相遷移很友善。

4. 更能幹,在重負荷之下仍然能正常工作,當超負荷之後,他會自動調整

5. 更靈活,不同于sendmail一體化的設計,postfix使用子產品化的設計,各個子產品專注于自己的工作。

6. 安全性,具有多層的防禦結構。

postfix的子產品有哪些呢?

1. smtpd 用于響應使用者的請求

2. cleanup 用于檢測文法

3. pickup 用于分檢郵件

4. smtp 類似于用戶端,傳輸郵件

5. qmgr 隊列管理器 用于不同郵件狀态的管理。

postfix由這些還有其他的一些子產品來進行服務,各個子產品自己完成自己的任務,他們由一個master程序統一排程

postfix的四種郵件隊列?

1. maildrop 本地郵件存放處

2. incoming 放置正在到達或者隊列管理程序尚未發現的郵件

3. active 放置已經打開了正準備投遞的郵件,當然它是由長度限制的。

4. deferred 放置不能被投遞的郵件

隊列管理程序僅僅在記憶體中保留active隊列,并且限制其長度。

postfix 對郵件風暴的處理

當有新的郵件到達的時候,postfix進行初始化,此時postfix同時隻接受兩個并發連接配接請求,當郵件投遞成功後,可以同時接收的并發連接配接就會緩慢地增長,一直到可配置的值

當系統資源消耗已經達到不能承受的負載,就會停止并發連接配接數量的增長,或者postfix在處理郵件過程中遇到問題,數量也會減少。

當接收到的新郵件的數量,超過它的投遞能力時,postfix會停止投遞deferred隊列中的郵件,去處理新接收到的郵件,因為處理新郵件的延遲小于處理defferred隊列中的郵件。

postfix 對無法投遞的郵件的處理

當第一次發送失敗,postfix會給該郵件,貼上一個将來的時間有票,在達到這個時間之前,不會再處理該類郵件,到到達這個時間時,進行投遞,再次失敗,将再次貼上一個雙倍與第一次的郵件将來時間的郵票,以此類推,進行多次嘗試之後,放棄該郵件,回複使用者錯誤資訊

postfix對于目标不可達的目的郵件的處理

postfix記憶體之中儲存了一個有長度限制的不可達的位址清單,避免想這些地方進行郵件投遞

postfix的安全性

1. 動态配置設定記憶體,放置系統緩沖區溢出

2. 把大郵件分割成幾塊處理,投遞時在進行重組

3. postfix的各個程序互相不進行控制,隻接受master主程序的控制

4. postfix 的隊列檔案有其特殊格式,隻能被postfix本身識别

postfix郵件服務對于郵件的處理過程:

接收的過程: 當接受新郵件時,新的郵件首選在incoming隊列停留,并進行處理

1. 對于來自與本地的郵件:local程序負責接收,并放置郵件于maildrop隊列中,然後pickup程序對其進行完整性檢測,maildrop目錄的權限必須進行設定 避免使用者删除其他使用者的郵件

2. 對于網絡的郵件:smtpd 程序負責接收郵件,并且進行安全性檢測

3. postfix程序會自己産生郵件,用于将郵件的不可投遞資訊傳回給發件人,這些工作由bounce背景程式産生

4. postfix 産生郵件,提示postfix管理者 postfix運作過程中出現問題

5. cleanup程序,對郵件進行處理,添加信頭中丢失的form資訊。也就是将位址重寫為标準的user@’域名‘ 的格式,從信頭中抽取收件人的位址,投入到incoming隊列中,請求處理該信件,請求位址重寫程序将收件人位址轉換為标準的user@‘域名’的格式

郵件的投遞過程

上面的部分結束之後,郵件已經到達incoming的隊列了,接下來進行郵件的投遞。

1. 郵件到達郵件隊列管理程序,他将辦含有隊列檔案路徑資訊,發件人位址,收件人位址的投遞請求發送給投遞代理。

2. 與此同時,郵件隊列管理程序維護者deferred,active隊列,不同狀态的郵件放置于的隊列

3. 針對于發送成功與失敗,隊列管理程序與rewrite,與bounce背景程式練習,成功的給rewrite進行位址解析,失敗的給bounce傳回資訊給使用者

4. 檢查成功的郵件送給投遞代理程序,local和smtpd

實驗:linux中實作postfix郵件伺服器

實驗環境:linux 虛拟機5.4

1.安裝postfix。

[root@mailserver]# rpm -ivh postfix-2.3.3-2.1.el5_2.i386.rpm

[root@mailserver]# rpm -ivh system-switch-mail-0.5.25-12.noarch.rpm

//用于轉換郵件伺服器的工具,系統預設sendmail作為郵件伺服器,轉換為postfix

2.選擇postfixmail

郵件伺服器-postfix伺服器

3. 配置檔案

子產品管理檔案 /etc/postfix/master.cf

主配置文檔 /etc/postfix/main.cf

postconf -d 檢視預設的參數值

postconf -n 檢視新的參數值

postconf -e 編輯

編輯main.cf檔案

69myhostname = mail.163.com //本地域名

77mydomain = 163.com //自己的域名

93myorigin = $mydomain

//實作位址僞裝,将郵件的真實來源改正為myorigin所指的域名中。

110inet_interfaces = localhost //隻接受自己的使用者

107inet_interfaces = all //監聽所有

156mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

//哪些是本地信件,允許本地作用域發送郵件。

郵件伺服器-postfix伺服器

觀察日志資訊,如果咩有打開main.cf 156行的注釋

郵件伺服器-postfix伺服器

郵件狀态進入到了 deferred,發送失敗

郵件伺服器-postfix伺服器

配置本地使用者可以發送郵件。則發送成功!

postfix mail的中繼!!

255mynetworks = 168.100.189.0/28, 127.0.0.0/8

在所标記網段中 的 計算機發來的郵件允許中繼。

postfix mail的中安全認證!

broken_sasl_auth_clients= yes

smtpd_sasl_auth_enable= yes

smtpd_sasl_security_options= noanonymous //不允許匿名賬号發送

#smtpd_sasl_application_name= smtpd //smtpd

#smtpd_client_restrictions= permit_sasl_authenticated,reject//經過驗證可以連接配接,沒經過

驗證拒絕

#smtpd_client_restrictions= permit_sasl_authenticated //限制使用者連接配接驗證不驗證都連

smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

将他們寫入postfix的主配置檔案中

郵件伺服器-postfix伺服器
郵件伺服器-postfix伺服器

[root@mail~]# service saslauthd restart

[root@mail~]# vim /usr/lib/sasl2/smtpd.conf

當然此時如果使用不存在的賬号,來測試是否能通訊的話,還是能夠發送郵件,那是因為身份驗證不是強制性的。

673smtpd_client_restrictions = permit_sasl_authenticated,reject //更改配置檔案

郵件伺服器-postfix伺服器

還是需要 auth login 進行驗證賬号密碼 均為base64 編碼

拓展:

squirrelmail是一套基于标準的,采用php4開發webmail郵件系統。它内置純php支援的imap和smtp協定,所有頁面都遵循html4.0标準(沒有使用javascript支援),以便最大限度相容更多浏覽器上。它對系統要求非常低,并且安裝和配置非常容易。squirrelmail具備一個用戶端郵件程式所應擁有的一切功能,包括支援增強型的mime、位址薄、檔案夾操作等等功能。outlook皮膚主題。

[root@mail~]# yum install squirrelmail

[root@mail~]# cd /var/www/html/

[root@mailhtml]# ln -s /usr/share/squirrelmail mail

[root@mailsqurrmail]# cd /var/www/html/squrrmail

[root@mailsqurrmail]# ./conf.pl

郵件伺服器-postfix伺服器

與性能有關的配置

郵件伺服器-postfix伺服器

伺服器設定

郵件伺服器-postfix伺服器

全局配置

郵件伺服器-postfix伺服器

語言選項

郵件伺服器-postfix伺服器

登陸測試

郵件伺服器-postfix伺服器
郵件伺服器-postfix伺服器

當登陸之後,提示錯誤,錯誤資訊是沒有imap伺服器,也就是沒有郵件接收伺服器,而linux中的郵件接收伺服器是dovecot,是以安裝dovecot,并啟動dovecot 服務之後

郵件伺服器-postfix伺服器
郵件伺服器-postfix伺服器

673#smtpd_client_restrictions = permit_sasl_authenticated,reject

編輯配置檔案,注釋行

郵件可以發送出去了

繼續閱讀