一、電子郵件系統(tǒng)的組成
Linux系統(tǒng)中的電子郵件系統(tǒng)包括3個組件:MUA(Mail user Agent,郵件用戶代理)、MTA(Mail Transfer Agent,郵件傳送代理)、MDA (Mail Dilivery Agent,郵件投送代理)
1、MUA
MUA是電子郵件系統(tǒng)的客戶端程序,它是用戶與電子郵件系統(tǒng)的接口
,主要負責郵件的發(fā)送和接受以及郵件的撰寫,閱讀等功能,目前主流的用戶代理平臺有OutLook、foxmail和Linux中的Mail
2、MTA
MTA是電子郵件系統(tǒng)的服務(wù)器程序、它主要負責郵件的存儲和轉(zhuǎn)發(fā)
。最常用的MTA軟件由基于Windows平臺的Exchange、和基于Linux平臺的Sendmail和postfix。
3、MDA
MDA又是也稱LDA(Local Dilivery Agent,本地投遞代理)MTA把郵件投遞到郵件接受者所在的郵件服務(wù)器**MDA則負責把郵件按照接收者的用戶名投遞到郵箱中
**
4、MUA,MTA,MDA的協(xié)同工作
總的來說,當使用MUA程序?qū)懶艜r,應(yīng)用程序會把信件發(fā)送給sendmail或者postfix這樣的MTA程序。如果信件時寄給局域網(wǎng)或本地主機的,那么MTA程序應(yīng)該從地址上就可以確定這個信息。
二、與電子郵件相關(guān)的協(xié)議
常用的電子郵件協(xié)議有SMTP,POP3,IMAP4
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,該協(xié)議默認工作再TCP的25端口。SMTP屬于客戶機/服務(wù)器類型,它是一組用于由源地址目的地址傳送到郵件的規(guī)則,由他來控制新建的中轉(zhuǎn)方式,SMTP屬于TCP/IP協(xié)議簇,它幫助每臺計算機再發(fā)哦是那個或中專新建時找到下一個目的地。
POP3(Post Office Protocol3)即郵局協(xié)議的第三個版本。該協(xié)議默認工作在TCP的110端口,POP3同樣屬于客戶機/服務(wù)器模型,它是規(guī)定怎樣將個人計算機連接到Internet的郵件服務(wù)器和下載電子郵件的協(xié)議。它是Internet電子郵件的第一個離線協(xié)議標準,POP3允許從服務(wù)器上把郵件存儲到本地主機即自己的計算機上,同時刪除保存在郵件服務(wù)器上的郵件。
三、郵件中繼
中繼是指要求你的服務(wù)器向其他服務(wù)器傳遞郵件的一種請求。一個服務(wù)器處理的郵件只有兩類,一類是外發(fā)的郵件,一類是接收的郵件,前者是本域用戶通過服務(wù)器要向外部轉(zhuǎn)發(fā)的郵件,后者是發(fā)給本域用戶的。
一個用戶不應(yīng)該處理過路的郵件,就是既不是你的用戶轉(zhuǎn)發(fā)的,也不是發(fā)給你的用戶的,而是一個外部用戶發(fā)給另一個外部用戶的。這一行為稱為第三方中繼。如果是不需要經(jīng)過驗證就可以中繼郵件到組織外的,稱為Open RELAY(開放中繼),“第三方中繼”和“開放中繼”是要禁止的,但中繼是不能關(guān)閉的。這里需要了解幾個概念。
(1)中繼:用戶通過服務(wù)器將郵件傳遞到組織外
(2)OPEN RELAY:不受限制的組織外中繼,即無驗證的用戶也可提交中繼請求。
(3)第三方中繼:由服務(wù)器提交的OPEN RELAY 不是從客戶端直接提交的。比如網(wǎng)段域是A,我通過服務(wù)器B中轉(zhuǎn)郵件到C域,這時服務(wù)器B上看待的是連接請求來源于A域的服務(wù)器,而郵件既不是服務(wù)器B所在域用戶提交的,也不是發(fā)給B域的,這就是屬于第三方中繼。這是垃圾郵件的根本。如果用戶通過直接連接你的服務(wù)器發(fā)送郵件,這是無法阻止的,比如群發(fā)軟件。如果關(guān)閉了OPEN RELAY,那么他只能發(fā)信到你的組織內(nèi)用戶,無法將郵件中繼出組織。
**sendmail相關(guān)配置文檔**
**sendmail.cf**:sendmail核心配置文件,位于/etc/mail/sendmail.cf
sendmail.mc:sendmail提供sendmail文件模板,通過編輯此文件后再使用m4工具將結(jié)果導入sendmail.cf完成配置Sendmail核心配置文件,降低配置復(fù)雜性,位于/etc/mail/sendmail.mc
local-host-name:定義收發(fā)郵件服務(wù)器的域名和主機別名,位于/etc/mail/local-host-names
accesss.db:用來設(shè)置Sendmail服務(wù)器為哪些主機進行轉(zhuǎn)發(fā)郵件,位于/etc/mail/access.db
aliases.db:用來定義郵件別名,位于/etc/mail/aliases.db
virtusertaable.db:用來設(shè)置虛擬賬戶,位于/etc/mail/virtusertable.db
***
四、Sendmail常規(guī)服務(wù)器配置
1.Sendmail服務(wù)器配置步驟
如果想要成功地假設(shè)Sendmail服務(wù)器,除了需要理解其工作原理外,還需要清楚整個設(shè)定流程,以及在整個流程中每一步的作用。一個建議Sendmail服務(wù)器設(shè)定流程主要包含一下幾個步驟。
(1)配置好DNS
(2)檢查是否安裝Sendmail
(3)修改/etc/mail/sendmail.mc
(4)使用m4工具編譯產(chǎn)生sendmail.cf文件,啟動Sendmail服務(wù)器
(5)修改/etc/mail/access文件
(6)編譯生成access.db
(7)修改/etc/mail/local-host-names。
(8)啟動Sendmail服務(wù)器
(9)創(chuàng)建用戶
(10)測試
2.Sendmail.cf和sendmail.mc
sendmail.cf是Sendmail的核心配置文件
,有關(guān)Sendmail參數(shù)的設(shè)定大都需要修改文件。正因如此,sendmail的文件實在太復(fù)雜,可以說是天書,為了降低設(shè)置的復(fù)雜性,人們使用修改sendmail.mc文件來代替直接修改Sendmail.cf文件。
所以只需要通過修改sendmail.mc,再使用m4工具將結(jié)果導入sendmail.cf文件中即可。通過這種方法可以大大降低配置復(fù)雜度。、
sendmail.mc內(nèi)容非常龐大,但大部分都被注釋,以"dnl"開頭隨后的信息無效,我們再通常配置sendmail服務(wù)器的時候,只需要修改以下內(nèi)容
116 DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
在括號中的Addr字段表示SMTP協(xié)議偵聽的地址為127.0.0.1.我們在通常的配置中,需要將其改為題目所要求的網(wǎng)段或者0.0.0.0以來加大偵聽范圍
,否則,郵件將無法正常發(fā)送信件
3.m4工具的使用
m4工具是一個強大的宏處理過濾器,他的復(fù)雜性完全不亞于sendmail.cf。在使用m4工具之前,請先確認服務(wù)器上安裝了該軟件包,默認情況下m4工具是被安裝好的。
在配置過程中,需要利用m4工具將編輯后的sendmail.mc文件內(nèi)容重定向到sendmail.cf文件中。這樣可避免去直接編輯復(fù)雜的sendmail.cf文件;如下所示:
m4 sendmail.mc > sendmail.cf
注意:此時如果sendmail報錯,那么就是因為sendmail.cf中有錯誤,在第39行多空了一個,我們只需要把那多的一行刪掉,在重啟即可。
4.local-host-names文件
該文件用來定義收發(fā)郵件的主機別名,默認情況下該文件位于/etc/mail下
,為了使sendmail服務(wù)正常工作,必須在該文件中添加主機名稱或主機別名,否則提示錯誤。
假如郵件服務(wù)器有兩個主機名稱,分別是mail.skils.com和mail1.skills.com,而只想收到發(fā)給mail.skills.com的信件,發(fā)給mail1.skills.com的信件則不受,那么需要添加mail.skills.com到loxal-host-names中;
如下所示:
# local-host-names - include all aliases for your machine here.
mail.skills.com
skills.com
如果想要所有主機別名都可以收發(fā)郵件,請參照上述例子把所有的主機別名都添加到文件中即可。
5.別名和群發(fā)設(shè)置:
用戶別名是經(jīng)常用到的一個功能,別名就是給用戶起另外一個名字。例如給用戶A起個別名為B,則以后發(fā)給B的郵件實際A用戶來接收。
為什么要用到這個功能呢?
- 首先root用戶無法收發(fā)郵件,如果有發(fā)給root用戶的信件必須為root用戶建立別名。
- 其次群發(fā)設(shè)置需要用到這個功能,企業(yè)內(nèi)部在使用郵件服務(wù)的時候,經(jīng)常會按照部門群發(fā)信件,發(fā)給財務(wù)部的郵件只能財務(wù)部的所有人才會收到,其他則收不到。
使用格式如下:
aliases: user[,user,user,...]
其中alias為郵件地址中的用戶名,而recioient是實際接收該郵件的用戶。下面通過幾個例子來說明用戶別名的設(shè)置方法:
例1:
為user1賬號設(shè)置別名為toto,為user2賬號設(shè)置別名為popo
[root@localhost named]# vim /etc/mail/aliases //創(chuàng)建aliases文件并對其修改
toto: user1
popo: user2
例2:
假設(shè)網(wǎng)絡(luò)組在此服務(wù)器內(nèi)都有一個電子郵件賬戶,現(xiàn)在我們要給網(wǎng)絡(luò)組的所有成員發(fā)送一封相同內(nèi)容的電子郵件??梢允褂脛e名機制中的有機胺列表功能實現(xiàn):
group: net1,ne2,net3,....
6.利用Access文件設(shè)置郵件中繼
Access文件用于控制郵件中繼(RELAY)和郵件的進出管理??梢岳肁ccess文件來限制哪些客戶端可以使用此郵件服務(wù)器來轉(zhuǎn)發(fā)郵件。例如限制莫某個域的客戶端拒絕轉(zhuǎn)發(fā)郵件,也可以限制某個網(wǎng)段的客戶端可以轉(zhuǎn)發(fā)郵件。其格式如下:
對象 處理方式
對象和處理方式的表現(xiàn)形式并不單一,每一行都包含對象和對它們的處理方式。下面對常見的對象和處理方式的類型做簡單介紹。
Access文件中的每一行都具有一個對象和一種處理方式,我們要根據(jù)環(huán)境需要進行二者的組合。
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
例:允許192.168.0.0網(wǎng)段自由發(fā)送郵件,但拒絕客戶端ftp.skills.com及除192.168.123.101以外的192.168.123.0網(wǎng)段的所有主機
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
Connect:192.168.0 RELAY
Connect:192.168.123 REJECT
Connect:ftp.skills.com REJECT
Connect:192.168.123.101 OK
最后使用makemap命令生成新的access.db數(shù)據(jù)庫
[root@localhost named]# cd /etc/mail
[root@localhost mail]# makemap hash access.db<access
7.設(shè)置SMTP驗證
利用access.db文件實現(xiàn)郵件中繼代理時,對于利用撥號上網(wǎng)的用戶不太現(xiàn)實,此時可以使用SMTP驗證機制對指定的用戶進行郵件中繼。
編輯/etc/mail/sendmail.mc文件,修改和認證相關(guān)的配置行。
52 TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
53 define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
78 FEATURE(`no_default_msa', `dnl')dnl
125 DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
刪除這幾行每行開頭的dnl
(1)TRUST_AUTH_MECH的作用是使Sendmail不管Access文件中如何設(shè)置,都能relay那些通過LOGIN、PLAIN、或DIGEST-MD5方式驗證的郵件
(2)confAUTH_MECHANISMS的作用是確定系統(tǒng)的認證方式
(3)`Port=submission, Name=MSA, M=Ea的作用是開啟認證
,并以子進程運行MSA,實現(xiàn)郵件的賬戶和密碼的驗證。
7.2 使用m4命令重新生成/etc/mail/sendmail.cf文件
[root@localhost mail]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
7.3 重啟sendmail服務(wù) 和 saslauthd服務(wù)
systemctl restart sendmail saslauthd
8.設(shè)置郵箱容量
設(shè)置用戶郵件大小設(shè)置,原來限制為2MB,建議設(shè)置為20MB,注意**單位為字節(jié)
**。2000000=2M,20000000=20M
36 define(`UUCP_MAILER_MAX', `20000000')dnl
設(shè)置本地郵箱的域名
157 LOCAL_DOMAIN(`skills.com')dnl
設(shè)置完畢,使用m4工具生成新的sendmail.cf文件
m4 /etc/mail/sednmail.mc > /etc/mail/sendmail.cf
五、設(shè)置虛擬域用戶
使用虛擬域??梢詫l(fā)送給虛擬域的郵件投遞到真是域的用戶郵箱中。利用虛擬域也可以實現(xiàn)郵件列表的功能。這里的虛擬域可以是不存在的域,而真實域既可以是本地域,也可以是遠程域名Inter中的域。
虛擬域是真實域的別名,通過虛擬域用戶表/etc/mail/virtusertable.db,實現(xiàn)了虛擬域的郵件地址到真實域的郵件地址的重定向。
虛擬域用戶表/etc/mail/virtuserable.db文件**是通過/etc/mail/virtuserable文件生成
**的。如下所示
虛擬域地址 真實域地址
虛擬域地址和真實域地址之間用Tab分隔,該文件中虛擬域地址和真實域地址可以寫完整也可以只有域名或用戶名,如下幾種格式皆可
@sales.com @smile.com
user1@smile.com user2
user1@smile.com user1,user2,user3
如果要實現(xiàn)郵件列表功能,則各個真實域地址之間用逗號分隔。
例題:
Sendmail郵件服務(wù)器的域為smile.com,為該郵件服務(wù)器設(shè)置虛擬域skills.com。并為user1@smile.com指定虛擬域名別名user1@skills.com。
具體步驟如下:
(1)配置DNS服務(wù)器,并設(shè)置虛擬域的MX資源記錄
1 修改DNS區(qū)域解析文件,添加skills.com域
zone "skills.com" IN {
type master;
file "1";
allow-update { none; };
};
zone "123.168.192.in-addr.arpa" IN {
type master;
file "2";
allow-update { none; };
};
2 創(chuàng)建并編輯skills.com區(qū)域的正向解析文件/var/named/1
cd /var/named/
cp -a named.localhost 1
cp -a named.loopback 2
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
@ IN MX 10 mail.skills.com
mail IN A 192.168.123.101
(2) 將虛擬域skills.com加入到/etc/mail/local-host-named文件中
echo "skills.com" >> /etc/mail/local-host-names
(3)配置郵件中繼
利用vim編輯器編輯/etc/mail/access文件
[root@localhost named]# vim /etc/mail/access
skills.com RELAY
使用makemap命令生成/etc/mail/access.db文件
[root@localhost named]# makemap hash /etc/mail/access.db < /etc/mail/access
設(shè)置虛擬域列表/etc/mail/virtuserable,并生成/etc/mail/virtuserable.db
使用vim編輯器編輯/etc/mail.access文件
vim /etc/mail/virtusertable
user1@skils.com user1@smile.com
生成新的/etc/mail/virtusertable.db文件
makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable
重啟sendmail服務(wù) 注:若此處重啟失敗 可以使用systemctl status sendmail(named) -l查看服務(wù)狀態(tài) 一般來說查看的就是named.conf,sendmail.cf兩個文件
六、 調(diào)試Sendmail服務(wù)器
1.使用Telnet登錄服務(wù)器并發(fā)出郵件
當Sendmail服務(wù)器搭建好后,使用telnet工具可以快速的登錄服務(wù)器的25端口并發(fā)出郵件。
2.下載telnet工具及mail工具
(mail工具可以快速的幫助我們查看各個郵件用戶的郵箱)
yum install -y telnet mailx
下載完畢后,我們關(guān)閉防火墻
systemctl stop firewalld
setenforce 0
3.登錄sendmail服務(wù)器
[root@localhost mail]#
[root@localhost mail]# telnet localhost 25 //利用telnet命令登錄郵件服務(wù)器25端口
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.14.7/8.14.7; Mon, 15 May 2023 00:26:24 +0800
mail from:user1@smile.com //設(shè)置發(fā)信人地址
250 2.1.0 user1@smile.com... Sender ok
rcpt to:user2@skills.com //設(shè)置收件人地址
250 2.1.5 user2@skills.com... Recipient ok
data //data表示要開始寫信內(nèi)容了
354 Enter mail, end with "." on a line by itself
this is a happy mail
wish you happy everyday! //這兩行都是信件的內(nèi)容
. //“.”表示結(jié)束信件內(nèi)容 千萬不要漏掉了
250 2.0.0 34EGQO8V001584 Message accepted for delivery
quit //退出telnet服務(wù)器的命令
221 2.0.0 localhost.localdomain closing connection
telnet中,每當我們輸入過指令后,服務(wù)器都會回復(fù)一段數(shù)字代碼。熟知這些代碼,有利于我們更好的掌握sendmail并判斷服務(wù)器錯誤原因。
4.常見的回應(yīng)代碼及其含義
回應(yīng)代碼 | 說明 |
---|---|
220 | 表示SMTP服務(wù)器開始提供服務(wù) |
250 | 表示命令指定完畢,回應(yīng)正確 |
354 | 開始輸入信件的內(nèi)容,并以“.”結(jié)束 |
500 | 表示SMTP語法錯,無法執(zhí)行命令 |
501 | 表示指令參數(shù)或引述的語法錯誤 |
502 | 表示不支持該命令 |
5.利用Mailx命令接收電子郵件
安裝好并重啟mailx后,我們可以輸入以下命令來查詢郵件
[root@localhost mail]# mail -u user2 使用命令查看user2的郵箱
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/mail/user2": 1 message 1 new
>N 1 user1@smile.com Mon May 15 00:27 13/520 //郵件編號
& 1 //查看郵件編號1
Message 1:
From user1@smile.com Mon May 15 00:27:49 2023 //信件來源與發(fā)信時間
Return-Path: <user1@smile.com> //返回路徑
Date: Mon, 15 May 2023 00:26:24 +0800 //接收時間
From: user1@smile.com
X-Authentication-Warning: localhost.localdomain: localhost [127.0.0.1] didn't use HELO protocol
Status: R
this is a happy mail
wish you happy everyday! //郵件內(nèi)容
& quit //使用命令退出
Held 1 message in /var/mail/user2
6.用戶郵件目錄/var/spool/mail
我們可以在郵件服務(wù)器上進行用戶郵件的查看,這可以確保郵件服務(wù)器郵件再正常工作了,Sendmail再/var/spool/mail目錄中為每個用戶分別建立單獨的文件用于存放每個用戶的郵件
。這些名字和用戶名是相同的
[root@localhost mail]# ls /var/spool/mail
user1 user2
7.郵件隊列
郵件服務(wù)器配置成功后,就能夠為用戶提供E-mail的發(fā)送服務(wù)了,但是如果接收這些郵件的服務(wù)器出現(xiàn)問題,或者因為其他原因?qū)е锣]件無法安全到達目的地。這封郵件可能就會失蹤。所以sendmail采用了郵件隊列來保存這些發(fā)送不成功的信件。
我們可以通過mailq來查詢
[root@localhost mail]# mailq
/var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
34EGNRUH001537 40 Mon May 15 00:24 "this is a happy mail"<user1@skills.com
(host map: lookup (smile.com): deferred)
user2@smile.com
Total requests: 1
其中相關(guān)參數(shù)的說明:
Q-ID:表示此封郵件隊列的編號
size:表示郵件的大小
Q-Time:郵件進入/var/spool/mqueue目錄的時間,并說明無法立即發(fā)送的原因
Sender/Recipient:發(fā)信人和收信人的郵件地址
七、郵件服務(wù)器配置常記的幾件事
第一件:一定把DNS服務(wù)器配置好。保證DNS服務(wù)器和sendmail服務(wù)器、客戶端之間的通信正常
第二件:關(guān)閉防火墻 或者 打開服務(wù)器的端口
第三件:將selinux關(guān)閉 可以使用setenfroce 0文章來源:http://www.zghlxwxcb.cn/news/detail-767279.html
第四件:注意網(wǎng)卡在虛擬機的連接方式 文章來源地址http://www.zghlxwxcb.cn/news/detail-767279.html
到了這里,關(guān)于Linux下配置部署sendmail服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!