構建Postfix電子郵件系統
上次我們說了Sendmail.今天來看一下PostfixMail。Postfix最大的好處在於它採用了模塊化的設計,有多個不一樣的程序集合而成,分別用於實現不一樣的功能。還有就是能夠結合mysql數據庫使用虛擬郵件用戶。如今就來看看如何構建Postfix電子郵件系統。
前面概念我會稍微囉嗦一點,畢竟理解概念纔是最重要的。後面我就主要以配置爲主嘍,下面我們邊作邊說。
第一部分:編譯安裝Postfix
由於RHEL5系統中默認安裝了sendmail,因此在安裝Postfix前先將sendmail服務中止,以避免發生衝突。RHEL5也帶有Postfix軟件的RPM包,但功能太少了,它不支持MySQL數據庫,因此咱們採用Postfix的源碼包進行編譯安裝。首先從官方站點中下載程序文件包postfix-
2.4.6
.tar.gz ,地址以下:
而後下載相應版本的vda補丁包postfix-2.4.6-vda-ng.patch.gx,vda補丁用於支持對虛擬郵件用戶設置郵箱空間配額,地址以下:
1.
建立運行postfix服務的用戶(postfix)、組(postfix、postdrop)
說明:指定用戶postfix的UID爲1000,所屬組爲postfix,附加組爲postdrop,且不建立宿主目錄,禁止直接登陸到本地系統。
2.
解壓並釋放源碼包、合併補丁包
3.
預配置編譯參數
咱們採用源碼編譯安裝的AMP平臺,並使用RHEL5系統自帶的eyrus-sasl認證軟件,所以根據mysql、cyrus-sasl的庫文件和頭文件安裝位置對編譯參數CCARGS和AUXLIBS進行適當調整,配置命令及參數以下:
說明:在編譯前須要使用「make maekfiles」命令調整編譯參數,以便Postfix支持SASL認證和查詢MySQL數據庫。
其中,編譯參數CCARGS和AUXLIBS的做用以下:
CCARGS參數:爲編譯器提供額外的參數。「-I」選項指出標準的額外頭文件的存放目錄。例如,mysql和cyrus-sasl的頭文件分別位於目錄:/usr/local/mysql/lib/mysql、/usr/include/sasl.
AUXLIBS參數:指出位於標準位置以外的額外函數庫。若是須要連接SASL、MySQL或任何附加的函數庫,並且他們不是存在標準位置(/usr/lib目錄),則必須在AUXLIBS參數中指出這些函數庫的路徑,例如,mysql和cyrus-sasl的庫文件分別位於目錄:/usr/local/mysql/lib/mysql、/usr/lib/sasl2。
4.編譯並進行安裝
執行「make install」命令之後,期間會須要設置一些安裝參數,例如
說明:別看它問了這麼多,一路回車就能夠了,咱按照默認的來,呵呵!
如今Postfix算是裝好了,我們不急着作。先來看一下Postfix的目錄、配置文件及啓動控制,所謂磨刀不誤砍柴工!
Postfix的目錄及配置文件:
1.
Postfix的相關目錄
/etc/postfix:該目錄中包括Postfix服務的主配置文件、各種腳本、查詢表等。
/usr/libexec/postfix/:該目錄中包括Postfix服務的各個服務器程序文件。
/var/spool/postfix/:該目錄中包括Postfix服務的郵件隊列相關的子目錄。
其中每一個隊列子目錄用於保存不一樣的郵件,好比說:
1>.Incoming(傳入):剛接收到的郵件。
2>.Active(活動):正在投遞的郵件。
3>.Deferred(推遲):之前投遞失敗的郵件。
4>.Hold(約束):被阻止發送的郵件。
5>.Corrupt(錯誤):不可讀或不可分析的郵件。
/usr/sbin/:該目錄中包括Postfix服務的管理工具程序,這些程序文件名以post開頭。其中,主要的幾個程序文件及其做用以下。
1>.Postalias:用於構造、修改和查詢別名表。
2>.Postalias:用於顯示和編輯main.cf配置文件。
3>.Postfix:用於啓動、中止postfix,要求有root用戶權限。
4>.Postmap:用於構造、修改或者查詢查詢表。
5>.Postqueue:用於管理郵件隊列,通常用戶使用。
6>.Postsuper:用於管理郵件隊列,要求有root用戶權限。
2.
Postfix的配置文件
Postfix系統最主要的配置文件包括:/etc/postfix/main.cf和/etc/postfix/master.cf,前者是Postfix服務的配置文件,後者是master程序的配置文件。
使用postconf工具能夠查看當前Postfix服務所使用的配置參數
使用postconf工具還能夠簡化main.cf文件,只保留與默認配置不一樣的參數,以下:
[root@mail postfix]# postconf -n > main.cf
[root@mail postfix]# mv main.cf main.cf.bak //備份
[root@mail postfix]# mv main2.cf main.cf
3.
Postfix的日誌文件
Postfix系統的日誌文件位於「/var/log/maillog」,此文件記錄了Postfix服務器的運行狀態信息。咱們能夠常用帶「-f」選項的tail命令查看日誌。若是日誌太多了咱們可發使用egrep命令進行過濾。
4.
postfix的啓動控制
Postfix系統的啓動控制主要經過「/usr/sbin/postfix」命令進行,後面添加相應的start、stop、check、reload參數便可分別啓動、中止、檢查、重載postfix服務。用法很簡單我這就不作演示了哈!
第二部分:配置Postfix服務器
好了!如今該說的基本都說到了,咱們開始作吧!首先我把環境簡單描述一下:
1>.郵件服務器IP地址:192.168.1.1 主機名:mail.zpp.com
2>.郵件域:@zpp.com或mail.zpp.com
3>.AMP平臺:使用已編譯安裝好的Apache、MySQL、PHP,對應的安裝目錄分別是:
4>./usr/local/apache2、/usr/local/mysql、/usr/local/php5
5>. 使用已安裝好的DNS,的配置步驟我這就很少說了,上次搭建sendmail時有說到DNS,以及這個系列也專門寫過一篇DNS方面的
下面是具體的步驟:
1.
編輯main.cf文件,調整Postfix的基本運行參數
[root@mail ~]# cat /etc/postfix/main.cf
… …(此處我省略原來的內容)
inet_interfaces = 192.168.1.1,127.0.0.1 //設置監聽的IP
myhostname = mail.zpp.com //設置主機名
mydomain = zpp.com //設置郵件域
myorigin = $mydomain //設置外發郵件時發件人地址中的郵件域名
mydestination = $mydomain,$myhostname //設置可接收的郵件地址中的域名
home_mailbox =Maildir/ //設置郵件存儲位置和格式
2.
添加郵件用戶的賬號
[root@mail ~]# groupadd zoupanpan
[root@mail ~]# useradd -g zoupanpan -s /sbin/nologin zpp001
[root@mail ~]# useradd -g zoupanpan -s /sbin/nologin zpp002
[root@mail ~]# passwd zpp001
Changing password for user zpp001.
New UNIX password:
BAD PASSWORD: it is WAY too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@mail ~]# passwd zpp002
Changing password for user zpp002.
New UNIX password:
BAD PASSWORD: it is WAY too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
3.
測試SMTP發送郵件
[root@mail ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.zpp.com ESMTP Postfix
helo localhost //宣告客戶端地址
250 mail.zpp.com
mail from:zpp001@zpp.com //告知服務器發件人地址
250 2.1.0 Ok
rcpt to:zpp002@zpp.com //告知服務器收件人地址
250 2.1.5 Ok
Data //告知服務器要傳送數據了
354 End data with <CR><LF>.<CR><LF>
subject:I Love You! //主題
hello!
You are my super star! he he he ! //郵件內容以點結束
.
250 2.0.0 Ok: queued as 27ECCE01ED
Quit //退出
221 2.0.0 Bye
Connection closed by foreign host.
如今咱們到郵件用戶zpp002的宿主目錄下進行查看,能夠看到剛剛接收到的郵件保存在Maildir子目錄中。
[root@mail ~]# cat /home/zpp002/Maildir/new/1611777596.Vfd00I258020M248704.mail.zpp.com
Return-Path: <zpp001@zpp.com> //退信地址
X-Original-To: zpp002@zpp.com //來源地址
Delivered-To: zpp002@zpp.com //目標地址
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.zpp.com (Postfix) with SMTP id 27ECCE01ED //通過的MTA
for <zpp002@zpp.com>; Thu, 28 Jan 2021 03:57:40 +0800 (CST)
subject:I Love You!
Message-Id: <20100127195752.27ECCE01ED@mail.zpp.com>
Date: Thu, 02 Tuesday 2010 03:57:40 +0800 (CST) //時間
From: zpp001@zpp.com //發件人地址
To: undisclosed-recipients:;
hello!
You are my super star! he he he !
如今Postfix服務器已經搭建好了,下面咱們來看一下dovecot服務器是如何搭建的。
第二部分:構建Dovecot服務器
1.
編譯安裝Dovecot軟件包
Dovecot其實Red Hat5自帶的有,但我這仍是源碼編譯安裝一個吧。從下面這個連接能夠下載到我接下來要用到的源碼包:
安裝的步驟很簡單以下:
[root@mail ~]# useradd -M -s /sbin/nologin dovecot
[root@mail ~]# tar zxf dovecot-1.1.4.tar.gz
[root@mail ~]# cd dovecot-1.1.4
[root@mail dovecot-1.1.4]# ./configure --sysconfdir=/etc --with-mysql
[root@mail dovecot-1.1.4]# make ; make install
說明:若是dovecot用戶沒法建立,說明系統中默認就有了直接用就能夠了
2.
配置Dovecot的運行參數
1>.創建dovecot.conf配置文件並進行簡單設置
[root@mail dovecot-1.1.4]# cp /etc/dovecot-example.conf /etc/dovecot.conf
[root@mail dovecot-1.1.4]# cat /etc/dovecot.conf
… …(此處省略)
ssl_disable = yes //禁用SSL機制
protocols = pop3 imap //制定支持的郵局協議
disable_plaintext_auth = no //容許明文密碼認證
mail_location = maildir:~/Maildir //設置郵件存儲格式及位置
… …(此處省略)
2>.建立PAM認證文件
[root@mail ~]# cat /etc/pam.d/dovecot
#%PAM-1.0
auth required pam_nologin.so
auth include system-auth
account include system-auth
session include system-auth
說明:說的是建立,其實系統裏默認就有了。
3.
啓動Dovecot服務,並查看其監聽的TCP端口(110、143)
[root@mail ~]# /usr/local/sbin/dovecot -c /etc/dovecot.conf
[root@mail ~]# netstat -nutpl | grep dovecot
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 23251/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 23251/dovecot
說明:dorecot服務的啓動程序位於「/usr/local/sbin」目錄中,使用-c選項能夠指定所使用的配置文件的位置,若是使用默認配置文件,則直接執行「dovecot」命令便可。
4.
測試POP3接收郵件
[root@mail ~]# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.
user zpp002 //使用郵件用戶「zpp002」登陸
+OK
pass 123.com //鍵入密碼123.com
+OK Logged in.
List //查看郵件列表
+OK 1 messages:
1 485
.
retr 1 //收取並查看第一封郵件內容
+OK 485 octets
Return-Path: <zpp001@zpp.com>
X-Original-To: zpp002@zpp.com
Delivered-To: zpp002@zpp.com
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.zpp.com (Postfix) with SMTP id 27ECCE01ED
for <zpp002@zpp.com>; Thu, 28 Jan 2021 03:57:40 +0800 (CST)
subject:I Love You!
Message-Id: <20210127195752.27ECCE01ED@mail.zpp.com>
Date: Thu, 28 Jan 2021 03:57:40 +0800 (CST)
From: zpp001@zpp.com
To: undisclosed-recipients:;
hello!
You are my super star! he he he !
.
quit
+OK Logging out.
Connection closed by foreign host.
好了,我們如今在客戶端上測試一下吧!MUA就使用windows自帶的OE。下面是測試的步驟:
1>.配置客戶機的DNS
2>.啓動windows自帶的OE
3>.設置用戶使用的郵件賬號
雖然上次sendmail中已經說過這個問題但如今仍是再說一下。設置完賬號後別望了鉤選「個人服務器要求身份驗證」,如圖:
4>.驗證郵件服務器的發信、收信功能
下圖是我截取的一幅zpp001用戶的發件箱,能夠看到郵件是可發成功發送的。
下圖是用戶zpp002的收件箱,咱們能夠看到郵件成功的發送了過來。
咱們已經看到了Postfix郵件的基本應用,由此能夠解決企事業內部的郵件收發,若是要使用戶能和Internet上的用戶通郵,DNS中的反向記錄及MX記錄是少不了的。OK!因爲篇幅有限,本次就說到這裏吧!下次你們會看到當下較爲流行的SquirrelMail與Postfix、Dovecot服務共同協做的應用。