最新ubuntu搭建公网个人邮件服务器(基于postfix,dovecot,mysql)

  最近做了一个应用,需要用邮件发通知,但是免费的邮箱每天发信数量是有限制的,所以呢就想着搭建一个自己的邮件服务器,能够实现邮件的发送和接收即可,其中大概花了一个星期找资料,测试,终于成功了,写个教程分享给大家。

  本教程基于 ubuntu 18.04(其他的 linux 理论上也是可以的,只是安装的软件包不一样)。用到的主要软件为:postfix,dovecot,mysql.废话不多说,下面是教程:

前置条件

mysql 数据库。本教程中使用 mysql 存储域名,用户信息等。

域名。需要有域名才能实现向公网发邮件/收邮件。这里以 test.com 为例。

ssl 证书。有不少免费的 ssl 证书提供商,或者使用自签证书,百度即可。

安装环境 安装软件

  切换到 root 用户下,执行以下命令:

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

安装过程中 postfix 会弹出提示:

选择类别

这里我们选择第二项:Internet Site。
接着会有如下提示:

域名

这里填入:test.com

配置 mx 解析

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

MX 记录:test.com 指向 服务器IP

A 记录:pop3.test.com 指向 服务器IP

A 记录:smtp.test.com 指向 服务器IP

创建 mysql 数据库

  新建一个数据库 mailserver,管理账号为:admin/123456

  创建虚拟域表,作为认证域。该表是邮件服务器用以接收邮件的域名:

-- 建立表 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')

  创建用户表,用于用户身份认证。

-- 创建用户表 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加密密码,实际应用中应该选择强度更高的算法,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');

  创建别名表.该表作用相当于当 source 收到邮件时,该邮件会自动转发到 destination 上。

-- 创建表 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; -- 插入数据,所有发给first的邮件都会自动转发给second insert into virtual_aliases values(1,1,'first@test.com','second@test.com') 生成 ssl 证书

  生成 ssl 证书可参考这一篇https://www.jianshu.com/p/b47d862bceeb.为 test.com 生成 ssl 证书,假设证书存放地址为:

公钥 /etc/letsencrypt/live/test.com/fullchain.pem;

私钥 /etc/letsencrypt/live/test.com/privkey.pem;

配置 postfix

  首选备份 postfix 的默认配置文件,然后编辑main.cf

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

  注释下面的配置:

注释

然后加入如下的配置:

# 使用自己的ssl证书 smtpd_tls_cert_file=http://www.likecs.com/etc/letsencrypt/live/test.com/fullchain.pem smtpd_tls_key_file=http://www.likecs.com/etc/letsencrypt/live/test.com/privkey.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes # 使用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

修改 myhostname,myorigin 为如下的值:

myhostname = test.com myorigin = $myhostname

修改 mydestination 值为 localhost,以启动 mysql 中的虚拟域。:

mydestination = localhost

在配置文件的最后加入以下行,确保将邮件投递给 mysql 表中列出的虚拟域。

virtual_transport = lmtp:unix:private/dovecot-lmtp

最后加入以下三项参数,告知 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

  接下来创建上面最后加入的三项参数对应的文件。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdzpf.html