構建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
250 2.1.0 Ok
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
X-Original-To: [email protected] //來源地址
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.zpp.com (Postfix) with SMTP id 27ECCE01ED //經過的MTA
for <[email protected]>; Thu, 28 Jan 2021 03:57:40 +0800 (CST)
subject:I Love You!
Message-Id: <[email protected]>
Date: Thu, 02 Tuesday 2010 03:57:40 +0800 (CST) //時間
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: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from localhost (localhost.localdomain [127.0.0.1])
by mail.zpp.com (Postfix) with SMTP id 27ECCE01ED
for <[email protected]>; Thu, 28 Jan 2021 03:57:40 +0800 (CST)
subject:I Love You!
Message-Id: <[email protected]>
Date: Thu, 28 Jan 2021 03:57:40 +0800 (CST)
From: [email protected]
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服務共同協作的應用。