配置郵件服務器
一.郵件系統的基本原理
1.簡介:一般情況下,我們把電子郵件程序分解成用戶代理,傳輸代理和投遞代理。 用戶代理將用戶的信件傳送至傳輸代理(如Outlook Express、FoxMail等)。郵件傳輸代理負責將郵件送到目標主機(如sendmail)。而投遞代理則從信件傳輸代理取得信件傳送至最終用戶的郵箱(如procmail)。
2.電子郵件系統的優點:可以在很短時間內把數據發送到目的地,發送和接收電子郵件的過程不會被中斷,隨時發送和接收電子郵件
3.電子郵件系統:
電子由件地址和電子郵箱
4.電子郵件格式:
信封和內容(報頭,郵件格式所規定的必要的部分;報文分爲信件內容和附件部分)
MUA,Mail User Agent,將郵件發往Internet上的一個ISP,它具有撰寫郵件、顯示郵件、處理郵件的功能
MTA,Mail Transfer Agent,它負責郵件的存儲和轉發(store and Forward)
5.電子郵件系統的工作原理
我們來模擬一封郵件從發出到收到的過程。用戶使用Outlook Express(用戶代理或叫做郵件客戶端)向Sendmail(傳輸代理)請求發送電子郵件的服務,將郵件交給Sendmail。Sendmail根據郵件的目的地址,將郵件發送給郵件接收服務器,郵件接收服務器將郵件緩存(這也是Sendmail的工作)。接收郵件的用戶用Outlook Express向郵件接收服務器發出取信的請求,郵件接收服務器將郵件發送給用戶(這是IMAP或POP服務的工作)。至此,一封郵件從發送者的機器到達接收者的機器。
我們要建立的郵件服務器,以Sendmail作郵件傳輸服務,IMAP作收信服務來構成郵件系統的基本框架。以Horde Imp作爲郵件的Web客戶端。剩下的就是Horde Imp的支持軟件:以MySQL存儲用戶數據,以Apache+PHP作爲Web服務器。我們還使用其它的模塊來擴充本系統的功能:通訊錄模塊和修改密碼模塊。
二.與電子郵件相關的協議
1.SMTP:Simple Message Transfer Protocol由RFC821定義,SMTP主機規定基礎的電子郵件提交系統怎麼傳遞報文.當MUA與MTA建立連接併發送郵件和MTA之間使用SMTP進行電子郵件的轉發時使用SMTP協議
SMTP的通信過程
2.多用途互聯網郵件擴充MIME,Multipurpose Internet Mail Extension是IETF爲發送二進制數據而發明的多種編碼方案,它允許發送方和接收方選擇方便的編碼方法,發送方在頭部包含一些附加行說明信息遵循MIME格式,以及在主體中增加一些附加行說明數據類型和編碼;還允許發送方將信息分成幾個部分,並對每個部分指定不同的編碼方法,即在一個信息中既發送普通文本又附加(attach)一個圖像,MIME自動解碼附加的數據,爲了透明的編碼和解碼,MIME在電子郵件頭部增加兩行:一行用來聲明使用MIME生成信息,另一行說明MIME信息是如何包含在正文中的
MIME-Version: 1.0
Content-Type:Multipart/Mixed; Boundary=Mime_separator|Content-Type:text/plain
3.郵件接收客戶訪問郵件的方式
郵件接收者對郵件服務器的請求訪問模式有離線、在線和斷線3種模式
4.POP3協議要檢測用戶登錄名和口令,然後將用戶的郵件從服務器移動到用戶本地桌面系統的MUA.它監聽TCP的110端口,POP3在RFC1939中定義,它是請求-響應式協議
5.IMAP4:是POP的替代品,它了POP相同的基本功能之外,還增加了對郵箱同步的支持,即IMAP提供瞭如何遠程維護服務器上的郵件箱的功能
三.sendmail簡介
1.sendmail的功能
接收SMTP郵件、爲郵件選擇路由、傳輸SMTP郵件、使用別名,從而允許使用郵件列表、錯誤檢測以及速度和代價優化
2.sendmail的結構和處理過程
3.安裝sendmail和imap
#rpm -qa|grep sendmail
插入第一張光盤
#mount /mnt/cdrom
#cd/mnt/cdrom/RedHat/RPMS
#rpm -ivh sendmail-8.12.8 -4.i386.rpm安裝sendmail服務軟件
#rpm -ivh m4-1.4.1 -13.i386.rpm用m4工具生成sendmail的配置文件
#cd;eject
插入第3張光盤
#mount /mnt/cdrom
#cd /mnt/cdrom/RedHat/RPMS
#rpm -ivh sendmail-cf-3.12.8 -4.i386.rpm
#rpm -ivh sendmail-doc-8.12.8 -4.i386.rpm
#cd;eject
4.啓動sendmail
mc
LOCAL_DOMAIN('abc.com')dnl設置本地域
LOCAL_DOMAIN('localhost.localdomain')dnl
DAEMON_OPTIONS('Port=smtp,Addr=192.168.1.57,Name=MTA')dnl 指定sendmail作爲MTA運行時的參數,dnl刪除尾部空格
#m4 sendmail.mc>sendmail.cf
#vi /etc/mail/sendmail.cf
C{w}abc.com設置類的值爲abc.com
C{w}localhost.localdomain
O DaemonPortOptions=port=smtp,Addr=192.168.1.57,Name=MTA命令O用於爲sendmail的選項賦值
O DaemonPortOptions=port=smtp,Addr=127.0.0.1,Name=MTA
#service sendmail start
四.安裝和啓動imap
1.安裝IMAP
#rpm -qa|grep imap
#mount /mnt/cdrom
#cd /mnt/cdrom/RedHat/RPMS
#rpm -ivh imap-2001a -18.i386.rpm
#cd;eject
2.啓動imap
#vi /etc/xinetd.d/imap
disable=no
service xinetd restart
3.配置DNS的MX記錄
IN MX 5 rhl9.abc.com
rhl9 IN MX 10 rhl9.abc.com
4.收發郵件測試:
#cat /etc/resolv.conf
nameserver 192.168.88.57
#mail [email][email protected][/email]
Subject:test1
Thist is a test1
.
Cc:
#su - user1
$mail
#mail -u user1
五.配置虛擬郵件用戶數據庫
#vi /etc/named.conf
配置虛擬域名字解析
#echo "abc.com">>/etc/mail/local-host-names
vi /etc/mail/access
abc.com RELAY
#cd /etc/mail
#makemap hash access.db<access
生成/etc/mail/virtusertable.db
#vi /etc/mail/virtusertable
[email][email protected][/email] user1
#cd /etc/mail
#makemap hash virtusertable.db<virtusertable
#service sendmail restart
測試
#mail [email][email protected][/email]
#mail -u user1
例:1.使用access數據庫
smtp協議是不需要身份驗證的,access數據庫可以限制基於主機的訪問控制
<地址><操作>
格式 舉例 說明
domain abc.com *.abc.com,即域內所有主機
ip address 192.168.12,192.168.11.11 網段內的所有主機及特定的主機
username@ user1@ 用戶名爲user1的郵件
操作:
格式 說明
OK 無條件接受或發送
RELAY 允許SMTP代理投遞
REJECT 拒絕授受併發布錯誤信息
DISCARD 丟棄郵件,無錯誤信息發佈
#vi /etc/mail/access
192.168.2.108 REJECT
user1@
測試:
在192.168.2.108計算機發送郵件測試
mail from:[email protected] rcpt to:[email protected]
例2:使用aliase數據庫
#vi /etc/aliases
aliases:recipient
zhangsan:user1
#newaliases命令生成aliases.db
rcpt to:zhangsan.abc.com
例3:轉發郵件
例4:僞造電子郵件
#telnet
set local_echo
open 192.168.2.168 25
mail from:[email protected]
rcpt to:[email protected]
data
subject:this is fake!欺騙
<cr>
<cr>
enter message
.
Quit