溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用Postfix + Dovecot + MySQL搭建郵件服務(wù)器

發(fā)布時(shí)間:2021-09-16 16:04:06 來(lái)源:億速云 閱讀:234 作者:chen 欄目:編程語(yǔ)言

本篇內(nèi)容介紹了“怎么用Postfix + Dovecot + MySQL搭建郵件服務(wù)器”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

開(kāi)始之前

配置郵件服務(wù)器并不是一項(xiàng)簡(jiǎn)單的工作,其過(guò)程不僅需要一定的技術(shù)能力,同時(shí)也需要大家具有一定的耐心,同時(shí)也需要大家非常細(xì)心。為了能夠「看懂」并「最終實(shí)踐」這篇文章,大家還需要了解或掌握以下知識(shí):

  • Postfix: 是一個(gè)標(biāo)準(zhǔn)的MTA「Mail Transfer Agent」服務(wù)器,它負(fù)責(zé)通過(guò)SMTP協(xié)議管理發(fā)送到本機(jī)的郵件以及由本機(jī)發(fā)向外界的郵件。在本例中,Postfix會(huì)把郵件的本地投遞工作「接受到郵件之后將郵件存檔到本地磁盤(pán)」交給Dovecot的LMTP服務(wù)「Local Mail Transfer Protocol service」處理。當(dāng)然,當(dāng)大家想通過(guò)服務(wù)器向外界發(fā)送郵件時(shí),Postfix還將負(fù)責(zé)驗(yàn)證權(quán)限以確保服務(wù)器不被濫用?!负芏噜]件服務(wù)器根本沒(méi)有對(duì)SMTP做用戶驗(yàn)證,這將導(dǎo)致任何匿名用戶都可以通過(guò)服務(wù)器向外界發(fā)送郵件,從而使得服務(wù)器變成垃圾中轉(zhuǎn)站」

  • Dovecot: 是一個(gè)非常優(yōu)秀的IMAP/POP服務(wù)器用以接收外界發(fā)送到本機(jī)的郵件。通常,Dovecot的工作內(nèi)容包括:驗(yàn)證用戶身份以確保郵件不會(huì)被泄露。在本例中,Dovecot將負(fù)責(zé)所有的「身份驗(yàn)證」工作,我們會(huì)配置Dovecot查詢本地的MySQL數(shù)據(jù)庫(kù)以確認(rèn)用戶身份

  • MySQL: 不必多說(shuō),它將存儲(chǔ)所有的用戶信息,其中包括:需要監(jiān)聽(tīng)的域名信息、用戶郵箱地址、登錄密碼、郵箱別名「alias」等

  • Ubuntu: 本例中的OS將選擇Ubuntu14.10作為標(biāo)準(zhǔn),其他Linux發(fā)行版的相關(guān)操作不在描述

工作原理

服務(wù)器接收郵件的過(guò)程

在開(kāi)始講述本例的內(nèi)容之前,我們先來(lái)看看Postfix+Dovecot+MySQL是如何相互協(xié)作以實(shí)現(xiàn)郵件服務(wù)器的各項(xiàng)功能。我們假設(shè) 張三通過(guò)oschina.net的郵箱zhangsan@oschina.net 發(fā)送一份郵件給 李四lisi@mydomain.com,則服務(wù)器接收郵件的過(guò)程大致如下圖所示:

怎么用Postfix + Dovecot + MySQL搭建郵件服務(wù)器

  1. zhangsan@oschina.net發(fā)送郵件到lisi@mydomain.com

  2. oschina.net服務(wù)器會(huì)通過(guò)DNS查詢mydomain.com的MX記錄并找到Postfix所在的服務(wù)器

  3. 郵件被發(fā)送給Postfix

  4. Postfix轉(zhuǎn)向MySQL求助,以查詢mydomain.com是不是需要處理的域名

  5. MySQL返回確認(rèn)信息給Postfix

  6. Postfix將接受到的郵件投遞給Dovecot的LMTP服務(wù)以便做處理

  7. Dovecot將郵件內(nèi)容保存到lisi@mydomain.com用戶對(duì)應(yīng)的磁盤(pán)路徑

用戶查收郵件的過(guò)程

上述例子中我們看到了服務(wù)器接收郵件的過(guò)程,接下來(lái)我們看看,當(dāng)大家通過(guò)用戶名密碼登錄郵箱查看郵件時(shí),會(huì)發(fā)生什么事情:

怎么用Postfix + Dovecot + MySQL搭建郵件服務(wù)器

  1. 郵件客戶端 to Dovecot:尊敬的Dovecot大人,您好!我闊以建立一個(gè)IMAP加密連接嗎?

  2. Dovecot to 郵件客戶端:當(dāng)然闊以。這是我的SSL證書(shū),請(qǐng)您告訴我?guī)ぬ?hào)和密碼!

  3. 郵件客戶端 to Dovecot:好滴!這是我的用戶名和密碼,千萬(wàn)不要告訴別人哦!

  4. Dovecot to MySQL:Hi 美女!請(qǐng)問(wèn)下,這個(gè)用戶名和密碼是正確的嘛?

  5. MySQL to Dovecot:好的,請(qǐng)稍后!呃……這個(gè)用戶名和密碼是正確的哦!

  6. Dovecot打開(kāi)存放在本地磁盤(pán)/var/mail/mydomain.com/llisi的mailbox

  7. Dovecot獲取到最新的郵件及其他相關(guān)信息

  8. Dovecot將郵件及其相關(guān)的其他信息通過(guò)IMAP協(xié)議發(fā)送給客戶端

用戶發(fā)送郵件的過(guò)程

查收了最新的郵件之后,李四lisi@mydomain.com發(fā)現(xiàn)張三給他發(fā)來(lái)了郵件?,F(xiàn)在,李四回復(fù)一封郵件給張三,會(huì)發(fā)生什么事情:

怎么用Postfix + Dovecot + MySQL搭建郵件服務(wù)器

  1. 郵件客戶端 to Postfix:尊敬的Postfix大人,您好!我闊以建立一個(gè)安全的SMTP連接嘛?

  2. Postfix to 郵件客戶端:說(shuō)人話!可以就是可以,干嘛要說(shuō)「闊以」??!你丫賤啊,找抽??!想建立SMTP連接可以,不過(guò)要加密。這是我的SSL證書(shū),告訴我你的帳號(hào)和密碼,你個(gè)賤人!

  3. 郵件客戶端 to Postfix:對(duì)不起,大人,我錯(cuò)鳥(niǎo)!這是我的帳號(hào)和密碼,不要告訴別人哦!

  4. Postfix to Dovecot:Hi 帥哥,幫我查一下這個(gè)帳號(hào)和密碼!

  5. Dovecot to MySQL:Hi 美女,這個(gè)帳號(hào)和密碼是正確的呢?!還是正確的呢?!還是……

  6. MySQL to Dovecot:好啦,你乖啦!我查過(guò)啦,這個(gè)帳號(hào)密碼是正確的啦!表賣(mài)萌哦,Dovecot君!

  7. Dovecot to Postfix:大鍋,則個(gè)帳號(hào)密碼斯正缺滴!

  8. Postfix to 郵件客戶端:賤人,過(guò)來(lái)!你給的帳號(hào)密碼是正確的,允許你發(fā)送郵件!

  9. 郵件客戶端將編寫(xiě)好的郵件通過(guò)SMTP協(xié)議發(fā)送給Postfix

  10. Postfix將收到的郵件轉(zhuǎn)發(fā)給對(duì)方

以上,大家已經(jīng)看到郵件收、發(fā)的整個(gè)過(guò)程。接下來(lái)看看如何才能成功配置郵件服務(wù)器。

DNS配置

首先,你需要有一個(gè)域名。本例中假定我們的域名為mydomain.com,以此為基礎(chǔ)去做后續(xù)的所有工作。請(qǐng)注意:在DNS相關(guān)配置沒(méi)有成功之前,請(qǐng)勿嘗試后續(xù)的操作。即使你配置好了Postifx,只要DNS相關(guān)配置沒(méi)有成功,郵件服務(wù)器一樣不能正常工作。

其次,登錄域名管理系統(tǒng)「強(qiáng)烈推薦使用DNSPod做域名管理」,新增幾條MX記錄指向你的郵件服務(wù)器。

第三,關(guān)于TTL設(shè)置。在測(cè)試郵件服務(wù)器的過(guò)程中,大家大可把TTL時(shí)間設(shè)置的短一點(diǎn),這樣可以讓DNS服務(wù)器在很短的時(shí)間之內(nèi)就起作用。當(dāng)測(cè)試階段過(guò)后,請(qǐng)即使將TTL時(shí)間設(shè)置成較大的值。什么?你問(wèn)為什么要這樣?自己去Google一下看看吧!TTL設(shè)置的太短會(huì)帶來(lái)什么安全隱患。

設(shè)置完以后,DNS的MX記錄及TTL時(shí)間大致如下:

mydomain.com         MX  	10		mydomain.com    
mydomain.com 	        MX  	10		12.34.56.78  
mail.mydomain.com 	 MX  	10		12.34.56.78

SSL證書(shū)

關(guān)于SSL認(rèn)證的問(wèn)題,大家可以根據(jù)自己的情況做決定。有人偏向于購(gòu)買(mǎi)第三方權(quán)威的SSL認(rèn)證,也有人使用OpenSSL自己制作簽名。當(dāng)然,上述兩種方法本質(zhì)上是沒(méi)有什么區(qū)別的,唯一的區(qū)別在于:如果是自己制作的SSL證書(shū),大部分的郵件客戶端都會(huì)彈出提示框詢問(wèn)是否信任等。

修改hostname

哈,終于進(jìn)入了正題?,F(xiàn)在,請(qǐng)大家打開(kāi)終端「window系統(tǒng)用戶可以選擇使用putty等ssh工具連接服務(wù)器」并連接自己的服務(wù)器。

ssh username@12.34.56.78

連接成功以后,請(qǐng)第一時(shí)間執(zhí)行下述命令切換到root用戶:

sudo -s

請(qǐng)注意
為什么要切換到root用戶?純屬個(gè)人愛(ài)好,因?yàn)槲液軕?,懶得每次?zhí)行命令時(shí)在命令的前面帶上sudo這樣的參數(shù),因此直接切換到root用戶好了。

接下來(lái),在命令行中輸入如下命令查看hostname:

hostname

接著,在命令行輸入如下命令查看FQDN「fully-qualified domain name」:

hostname -f

將上述兩個(gè)名稱記錄下來(lái),安裝postfix時(shí)你將會(huì)使用到。

當(dāng)然,上述的機(jī)器名是可以隨時(shí)修改的,如果你想要修改,可以直接通過(guò)vi編輯器打開(kāi)/etc/hostname文件,并將自己想要的機(jī)器名寫(xiě)入其中并保存即可

MySQL安裝及配置

本例中我們使用MySQL數(shù)據(jù)庫(kù)保存Postfix需要服務(wù)的虛擬域名、用戶帳號(hào)及密碼、郵件別名三個(gè)重要的信息。

請(qǐng)注意:
其實(shí)Postfix和Dovecot是完全可以不使用數(shù)據(jù)庫(kù)的,二者都可以通過(guò)各種配置文件完成「零數(shù)據(jù)庫(kù)」的郵件服務(wù)器。但是,既然可以使用數(shù)據(jù)庫(kù)這么方便,為什么不用呢?將這些需要配置的信息存儲(chǔ)在數(shù)據(jù)庫(kù)中「如:用戶帳號(hào)及密碼等」,對(duì)今后的維護(hù)來(lái)說(shuō)是非常方便的事情。不是么?!

###MySQL安裝 在Ubuntu種安裝軟件,是再簡(jiǎn)單不過(guò)的事情了。安裝MySQL請(qǐng)?jiān)诿钚兄袌?zhí)行如下命令:

apt-get install mysql-server

安裝過(guò)程中會(huì)需要你輸入兩次MySQL的root口令,請(qǐng)牢記該口令

怎么用Postfix + Dovecot + MySQL搭建郵件服務(wù)器

新建數(shù)據(jù)庫(kù)及用戶

接下來(lái),我們需要新建一個(gè)MySQL用戶及一個(gè)數(shù)據(jù)庫(kù):

  1. 使用root口令登錄MySQL

     mysql -u root -p


  2. 輸入root口令

  3. 新建一個(gè)數(shù)據(jù)庫(kù),名稱叫做mailserver:

     create database mailserver character set utf8;


  4. 輸入如下命令以新建一個(gè)用戶mailserver,并指定密碼為mailserver123:

     create user mailserver@'localhost' identified by 'mailserver123';


  5. 將數(shù)據(jù)庫(kù)mailserver的所有權(quán)限賦給用戶mailserver:

     grant all on mailserver.* to mailserver@'localhost' identified by 'mailserver123';


  6. 退出root用戶:

     exit;


  7. 使用mailserver用戶登錄:

     mysql -u mailserver -p


  8. 輸入mailserver帳號(hào)的口令

  9. 將默認(rèn)數(shù)據(jù)庫(kù)切換為mailserver數(shù)據(jù)庫(kù):

     use mailserver;


新建表格

  1. 輸入如下SQL語(yǔ)句以新建virtual_domains表,該表是本地服務(wù)器用以接收郵件的域名:

     CREATE TABLE `virtual_domains` (  
       `id` int(11) NOT NULL auto_increment,  
       `name` varchar(50) NOT NULL,  
       PRIMARY KEY (`id`))  
       ENGINE=InnoDB DEFAULT CHARSET=utf8;


  2. 輸入如下SQL語(yǔ)句以新建virtual_users表,該表郵件服務(wù)器的終端用戶表,記錄用戶的郵件地址及密碼「千萬(wàn)不要保存明文密碼」:

     CREATE TABLE `virtual_users` (  
     `id` int(11) NOT NULL auto_increment,  
     `domain_id` int(11) NOT NULL,  
     `password` varchar(106) NOT NULL,  
     `email` varchar(100) NOT NULL,  
     PRIMARY KEY (`id`),  
     UNIQUE KEY `email` (`email`),  
     FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE)  
     ENGINE=InnoDB DEFAULT CHARSET=utf8;


  3. 輸入如下SQL語(yǔ)句以新建virtual_aliases表,該表是郵件服務(wù)器別名表「郵件服務(wù)器種的別名alias的概念大家可以Google一番」:

     CREATE TABLE `virtual_aliases` (  
     `id` int(11) NOT NULL auto_increment,  
     `domain_id` int(11) NOT NULL,  
     `source` varchar(100) NOT NULL,  
     `destination` varchar(100) NOT NULL,  
     PRIMARY KEY (`id`),  
     FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE)  
     ENGINE=InnoDB DEFAULT CHARSET=utf8


插入數(shù)據(jù)

為了便于查看結(jié)果,接下來(lái)給上述三張表種插入一些測(cè)試數(shù)據(jù):

  1. virtual_domains表插入測(cè)試數(shù)據(jù),大致如下:

     insert into virtual_domains(id,name) values(1,'mail.mydomain.com');		
     insert into virtual_domains(id,name) values(2,'mydomain.com');


請(qǐng)注意: 上述表種id字段是自增列,可以不賦值。但無(wú)論如何,接下來(lái)的兩張表種我們將需要上述表種的逐漸列id的值。比如:我將要添加mydomain.com域名下的郵箱帳號(hào),而mydomain.com在virtual_domains表種的id值為2。

  1. virtual_users表添加用戶數(shù)據(jù):

     insert into virtual_users(id,domain_id,password,email)  
     values (1,2,ENCRYPT('zhangsan123456', CONCAT('$7$', SUBSTRING(SHA(RAND()), -16))),'zhangsan@mydomain.com');
    
    
     insert into virtual_users(id,domain_id,password,email)  
     values (2,2,ENCRYPT('123456lisi', CONCAT('$7$', SUBSTRING(SHA(RAND()), -16))),'lisi@mydomain.com');


  2. virtual_aliases表添加別名數(shù)據(jù):

     insert into virtual_aliases(id,domain_id,source,destination)  
     values (1,2,'all@mydomain.com','zhangsan@mydomain.com');
    
     insert into virtual_aliases(id,domain_id,source,destination)  
     values (1,2,'all@mydomain.com','lisi@mydomain.com');

     

    請(qǐng)注意:
    通過(guò)上述別名表的數(shù)據(jù),當(dāng)有人給all@mydomain.com發(fā)送郵件時(shí),系統(tǒng)將自動(dòng)將郵件轉(zhuǎn)發(fā)給zhangsan@mydomain.comlisi@mydomain.com
    這種場(chǎng)景,在公司內(nèi)部「發(fā)送通知」等情況下適用

測(cè)試數(shù)據(jù)

寫(xiě)幾個(gè)SQL查詢語(yǔ)句查看下結(jié)果吧

select * from virtual_domains;  
select * from virtual_users;  
select * from virtual_aliases;  	

Postfix安裝及配置

Postfix是郵件發(fā)送的核心服務(wù)器,所有向內(nèi)、向外投遞的郵件都需要經(jīng)過(guò)Postfix通過(guò)SMTP協(xié)議完成。接下來(lái)的內(nèi)容,大家需要修改Postfix相關(guān)的一些參數(shù),它們是:

  • 告訴Postfix如何連接MySQL數(shù)據(jù)庫(kù),并讓Postfix通過(guò)數(shù)據(jù)庫(kù)種的表確定收發(fā)郵件的域名、用戶帳號(hào)及密碼、郵件別名等

  • 告訴Postfix將收到的郵件轉(zhuǎn)發(fā)給Dovecot的LMTP服務(wù)以完成本地投遞

  • 告訴Postfix所有的連接都需要STARTTLS加密,如果有必要「廢話啊,當(dāng)然必須這樣」

  • 開(kāi)放本地端口25、465、587之一或全部

Postfix的安裝

在命令行種執(zhí)行以下命令以安裝Postfix:

apt-get install postfix postfix-mysql

安裝過(guò)程中需要選擇Postfix的類(lèi)型,請(qǐng)選擇Internet Site

怎么用Postfix + Dovecot + MySQL搭建郵件服務(wù)器

Postfix安裝過(guò)程中還會(huì)需要輸入__System mail name__,這里請(qǐng)輸入你要收發(fā)郵件的域名地址「隨便寫(xiě)也可以,反正后面需要修改配置文件」

Postfix的配置

  1. 備份Postfix的配置文件/etc/postfix/main.cf,先!

     cp /etc/postfix/main.cf /etc/postfix/main.cf_backup_20150511

     

    請(qǐng)注意
    任何時(shí)候,對(duì)任何配置進(jìn)行修改之前,先做好備份總是非常必要的
    同時(shí),這也是一個(gè)非常良好的操作習(xí)慣

  2. 使用vi編輯器打開(kāi)/etc/postfix/main.cf文件

     vi /etc/postfix/main.cf


  3. 打開(kāi)之后,按下i鍵進(jìn)入編輯模式

  4. 鑒于我們沒(méi)有打算使用Postfix做用戶的權(quán)限驗(yàn)證「上述幾個(gè)圖種已經(jīng)展示清楚」,我們將要把Postfix默認(rèn)的用戶驗(yàn)證參數(shù)屏蔽,因此請(qǐng)?jiān)谌缦聨仔星斑吋尤?code>#符號(hào)以注釋:

       # TLS parameters  
       #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem  
       #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key  
               #smtpd_use_tls=yes    
       #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache  
       #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


  5. 復(fù)制如下內(nèi)容,并將其插入到上述注釋代碼之后:

     smtpd_tls_cert_file=/etc/dovecot/dovecot.pem  
     smtpd_tls_key_file=/etc/dovecot/private/dovecot.pem  
     smtpd_use_tls=yes  
     smtpd_tls_auth_only = yes  
    
     #Enabling SMTP for authenticated users, and handing off authentication to Dovecot  
     smtpd_sasl_type = dovecot  
     smtpd_sasl_path = private/auth  
     smtpd_sasl_auth_enable = yes  
     smtpd_recipient_restrictions =  permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination		  	

     

    請(qǐng)注意:
    上述幾個(gè)參數(shù)的含義,請(qǐng)參照Postfix配置文檔

  6. 按照如下方式修改mydestination一行的值:

     mydestination = localhost

     

    請(qǐng)注意:mydestination的值修改為localhost,以便Postfix能夠通過(guò)MySQL表中相關(guān)數(shù)據(jù)決定需要接受/發(fā)送郵件的域名,這樣更具有通用性

  7. 在文檔種加入以下內(nèi)容,以便告訴Postfix不要使用LDA「Local Delivery Agent」轉(zhuǎn)而使用Dovecot的LMTP完成本地郵件投遞:

    #Handing off local delivery to Dovecot's LMTP, and telling it where to store mail  
    virtual_transport = lmtp:unix:private/dovecot-lmtp


  8. 在文檔中加入以下內(nèi)容,以便告訴Postfix去MySQL數(shù)據(jù)庫(kù)種尋找域名、用戶帳號(hào)密碼及郵件別名等信息:

     #Virtual domains, users, and aliases  
     virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf  
     virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf  
     virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf


  9. 最終,修改完成以后的/etc/postfix/main.cf文件大致應(yīng)該如下:

     # See /usr/share/postfix/main.cf.dist for a commented, more complete version    
    
     # Debian specific:  Specifying a file name will cause the first  
     # line of that file to be used as the name.  The Debian default  
     # is /etc/mailname.  
     #myorigin = /etc/mailname  
    
     smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)  
     biff = no  
    
     # appending .domain is the MUA's job.  
     append_dot_mydomain = no  
    
     # Uncomment the next line to generate "delayed mail" warnings  
     #delay_warning_time = 4h  
    
     readme_directory = no  
    
     # TLS parameters    
     #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem 
     #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key  
     #smtpd_use_tls=yes  
     #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache  
     #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache  
    
     smtpd_tls_cert_file=/etc/dovecot/dovecot.pem  
     smtpd_tls_key_file=/etc/dovecot/private/dovecot.pem  
     smtpd_use_tls=yes  
     smtpd_tls_auth_only = yes  
    
     #Enabling SMTP for authenticated users, and handing off authentication to Dovecot  
     smtpd_sasl_type = dovecot  
     smtpd_sasl_path = private/auth  
     smtpd_sasl_auth_enable = yes  
     smtpd_recipient_restrictions =  
     	permit_sasl_authenticated,  
     	permit_mynetworks,  
     	reject_unauth_destination  
    
     # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for    
     # information on enabling SSL in the smtp client.      
     myhostname = host.mydomain.com  
     alias_maps = hash:/etc/aliases  
     alias_database = hash:/etc/aliases  
     myorigin = /etc/mailname  
     #mydestination = example.com, hostname.mydomain.com,localhost.mydomain.com, localhost  
     mydestination = localhost    
     relayhost =    
             mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128    
     mailbox_size_limit = 0  
     recipient_delimiter = +  
     inet_interfaces = all  
    
     #Handing off local delivery to Dovecot's LMTP, and telling it where to store mail  
     virtual_transport = lmtp:unix:private/dovecot-lmtp  
    
     #Virtual domains, users, and aliases  
     virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf  
     virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf  
     virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf


  10. 按下ESC鍵并輸入如下內(nèi)容以保存并退出

    wq!


  11. 新建/etc/postfix/mysql-virtual-mailbox-domains.cf文件并輸入如下內(nèi)容:

    user = mailserver   
    password = mailserver123  
    hosts = 127.0.0.1  
    dbname = mailserver  
    query = SELECT 1 FROM virtual_domains WHERE name='%s'		


  12. 重啟Postfix服務(wù)

    service postfix restart


  13. 測(cè)試上述內(nèi)容是否正確,如果上述內(nèi)容配置正確,則如下命令執(zhí)行后返回結(jié)果應(yīng)該為1

    postmap -q mydomain.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf


  14. 新建/etc/postfix/mysql-virtual-mailbox-maps.cf文件并輸入如下內(nèi)容:

    user = mailserver    
    password = mailserver123  
    hosts = 127.0.0.1  
    dbname = mailserver  
    query = SELECT 1 FROM virtual_users WHERE email='%s'				


  15. 重啟Postfix服務(wù)

    service postfix restart


  16. 測(cè)試上述配置是否正確,如果上述內(nèi)容配置正確,則如下命令執(zhí)行后返回結(jié)果應(yīng)該為1

    postmap -q lisi@mydomain.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf


  17. 新建/etc/postfix/mysql-virtual-alias-maps.cf文件并輸入如下內(nèi)容:

    user = mailserver    
    password = mailserver123  
    hosts = 127.0.0.1  
    dbname = mailserver  
    query = SELECT destination FROM virtual_aliases WHERE source='%s'


  18. 重啟Postfix服務(wù)

    service postfix restart


  19. 測(cè)試上述配置是否正確,如果上述配置正確,則如下命令執(zhí)行后返回結(jié)果應(yīng)該是之前添加的別名帳號(hào):

    postmap -q all@mydomain.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf


  20. 使用vi編輯器打開(kāi)/etc/postfix/master.cf文件「請(qǐng)注意修改之前先備份」,找到submissionsmtps所在的兩行,并將其注釋去掉。這樣做的目的是允許Postfix通過(guò)587和465端口發(fā)送郵件

  21. 重啟Postfix服務(wù)

    service postfix restart


搞定,Postfix服務(wù)器應(yīng)該配置完成了。相信到這里的時(shí)候,已經(jīng)嚇走了90%以上的朋友,剩下的10%朋友們,你們是好樣的。

Dovecot安裝及配置

Dovecot在本例中充當(dāng)IMAP、POP服務(wù)器的角色,同時(shí)它也將負(fù)責(zé)用戶登錄時(shí)用戶身份的驗(yàn)證「Dovecot會(huì)將真正的驗(yàn)證工作交給MySQL處理」。因?yàn)槭褂肧SL,Dovecot將會(huì)使用993「IMAP協(xié)議」及995「POP協(xié)議」與外界交流,若服務(wù)器有iptable之類(lèi)的玩意兒,請(qǐng)開(kāi)放相關(guān)端口。

這部分的內(nèi)容配置起來(lái)相對(duì)簡(jiǎn)單,但是需要配置的文件繁多。大體上,我們需要配置如下的信息:

  1. 開(kāi)啟Dovecot的IMAP、POP3、LMTP協(xié)議

  2. 告知Dovecot本地郵件的投檔路徑

  3. 連接Dovecot和MySQL數(shù)據(jù)庫(kù)以驗(yàn)證用戶身份

  4. 配置SSL加密相關(guān)信息

Dovecot的安裝

通過(guò)如下命令安裝Dovecot最新版:

apt-get install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql

Dovecot的配置

需要修改的配置文件有:

  • /etc/dovecot/dovecot.conf Dovecot的主配置文件

  • /etc/dovecot/conf.d/10-mail.conf Dovecot將要操作的磁盤(pán)路徑相關(guān)配置信息

  • /etc/dovecot/conf.d/10-auth.conf 用戶驗(yàn)證相關(guān)配置信息

  • /etc/dovecot/conf.d/auth-sql.conf.ext SQL-Type驗(yàn)證相關(guān)配置信息

  • /etc/dovecot/dovecot-sql.conf.ext Dovecot與數(shù)據(jù)庫(kù)連接相關(guān)配置信息

  • /etc/dovecot/conf.d/10-master.conf Dovecot本地socket相關(guān)配置信息

  • /etc/dovecot/conf.d/10-ssl.conf 關(guān)于SSL的相關(guān)配置信息

請(qǐng)注意:
在修改上述文件之前,請(qǐng)一定先做好備份以方便恢復(fù)

修改/etc/dovecot/dovecot.conf文件

使用vi編輯器打開(kāi)/etc/dovecot/dovecot.conf文件并在文件種加入如下內(nèi)容:

!include conf.d/*.conf

# Enable installed protocols  
    !include_try /usr/share/dovecot/protocols.d/*.protocol  
protocols = imap pop3 lmtp

如果以上內(nèi)容已經(jīng)存在,只需要把該行的#號(hào)去掉即可
上述內(nèi)容大致的意思是:告訴Dovecot啟用所有.conf文件;并開(kāi)啟Dovecot的imap、pop3、lmtp等相關(guān)協(xié)議使之正常工作

修改/etc/dovecot/conf.d/10-mail.conf文件

打開(kāi)文件并找到mail_location相關(guān)信息,將其指定到本地磁盤(pán)的某個(gè)路徑,這個(gè)路徑將來(lái)會(huì)存放收到的郵件,如下所示:

mail_location = maildir:/var/mail/vhosts/%d/%n

同時(shí),找到文件中mail_privileged_group相關(guān)信息并將起修改為:

mail_privileged_group = mail

保存文件并退出

在命令行種輸入如下內(nèi)容以查看/var/mail路徑的權(quán)限:

ls -ld /var/mail

顯示的內(nèi)容大致應(yīng)該是:

drwxrwsr-x 2 root mail 4096 May  11 15:08 /var/mail

創(chuàng)建/var/mail/vhosts/文件夾給每個(gè)需要啟用的域名:

mkdir -p /var/mail/vhosts/mydomain.com

輸入如下命令以新建vmail用戶組及用戶并賦權(quán)限

groupadd -g 5000 vmail  
useradd -g vmail -u 5000 vmail -d /var/mail

接下來(lái)修改一下/var/mail/目錄的權(quán)限,使vmail能夠訪問(wèn):

chown -R vmail:vmail /var/mail

###修改/etc/dovecot/conf.d/10-auth.conf文件

找到文件中disable_plaintext_auth并取消注釋

disable_plaintext_auth = yes

找到文件中auth_mechanisms并將其修改為如下值:

auth_mechanisms = plain login

默認(rèn)情況下,Dovecot是允許Ubuntu系統(tǒng)用戶登錄使用的,我們需要將其禁用。找到文件種如下內(nèi)容并將其注釋:

#!include auth-system.conf.ext

開(kāi)啟Dovecot的MySQL支持,取消!include auth-sql.conf.ext的注釋符號(hào):

#!include auth-system.conf.ext  
!include auth-sql.conf.ext  
#!include auth-ldap.conf.ext  
#!include auth-passwdfile.conf.ext  
#!include auth-checkpassword.conf.ext  
#!include auth-vpopmail.conf.ext  
#!include auth-static.conf.ext

修改/etc/dovecot/conf.d/auth-sql.conf.ext文件

在文件中加入如下內(nèi)容:

passdb {  
	driver = sql  
	args = /etc/dovecot/dovecot-sql.conf.ext  
}  

userdb {  
	driver = static  
	args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n  
}

修改/etc/dovecot/dovecot-sql.conf.ext文件

取消文件中driver行的注釋,并將其修改為如下:

driver = mysql

取消文件中connect行的注釋,并將其修改為如下:

connect = host=127.0.0.1 dbname=mailserver user=mailserver password=mailserver123

取消文件中default_pass_scheme行的注釋,并將其修改為如下:

default_pass_scheme = SHA512-CRYPT

取消文件中password_query行的注釋,并將起修改為如下:

password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

保存退出

在命令行種輸入如下內(nèi)容以修改目錄權(quán)限:

chown -R vmail:dovecot /etc/dovecot

chmod -R o-rwx /etc/dovecot

修改/etc/dovecot/conf.d/10-master.conf文件

打開(kāi)文件做如下修改「通過(guò)將端口設(shè)置為0,以禁用非SSL加密的IMAP和POP3協(xié)議」:

service imap-login {  
	inet_listener imap {  
		port = 0   
	}  
	...  
}  

service pop3-login {  
	inet_listener pop3 {  
		port = 0  
	}  
	...  
}

找到文件中的service lmtp并將其修改如下:

  service lmtp {  
  		unix_listener /var/spool/postfix/private/dovecot-lmtp {  
  		mode = 0600  
  		user = postfix  
  		group = postfix  
  }  
  
  # Create inet listener only if you can't use the above UNIX socket  
  #inet_listener lmtp {  
  		#Avoid making LMTP visible for the entire internet  
  		#address =  
  		#port =  
  		#}  
 }

找到文件中service auth并將其內(nèi)容修改如下:

service auth {  
	# auth_socket_path points to this userdb socket by default. It's typically  
	# used by dovecot-lda, doveadm, possibly imap process, etc. Its default  
	# permissions make it readable only by root, but you may need to relax these  
	# permissions. Users that have access to this socket are able to get a list  
	# of all usernames and get results of everyone's userdb lookups.  
	
	unix_listener /var/spool/postfix/private/auth {  
			mode = 0666  
			user = postfix  
			group = postfix  
	}  
	
	unix_listener auth-userdb {  
			mode = 0600  
			user = vmail  
			#group =  
	}  
	
	# Postfix smtp-auth  
	#unix_listener /var/spool/postfix/private/auth {  
	#  		mode = 0666  
	#}  
	
	# Auth process is run as this user.  
	user = dovecot  
}

找到文件中service auth-worker內(nèi)容并修改如下:

service auth-worker {  
	# Auth worker process is run as root by default, so that it can access  
	# /etc/shadow. If this isn't necessary, the user should be changed to  
	# $default_internal_user.  

	user = vmail  
}

修改/etc/dovecot/conf.d/10-ssl.conf文件

找到文件中ssl_cert并修改內(nèi)容如下「請(qǐng)確保dovecot的pem文件已經(jīng)存在,如果大家使用了自己的SSL文件,請(qǐng)將如下內(nèi)容修改為相應(yīng)的路徑」:

ssl_cert = </etc/dovecot/dovecot.pem  
ssl_key = </etc/dovecot/private/dovecot.pem

強(qiáng)制用戶使用SSL加密:

ssl = required

重新啟動(dòng)Dovecot服務(wù):

service dovecot restart		

測(cè)試郵件服務(wù)器是否正常

設(shè)置一個(gè)帳號(hào),可以向MySQL對(duì)應(yīng)的表中插入數(shù)據(jù),接下來(lái)使用郵件客戶端來(lái)測(cè)試一下。推薦使用Thunderbird郵件客戶端或者Foxmail客戶端等。請(qǐng)注意以下內(nèi)容:

  • 郵箱的全稱「包括后面的@mydomain.com」將作為用戶名

  • 郵箱密碼是MySQL數(shù)據(jù)庫(kù)種對(duì)應(yīng)郵箱的密碼

  • 服務(wù)器相關(guān)接口是否全部開(kāi)放?993、995、25等

  • 郵件收發(fā)的所有協(xié)議,包括IMAP、POP3、SMTP全部都需要開(kāi)啟SSL加密

配置好客戶端之后即可連接獲取、發(fā)送郵件。

“怎么用Postfix + Dovecot + MySQL搭建郵件服務(wù)器”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI