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

2019-09-23 08:50:32于海丽

前言

本教程基于 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')