溫馨提示×

溫馨提示×

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

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

如何使用ubuntu搭建公網(wǎng)個人郵件服務(wù)器

發(fā)布時間:2021-05-11 09:21:13 來源:億速云 閱讀:380 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹如何使用ubuntu搭建公網(wǎng)個人郵件服務(wù)器,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

前置條件

  • mysql 數(shù)據(jù)庫。本教程中使用 mysql 存儲域名,用戶信息等。

  • 域名。需要有域名才能實現(xiàn)向公網(wǎng)發(fā)郵件/收郵件。這里以 test.com 為例。

  • ssl 證書。有不少免費的 ssl 證書提供商,或者使用自簽證書,百度即可。

安裝軟件

切換到 root 用戶下,執(zhí)行以下命令:

apt update
apt install postfix postfix-mysql dovecot-core dovecot-pop3d dovecot-imapd dovecot-lmtpd dovecot-mysql

安裝過程中 postfix 會彈出提示:

如何使用ubuntu搭建公網(wǎng)個人郵件服務(wù)器

這里我們選擇第二項:Internet Site。

接著會有如下提示:

如何使用ubuntu搭建公網(wǎng)個人郵件服務(wù)器

這里填入:test.com

配置mx 解析

在域名提供商增加以下解析:

  • MX 記錄:test.com 指向 服務(wù)器IP

  • A 記錄:pop3.test.com 指向 服務(wù)器IP

  • A 記錄:smtp.test.com 指向 服務(wù)器IP

創(chuàng)建 mysql 數(shù)據(jù)庫

新建一個數(shù)據(jù)庫 mailserver,管理賬號為:admin/123456

創(chuàng)建虛擬域表,作為認(rèn)證域。該表是郵件服務(wù)器用以接收郵件的域名:

-- 建立表
CREATE TABLE `virtual_domains` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入一條記錄
insert into virtual_domains values(1,'test.com')

創(chuàng)建用戶表,用于用戶身份認(rèn)證。

-- 創(chuàng)建用戶表
CREATE TABLE `virtual_users` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`password` VARCHAR(106) NOT NULL,
`email` VARCHAR(120) 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;
-- 插入兩個用戶,以md5加密密碼,實際應(yīng)用中應(yīng)該選擇強度更高的算法,md5目前以及不安全了
insert into virtual_users values(1,1,md5('123456'),'first@test.com');
insert into virtual_users values(2,1,md5('123456'),'second@test.com');

創(chuàng)建別名表.該表作用相當(dāng)于當(dāng) source 收到郵件時,該郵件會自動轉(zhuǎn)發(fā)到 destination 上。

-- 創(chuàng)建表
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ù),所有發(fā)給first的郵件都會自動轉(zhuǎn)發(fā)給second
insert into virtual_aliases values(1,1,'first@test.com','second@test.com')

生成 ssl 證書

生成 ssl 證書可參考這一篇http://www.kemok4.com/article/60371.htm ,假設(shè)證書存放地址為:

  • 公鑰 /etc/letsencrypt/live/test.com/fullchain.pem;

  • 私鑰 /etc/letsencrypt/live/test.com/privkey.pem;

配置 postfix

首選備份 postfix 的默認(rèn)配置文件,然后編輯main.cf

cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
vim /etc/postfix/main.cf

注釋下面的配置:

如何使用ubuntu搭建公網(wǎng)個人郵件服務(wù)器

然后加入如下的配置:

# 使用自己的ssl證書
smtpd_tls_cert_file=/etc/letsencrypt/live/test.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/test.com/privkey.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
# 使用dovecot來做身份認(rèn)證
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

修改 myhostname,myorigin 為如下的值:

myhostname = test.com
myorigin = $myhostname

修改 mydestination 值為 localhost,以啟動 mysql 中的虛擬域。:

mydestination = localhost

在配置文件的最后加入以下行,確保將郵件投遞給 mysql 表中列出的虛擬域。

virtual_transport = lmtp:unix:private/dovecot-lmtp

最后加入以下三項參數(shù),告知 Postfix 配置虛擬域、用戶和別名

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

接下來創(chuàng)建上面最后加入的三項參數(shù)對應(yīng)的文件。

創(chuàng)建/etc/postfix/mysql-virtual-mailbox-domains.cf,內(nèi)容如下:

user = admin
password = 123456
port = 3306
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

接著重啟 postfix,并測試 postfix 能否找到域,如果成功返回 1:

service postfix restart
postmap -q test.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

創(chuàng)建/etc/postfix/mysql-virtual-mailbox-maps.cf,內(nèi)容如下:

user = admin
password = 123456
port = 3306
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'

接著重啟 postfix,并測試其能否找到郵箱地址,成功返回 1:

service postfix restart
postmap -q first@test.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

最后創(chuàng)建/etc/postfix/mysql-virtual-alias-maps.cf,內(nèi)容如下:

user = admin
password = 123456
port = 3306
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'

同樣重啟 postfix,驗證能否正確找到別名,并返回:

service postfix restart
postmap -q first@test.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

如果響應(yīng)使用 587 端口來進行俺的 smtp 通信,需修改/etc/postfix/master.cf 文件:

取消以下行的注釋:

如何使用ubuntu搭建公網(wǎng)個人郵件服務(wù)器

配置 dovecot

postfix 配置完畢,現(xiàn)在來配置 dovecot,首先編輯主配置文件/etc/dovecot/dovecot.conf:

首先確保下面一行是啟用的:

!include conf.d/*.conf

然后在配置文件的最后加入如下配置,啟用各協(xié)議:

protocols = imap lmtp pop3

修改/etc/dovecot/conf.d/10-mail.conf,確保存在以下兩個配置:

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

上面的配置將郵件存放目錄設(shè)置在/var/mail 中,因此將該文件夾的所屬人改為 vmail/vmail.命令如下:

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail
chown -R vmail:vmail /var/mail

修改/etc/dovecot/conf.d/10-auth.conf。首先確保如下兩個配置存在且值正確:

disable_plaintext_auth = yes
auth_mechanisms = plain login

然后修改配置以禁用系統(tǒng)用戶登陸,并開啟 mysql 支持,如下圖所示:

如何使用ubuntu搭建公網(wǎng)個人郵件服務(wù)器

修改/etc/dovecot/dovecot-sql.conf.ext文件,將內(nèi)容改成下面的內(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 參數(shù)注釋并設(shè)置為 mysql

driver = mysql

然后取消 connect 行注釋并設(shè)置為如下內(nèi)容:

connect = host=127.0.0.1 port=3306 dbname=mailserver user=admin password=123456

接著取消 default_pass_scheme 行的注釋并改為 MD5

default_pass_scheme = MD5

接著取消 password_query 行的注釋并設(shè)置為以下信息:

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

最后將/etc/dovecot的擁有者改為 vmail:dovecot

chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot

修改/etc/dovecot/conf.d/10-master.conf:

首先將 imap-login , pop3-login 下第一個的 port 設(shè)置為 0,以禁用非 ssl 加密的 imap 和 pop3 協(xié)議,如下圖所示:

如何使用ubuntu搭建公網(wǎng)個人郵件服務(wù)器

然后找到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 {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
#group =
}
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 認(rèn)證.

首先將 ssl 參數(shù)改為 required:

ssl = required

然后設(shè)置 ssl 證書路徑就 ok 了,還是用之前的 ssl 證書:

ssl_cert = </etc/letsencrypt/live/test.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/test.com/privkey.pem

到這里所有的配置都 OK,重啟 postfix,dovecot 后就可以用郵箱客戶端(比如 foxmail)連接了。

service postfix restart
service dovecot restart

結(jié)束

配合一個郵件客戶端看似很簡單,實際上還是有很多坑的,看看上面那么多的配置項就知道了,一定要耐心。

如果無法登陸,可以看看 postfix 和 dovecot 的日志報錯情況,再去修改。日志位置在/var/log

注意:

被這個問題困擾了好幾天,未找到解決辦法,最后放棄.

目前很多主機廠商都不支持和其他服務(wù)器的 25 端口通信,已知的有(谷歌云,阿里云),這樣就導(dǎo)致在這些機器上搭建的 postfix 郵件服務(wù)器,無法向其他的外網(wǎng)郵箱發(fā)送郵件,因為無法和其他 smtp 服務(wù)器的 25 端口建立連接。貌似是為了避免有人惡意搭建郵件服務(wù)器向其他的郵件服務(wù)器發(fā)送大量的垃圾郵件,從而導(dǎo)致此服務(wù)器 IP 被反垃圾郵件組織列入 SML。

以上是“如何使用ubuntu搭建公網(wǎng)個人郵件服務(wù)器”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

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

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

AI