设置一个完整的Linux系统邮件服务器涉及许多配置,并可能涉及到一些网络安全问题。在此,我会给出如何基于Postfix和Dovecot(用于SMTP和IMAP服务),结合MySQL作为存储后端来创建基本的邮件服务器。这里我们以Ubuntu 20.04 LTS为例:

前提:

1. 您需要有一个可以公开访问的DNS记录和一个域名。

2. 你需要安装和配置好防火墙,如iptables。

linux系统搭建邮件服务器  第1张

步骤1:准备您的Linux系统

1. 安装必要的依赖:

linux系统搭建邮件服务器  第2张

sudo apt update

sudo apt install postfix postfixmysql dovecotcore dovecotimapd dovecotlmtpd dovecotmysql mailutils sasl2bin libsasl2modules postfixpolicydspfpython opendkim opendkimtools

2. 配置postfix,选择Internet Site并输入域名。

linux系统搭建邮件服务器  第3张

步骤2:安装和设置MySQL服务器

3. 创建MySQL数据库用于管理用户邮箱和别名:

bash

mysql uroot p

> CREATE DATABASE mail;

> CREATE USER 'mail_admin'@'localhost' IDENTIFIED BY 'some_password';

> GRANT ALL PRIVILEGES ON mail. TO 'mail_admin'@'localhost';

linux系统搭建邮件服务器  第4张

4. 建立用户,虚拟域名及别名等表结构:

sql

linux系统搭建邮件服务器  第5张

USE `mail`;

CREATE TABLE `users` (

`email` varchar(255) NOT NULL DEFAULT '',

`password` char(196) DEFAULT '',

linux系统搭建邮件服务器  第6张

`active` tinyint(1) NOT NULL DEFAULT '0',

`lastseen` datetime DEFAULT NULL,

PRIMARY KEY (`email`)

);

linux系统搭建邮件服务器  第3张

CREATE TABLE IF NOT EXISTS virtual_aliases (

`domain_id` int(11) NOT NULL,

`source` varchar(255) NOT NULL,

`destination` text NOT NULL,

PRIMARY KEY (source,domain_id)

linux系统搭建邮件服务器  第8张

);

CREATE TABLE IF NOT EXISTS virtual_domains (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL,

linux系统搭建邮件服务器  第9张

PRIMARY KEY (id)

);

CREATE TABLE IF NOT EXISTS virtual_users (

`id` int(11) NOT NULL AUTO_INCREMENT,

linux系统搭建邮件服务器  第10张

`domain_id` int(11) NOT NULL,

`password` passwordhash(255) DEFAULT '',

`email` varchar(255) NOT NULL,

PRIMARY KEY (id),

FOREIGN KEY (domain_id) REFERENCES virtual_domains (id) on delete cascade

linux系统搭建邮件服务器  第11张

);

exit

以上表结构用于管理用户的邮箱账户信息。

5. 添加第一个用户到数据库中

使用以下查询添加一个测试用户的记录

sql

linux系统搭建邮件服务器  第12张

INSERT INTO users (email,password,active)

VALUES('testuser@domain.com',passwordhash,'1')

请替换"passwordhash"为密码加密值。确保已设置正确的MD5或SHA256密码加密格式。

linux系统搭建邮件服务器  第13张

步骤3:编辑Dovecot相关配置文件

6. 打开`/etc/dovecot/dovecot.conf`

linux系统搭建邮件服务器  第14张

将'dict_sql = include auth {} dict_sql'注释行前增加‘’

7. 打开并编辑`/etc/dovecot/conf.d/10auth.conf`,取消以下行的评论:

linux系统搭建邮件服务器  第15张

auth_mechanisms = plain login 默认即可。

disable_plaintext_auth = no 启用不使用加密的连接上的身份验证,仅推荐测试环境或特定安全性条件下使用。

auth_username_charsets = utf8 这将处理用户名编码问题,使其支持非ASCII用户名(尽管大多数邮件用户会偏好小写或数字字符)

auth_ssl_require_client_cert = yes

auth_ssl_username_from_cert = yes

linux系统搭建邮件服务器  第16张

8. 更改`conf.d/10mail.conf`中邮件存储方式(Maildir通常更受欢迎,因为其提供了更好的邮件恢复特性),如下:

`mail_location = maildir:~/Maildir`

9. 在`/etc/dovecot/conf.d/10master.conf`中的 service auth 下面加上下面的参数:

unix_listener /var/spool/postfix/private/auth {

mode = 0666

linux系统搭建邮件服务器  第17张

user = postfix

group = postfix

}

unix_listener authuserdb {

linux系统搭建邮件服务器  第4张

mode=0666

你可以根据你系统上的需求改变它

}

inet_listener imaplogin {

linux系统搭建邮件服务器  第19张

address=192.0.2.1 替换为你服务器的外部IP地址。

port=993

}

inet_listener imapslogin {

linux系统搭建邮件服务器  第20张

port=993

}

inet_listener pop3login { port=110}

linux系统搭建邮件服务器  第21张

步骤4:编辑postfix配置

9. 编辑 Postfix 主体文件:

用您所创建的数据表名替换掉下面这些参数:

bash

smtpd_banner = $myhostname ESMTP

biff = no

mydestination = localhost.

virtual_alias_domains =

virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysqlvirtualmailboxdomains.cf

virtual_alias_maps = proxy:mysql:/etc/postfix/mysqlvirtualmailboxmaps.cf

virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysqlvirtualmailboxmaps.cf

linux系统搭建邮件服务器  第22张

virtual_create_maildirsize = yes

smtpd_recipient_restrictions = reject_unknown_sender_domain, permit_mynetworks,reject_unauth_destination check_policy_service unix:/run/spf.socket

mailbox_size_limit = 26000000000 设置最大的储存量为25GB

alias_maps = $alias_database

alias_database = hash:/etc/aliases

home_mailbox = Maildir/

inet_interfaces = all 允许接受外部连接

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 0.0.0.0/0 ::0/0

policy_time_limit = 3600

linux系统搭建邮件服务器  第23张

smtp_sasl_security_options = noanonymous

smtp_helo_name = mail.domain.com

linux系统搭建邮件服务器  第19张

请根据您的实际情况调整上述内容。

以上步骤只提供了大致方向,具体到实际应用还请仔细检查和验证您的系统配置,确保满足你的所有安全要求以及遵守适用法律和规章制度的要求。