Postfix+Dovecot+MySQL搭建邮件服务器

2015-05-12  来源:本站原创  分类:系统维护  人气:1536 

说到邮件服务器,网上有许多不同解决方案。Window操作系统下常见的邮件服务器有hMailServerMailEnableEVOMailServerApache James(纯Java跨平台)等。

而在Linux/Unix系统中常用的邮件服务器也有不少选择,最经典也是最常见的莫过于Postfix。这篇文章将会讲述如何在Ubuntu系统之下,通过PostfixDovecotMySQL整合实现普通意义上「邮件服务器」的大部分功能。

开始之前

配置邮件服务器并不是一项简单的工作,其过程不仅需要一定的技术能力,同时也需要大家具有一定的耐心,同时也需要大家非常细心。为了能够「看懂」并「最终实践」这篇文章,大家还需要了解或掌握以下知识:

  • Postfix: 是一个标准的MTA「Mail Transfer Agent」服务器,它负责通过SMTP协议管理发送到本机的邮件以及由本机发向外界的邮件。在本例中,Postfix会把邮件的本地投递工作「接受到邮件之后将邮件存档到本地磁盘」交给Dovecot的LMTP服务「Local Mail Transfer Protocol service」处理。当然,当大家想通过服务器向外界发送邮件时,Postfix还将负责验证权限以确保服务器不被滥用。「很多邮件服务器根本没有对SMTP做用户验证,这将导致任何匿名用户都可以通过服务器向外界发送邮件,从而使得服务器变成垃圾中转站」
  • Dovecot: 是一个非常优秀的IMAP/POP服务器用以接收外界发送到本机的邮件。通常,Dovecot的工作内容包括:验证用户身份以确保邮件不会被泄露。在本例中,Dovecot将负责所有的「身份验证」工作,我们会配置Dovecot查询本地的MySQL数据库以确认用户身份
  • MySQL: 不必多说,它将存储所有的用户信息,其中包括:需要监听的域名信息、用户邮箱地址、登录密码、邮箱别名「alias」等
  • Ubuntu: 本例中的OS将选择Ubuntu14.10作为标准,其他Linux发行版的相关操作不在描述

工作原理

服务器接收邮件的过程

在开始讲述本例的内容之前,我们先来看看Postfix+Dovecot+MySQL是如何相互协作以实现邮件服务器的各项功能。我们假设 张三通过quweiji.com的邮箱[email protected] 发送一份邮件给 李四[email protected],则服务器接收邮件的过程大致如下图所示:

Postfix+Dovecot+MySQL搭建邮件服务器

  1. [email protected]发送邮件到[email protected]
  2. quweiji.com服务器会通过DNS查询mydomain.com的MX记录并找到Postfix所在的服务器
  3. 邮件被发送给Postfix
  4. Postfix转向MySQL求助,以查询mydomain.com是不是需要处理的域名
  5. MySQL返回确认信息给Postfix
  6. Postfix将接受到的邮件投递给Dovecot的LMTP服务以便做处理
  7. Dovecot将邮件内容保存到[email protected]用户对应的磁盘路径

用户查收邮件的过程

上述例子中我们看到了服务器接收邮件的过程,接下来我们看看,当大家通过用户名密码登录邮箱查看邮件时,会发生什么事情:

Postfix+Dovecot+MySQL搭建邮件服务器

  1. 邮件客户端 to Dovecot:尊敬的Dovecot大人,您好!我阔以建立一个IMAP加密连接吗?
  2. Dovecot to 邮件客户端:当然阔以。这是我的SSL证书,请您告诉我帐号和密码!
  3. 邮件客户端 to Dovecot:好滴!这是我的用户名和密码,千万不要告诉别人哦!
  4. Dovecot to MySQL:Hi 美女!请问下,这个用户名和密码是正确的嘛?
  5. MySQL to Dovecot:好的,请稍后!呃……这个用户名和密码是正确的哦!
  6. Dovecot打开存放在本地磁盘/var/mail/mydomain.com/llisi的mailbox
  7. Dovecot获取到最新的邮件及其他相关信息
  8. Dovecot将邮件及其相关的其他信息通过IMAP协议发送给客户端

用户发送邮件的过程

查收了最新的邮件之后,李四[email protected]发现张三给他发来了邮件。现在,李四回复一封邮件给张三,会发生什么事情:

Postfix+Dovecot+MySQL搭建邮件服务器

  1. 邮件客户端 to Postfix:尊敬的Postfix大人,您好!我阔以建立一个安全的SMTP连接嘛?
  2. Postfix to 邮件客户端:说人话!可以就是可以,干嘛要说「阔以」啊!你丫贱啊,找抽啊!想建立SMTP连接可以,不过要加密。这是我的SSL证书,告诉我你的帐号和密码,你个贱人!
  3. 邮件客户端 to Postfix:对不起,大人,我错鸟!这是我的帐号和密码,不要告诉别人哦!
  4. Postfix to Dovecot:Hi 帅哥,帮我查一下这个帐号和密码!
  5. Dovecot to MySQL:Hi 美女,这个帐号和密码是正确的呢?!还是正确的呢?!还是……
  6. MySQL to Dovecot:好啦,你乖啦!我查过啦,这个帐号密码是正确的啦!表卖萌哦,Dovecot君!
  7. Dovecot to Postfix:大锅,则个帐号密码斯正缺滴!
  8. Postfix to 邮件客户端:贱人,过来!你给的帐号密码是正确的,允许你发送邮件!
  9. 邮件客户端将编写好的邮件通过SMTP协议发送给Postfix
  10. Postfix将收到的邮件转发给对方

以上,大家已经看到邮件收、发的整个过程。接下来看看如何才能成功配置邮件服务器。

DNS配置

首先,你需要有一个域名。本例中假定我们的域名为mydomain.com,以此为基础去做后续的所有工作。__请注意:在DNS相关配置没有成功之前,请勿尝试后续的操作。即使你配置好了Postifx,只要DNS相关配置没有成功,邮件服务器一样不能正常工作。__

其次,登录域名管理系统「强烈推荐使用DNSPod做域名管理」,新增几条MX记录指向你的邮件服务器。

第三,关于TTL设置。在测试邮件服务器的过程中,大家大可把TTL时间设置的短一点,这样可以让DNS服务器在很短的时间之内就起作用。当测试阶段过后,请即使将TTL时间设置成较大的值。什么?你问为什么要这样?自己去Google一下看看吧!TTL设置的太短会带来什么安全隐患。

设置完以后,DNS的MX记录及TTL时间大致如下:

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

SSL证书

关于SSL认证的问题,大家可以根据自己的情况做决定。有人偏向于购买第三方权威的SSL认证,也有人使用OpenSSL自己制作签名。当然,上述两种方法本质上是没有什么区别的,唯一的区别在于:如果是自己制作的SSL证书,大部分的邮件客户端都会弹出提示框询问是否信任等。

修改hostname

哈,终于进入了正题。现在,请大家打开终端「window系统用户可以选择使用putty等ssh工具连接服务器」并连接自己的服务器。

ssh [email protected]

连接成功以后,请第一时间执行下述命令切换到root用户:

sudo -s

请注意
为什么要切换到root用户?纯属个人爱好,因为我很懒,懒得每次执行命令时在命令的前面带上sudo这样的参数,因此直接切换到root用户好了。

接下来,在命令行中输入如下命令查看hostname:

hostname

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

hostname -f

将上述两个名称记录下来,安装postfix时你将会使用到。

当然,上述的机器名是可以随时修改的,如果你想要修改,可以直接通过vi编辑器打开/etc/hostname文件,并将自己想要的机器名写入其中并保存即可

MySQL安装及配置

本例中我们使用MySQL数据库保存Postfix需要服务的虚拟域名、用户帐号及密码、邮件别名三个重要的信息。

请注意:
其实Postfix和Dovecot是完全可以不使用数据库的,二者都可以通过各种配置文件完成「零数据库」的邮件服务器。但是,既然可以使用数据库这么方便,为什么不用呢?将这些需要配置的信息存储在数据库中「如:用户帐号及密码等」,对今后的维护来说是非常方便的事情。不是么?!

MySQL安装

在Ubuntu种安装软件,是再简单不过的事情了。安装MySQL请在命令行中执行如下命令:

apt-get install mysql-server

安装过程中会需要你输入两次MySQL的root口令,请牢记该口令

Postfix+Dovecot+MySQL搭建邮件服务器

新建数据库及用户

接下来,我们需要新建一个MySQL用户及一个数据库:

  1. 使用root口令登录MySQL
    mysql -u root -p
    
    
  2. 输入root口令
  3. 新建一个数据库,名称叫做mailserver:
    create database mailserver character set utf8;
    
    
  4. 输入如下命令以新建一个用户mailserver,并指定密码为mailserver123:
    create user [email protected]'localhost' identified by 'mailserver123';
    
    
  5. 将数据库mailserver的所有权限赋给用户mailserver:
    grant all on mailserver.* to [email protected]'localhost' identified by 'mailserver123';
    
    
  6. 退出root用户:
    exit;
    
    
  7. 使用mailserver用户登录:
    mysql -u mailserver -p
    
    
  8. 输入mailserver帐号的口令
  9. 将默认数据库切换为mailserver数据库:
    use mailserver;
    
    

新建表格

  1. 输入如下SQL语句以新建virtual_domains表,该表是本地服务器用以接收邮件的域名:
    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语句以新建virtual_users表,该表邮件服务器的终端用户表,记录用户的邮件地址及密码「千万不要保存明文密码」:
    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语句以新建virtual_aliases表,该表是邮件服务器别名表「邮件服务器种的别名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
    
    

插入数据

为了便于查看结果,接下来给上述三张表种插入一些测试数据:

  1. virtual_domains表插入测试数据,大致如下:
    insert into virtual_domains(id,name) values(1,'mail.mydomain.com');
    insert into virtual_domains(id,name) values(2,'mydomain.com');
    
    

    请注意:
    上述表种id字段是自增列,可以不赋值。但无论如何,接下来的两张表种我们将需要上述表种的逐渐列id的值。比如:我将要添加mydomain.com域名下的邮箱帐号,而mydomain.com在virtual_domains表种的id值为2。

  2. virtual_users表添加用户数据:
    insert into virtual_users(id,domain_id,password,email)
    values (1,2,ENCRYPT('zhangsan123456', CONCAT('$7$', SUBSTRING(SHA(RAND()), -16))),'[email protected]m');
    
    insert into virtual_users(id,domain_id,password,email)
    values (2,2,ENCRYPT('123456lisi', CONCAT('$7$', SUBSTRING(SHA(RAND()), -16))),'[email protected]');
    
    
  3. virtual_aliases表添加别名数据:
    insert into virtual_aliases(id,domain_id,source,destination)
    values (1,2,'[email protected]','[email protected]');
    
    insert into virtual_aliases(id,domain_id,source,destination)
    values (1,2,'[email protected]','[email protected]');
    
    

    请注意:
    通过上述别名表的数据,当有人给 [email protected]发送邮件时,系统将自动将邮件转发给 [email protected][email protected]
    这种场景,在公司内部「发送通知」等情况下适用

测试数据

写几个SQL查询语句查看下结果吧

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

Postfix安装及配置

Postfix是邮件发送的核心服务器,所有向内、向外投递的邮件都需要经过Postfix通过SMTP协议完成。接下来的内容,大家需要修改Postfix相关的一些参数,它们是:

  • 告诉Postfix如何连接MySQL数据库,并让Postfix通过数据库种的表确定收发邮件的域名、用户帐号及密码、邮件别名等
  • 告诉Postfix将收到的邮件转发给Dovecot的LMTP服务以完成本地投递
  • 告诉Postfix所有的连接都需要STARTTLS加密,如果有必要「废话啊,当然必须这样」
  • 开放本地端口25、465、587之一或全部

Postfix的安装

在命令行种执行以下命令以安装Postfix:

apt-get install postfix postfix-mysql

安装过程中需要选择Postfix的类型,请选择Internet Site

Postfix+Dovecot+MySQL搭建邮件服务器

Postfix安装过程中还会需要输入__System mail name__,这里请输入你要收发邮件的域名地址「随便写也可以,反正后面需要修改配置文件」

Postfix的配置

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

    请注意
    任何时候,对任何配置进行修改之前,先做好备份总是非常必要的
    同时,这也是一个非常良好的操作习惯

  2. 使用vi编辑器打开/etc/postfix/main.cf文件
    vi /etc/postfix/main.cf
    
    
  3. 打开之后,按下i键进入编辑模式
  4. 鉴于我们没有打算使用Postfix做用户的权限验证「上述几个图种已经展示清楚」,我们将要把Postfix默认的用户验证参数屏蔽,因此请在如下几行前边加入#符号以注释:
      # 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. 复制如下内容,并将其插入到上述注释代码之后:
    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
    
    

    请注意:
    上述几个参数的含义,请参照 Postfix配置文档

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

    请注意:
    mydestination的值修改为localhost,以便Postfix能够通过MySQL表中相关数据决定需要接受/发送邮件的域名,这样更具有通用性

  7. 在文档种加入以下内容,以便告诉Postfix不要使用LDA「Local Delivery Agent」转而使用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. 在文档中加入以下内容,以便告诉Postfix去MySQL数据库种寻找域名、用户帐号密码及邮件别名等信息:
    #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文件大致应该如下:
    # 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键并输入如下内容以保存并退出
    wq!
    
    
  11. 新建/etc/postfix/mysql-virtual-mailbox-domains.cf文件并输入如下内容:
    user = mailserver
    password = mailserver123
    hosts = 127.0.0.1
    dbname = mailserver
    query = SELECT 1 FROM virtual_domains WHERE name='%s'
    
    
  12. 重启Postfix服务
    service postfix restart
    
    
  13. 测试上述内容是否正确,如果上述内容配置正确,则如下命令执行后返回结果应该为1
    postmap -q mydomain.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
    
    
  14. 新建/etc/postfix/mysql-virtual-mailbox-maps.cf文件并输入如下内容:
    user = mailserver
    password = mailserver123
    hosts = 127.0.0.1
    dbname = mailserver
    query = SELECT 1 FROM virtual_users WHERE email='%s'
    
    
  15. 重启Postfix服务
    service postfix restart
    
    
  16. 测试上述配置是否正确,如果上述内容配置正确,则如下命令执行后返回结果应该为1
    postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
    
    
  17. 新建/etc/postfix/mysql-virtual-alias-maps.cf文件并输入如下内容:
    user = mailserver
    password = mailserver123
    hosts = 127.0.0.1
    dbname = mailserver
    query = SELECT destination FROM virtual_aliases WHERE source='%s'
    
    
  18. 重启Postfix服务
    service postfix restart
    
    
  19. 测试上述配置是否正确,如果上述配置正确,则如下命令执行后返回结果应该是之前添加的别名帐号:
    postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-alias-maps.cf
    
    
  20. 使用vi编辑器打开/etc/postfix/master.cf文件「__请注意修改之前先备份__」,找到submissionsmtps所在的两行,并将其注释去掉。这样做的目的是允许Postfix通过587和465端口发送邮件
  21. 重启Postfix服务
    service postfix restart
    
    

搞定,Postfix服务器应该配置完成了。__相信到这里的时候,已经吓走了90%以上的朋友,剩下的10%朋友们,你们是好样的。__

Dovecot安装及配置

Dovecot在本例中充当IMAP、POP服务器的角色,同时它也将负责用户登录时用户身份的验证「Dovecot会将真正的验证工作交给MySQL处理」。因为使用SSL,Dovecot将会使用993「IMAP协议」及995「POP协议」与外界交流,若服务器有iptable之类的玩意儿,请开放相关端口。

这部分的内容配置起来相对简单,但是需要配置的文件繁多。大体上,我们需要配置如下的信息:

  1. 开启Dovecot的IMAP、POP3、LMTP协议
  2. 告知Dovecot本地邮件的投档路径
  3. 连接Dovecot和MySQL数据库以验证用户身份
  4. 配置SSL加密相关信息

Dovecot的安装

通过如下命令安装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将要操作的磁盘路径相关配置信息
  • /etc/dovecot/conf.d/10-auth.conf 用户验证相关配置信息
  • /etc/dovecot/conf.d/auth-sql.conf.ext SQL-Type验证相关配置信息
  • /etc/dovecot/dovecot-sql.conf.ext Dovecot与数据库连接相关配置信息
  • /etc/dovecot/conf.d/10-master.conf Dovecot本地socket相关配置信息
  • /etc/dovecot/conf.d/10-ssl.conf 关于SSL的相关配置信息

请注意:
在修改上述文件之前,请一定先做好备份以方便恢复

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

使用vi编辑器打开/etc/dovecot/dovecot.conf文件并在文件种加入如下内容:

!include conf.d/*.conf

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

如果以上内容已经存在,只需要把该行的#号去掉即可
上述内容大致的意思是:__告诉Dovecot启用所有.conf文件;并开启Dovecot的imap、pop3、lmtp等相关协议使之正常工作__

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

打开文件并找到mail_location相关信息,将其指定到本地磁盘的某个路径,这个路径将来会存放收到的邮件,如下所示:

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

同时,找到文件中mail_privileged_group相关信息并将起修改为:

mail_privileged_group = mail

保存文件并退出

在命令行种输入如下内容以查看/var/mail路径的权限:

ls -ld /var/mail

显示的内容大致应该是:

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

创建/var/mail/vhosts/文件夹给每个需要启用的域名:

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

输入如下命令以新建vmail用户组及用户并赋权限

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

接下来修改一下/var/mail/目录的权限,使vmail能够访问:

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

默认情况下,Dovecot是允许Ubuntu系统用户登录使用的,我们需要将其禁用。找到文件种如下内容并将其注释:

#!include auth-system.conf.ext

开启Dovecot的MySQL支持,取消!include auth-sql.conf.ext的注释符号:

#!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文件

在文件中加入如下内容:

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';

保存退出

在命令行种输入如下内容以修改目录权限:

chown -R vmail:dovecot /etc/dovecot

chmod -R o-rwx /etc/dovecot

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

打开文件做如下修改「通过将端口设置为0,以禁用非SSL加密的IMAP和POP3协议」:

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并将其内容修改如下:

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内容并修改如下:

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并修改内容如下「请确保dovecot的pem文件已经存在,如果大家使用了自己的SSL文件,请将如下内容修改为相应的路径」:

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

强制用户使用SSL加密:

ssl = required

重新启动Dovecot服务:

service dovecot restart

测试邮件服务器是否正常

设置一个帐号,可以向MySQL对应的表中插入数据,接下来使用邮件客户端来测试一下。推荐使用Thunderbird邮件客户端或者Foxmail客户端等。请注意以下内容:

  • 邮箱的全称「包括后面的@mydomain.com」将作为用户名
  • 邮箱密码是MySQL数据库种对应邮箱的密码
  • 服务器相关接口是否全部开放?993、995、25等
  • 邮件收发的所有协议,包括IMAP、POP3、SMTP全部都需要开启SSL加密

配置好客户端之后即可连接获取、发送邮件。

相关文章
  • Postfix+Dovecot+MySQL搭建邮件服务器 2015-05-12

    说到邮件服务器,网上有许多不同解决方案.Window操作系统下常见的邮件服务器有hMailServer.MailEnable.EVOMailServer.Apache James(纯Java跨平台)等. 而在Linux/Unix系统中常用的邮件服务器也有不少选择,最经典也是最常见的莫过于Postfix.这篇文章将会讲述如何在Ubuntu系统之下,通过Postfix.Dovecot.MySQL整合实现普通意义上「邮件服务器」的大部分功能. 开始之前 配置邮件服务器并不是一项简单的工作,其过程不仅需

  • ADSL动态IP如何搭建邮件服务器 2013-01-16

    现在有很多企业没有固定的IP地址,想要搭建邮件服务器,现在介绍一下ADSL动态IP如何搭建邮件服务器. 适用对象: 各种大.中.小企业,SOHO一族.普通网民.政府及公众服务机构.使用ADSL作为服务器网络出口的动态IP地址的用户. 1. 运行支撑环境: U-Mail邮件服务器软件.花生壳客户端软件或捆绑了花生壳DDNS模块的路由器.网关等. 2. 优点: 动态的IP地址经常有被收入垃圾邮件IP地址数据库的可能,导致被对方拒收.使用U-Mail邮件服务器软件完美解决了这个问题.花生壳和U-Mai

  • Postfix+Dovecot的整合,邮件能否存入mysql 2011-01-28

    最近在做Postfix+Dovecot的整合.看了下资料,好像只有用户资料是放入mysql.不知道邮件是否也像 Apache james 一样 ,邮件也放入mysql数据库. 就如inbox.outbox的功能.刚触及这个,特别来问下.

  • 阿里云CentOS Linux服务器上用postfix搭建邮件服务器 2014-09-26

    注:本文的邮件服务器只用于发送邮件,也就是STMP服务器. 一.准备工作 1. 为邮件服务器添加DNS解析 虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件.根据我们的实际经验,需要添加三条DNS解析记录:A记录.MX记录.TXT记录.比如域名cnblogs.info,对应的DNS记录如下: 2. 准备存放邮件的硬盘空间 如果用的是阿里云入门级Linux服务器,有一块20G的数据盘未挂载,需要格式化并挂载(假设这里挂载的目录是/data),具体操作步骤见之前的博文阿里云云服

  • CentOS Linux服务器上用postfix搭建邮件服务器(转载) 2014-02-14

    一.准备工作 1. 为邮件服务器添加DNS解析 虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件.根据我们的实际经验,需要添加三条DNS解析记录:A记录.MX记录.TXT记录.比如域名cnblogs.info,对应的DNS记录如下: 2. 准备存放邮件的硬盘空间 如果用的是阿里云入门级Linux服务器,有一块20G的数据盘未挂载,需要格式化并挂载(假设这里挂载的目录是/data),具体操作步骤见之前的博文阿里云云服务器硬盘分区及挂载. 二.配置postfix postfix

  • 企业搭建邮件服务器软件必知的那点事儿 2013-05-16

    许多企业在构建企业邮件服务器时,由于对行业的不了解,面对众多的服务厂商不禁有种手足无措的感觉,各执其辞,真不知如何选择才算明智.那么,不妨来看看国内知名的邮件系统服务商U-Mail给企业朋友的一些专业建议. 企业资历: 资历也就是企业从建立到如今所累积技术与实践经验的综合实力.资历深的企业往往无论是在生产技术还是服务方面都会更加完善化,拥有更强的应变和处理问题能力.资历不是最重要的,但同样需要列入考察范围. 产品功能: 产品功能的重要性自是不用多说,是考量一款产品质量的重中之重.构建企业邮件系统

  • 如何搭建与外网通信的局域网邮件服务器 2011-06-10

    随着国内信息化的普及,国内大部分公司都有属于自己的企业局域网,公司资料的传递.信息交流等都通过企业局域网进行,部分企业更是严格限制员工禁止访问公网,一方面可以防止企业机密资料外泄,另一方面提高员工们的工作效率.对于这类企业,员工无法访问公网,但需要和外界的客户进行交流,特别是电子邮件通讯更是不可少的通讯工具,应如何搭建一个能与外网通信的局域网邮件服务器呢? u 前提条件: 在局域网搭建邮件服务器,首先需要具备自建系统的四大条件: 1. 一台服务器.现在市面上的主流服务器的硬件配置都能支持邮件系统

  • 花生壳与MDaemon架设邮件服务器案例图文教程第1/2页 2014-07-29

    MDaemon是一款非常优秀的邮件服务器软件,这里给大家介绍一下MDaemon配合花生壳动态域名搭建邮件服务器的安装和一些主要的设置. 第一步:建立网络通讯部分,为所建立的MAIL服务设置动态域名解析服务配置 1.下载花生壳动态域名解析软件并安装. 2.运行花生壳软件,点击"注册Oray护照",根据弹出注册护照窗口提示进行注册.注册Oray护照完成后,使用所注册的护照名称和密码填入花生壳软件中进行登陆. 3.由于收发邮件需要设置MX记录,因此建议申请一个顶级域名或把护照升级为专业服务,

  • 邮件服务器架设-双机热备方案 2009-11-05

    双机热备针对的是服务器的临时故障所做的一种备份技术,通过双机热备,来避免长时间的服务中断,保证系统长期.可靠的服务.本方案将详细介绍邮件服务器双机热备的解决方案,以TurboMail邮件服务器为例,大家可以根据这个参考下. 1.集群技术 在了解双机热备之前,我们先了解什么是集群技术. 集群(Cluster)技术是指一组相互独立的计算机,利用高速通信网络组成一个计算机系统,每个群集节点(即集群中的每台计算机)都是运行其自己进程的一个独立服务器.这些进程可以彼此通信,对网络客户机来说就像是形成了一个

  • 邮件服务器市场急需解决的三个"简单问题" 2013-01-05

    据调查显示,邮件服务器产品及服务日渐成熟,市场规模不断扩大,同时像金融.政府部门.事业单位.医疗.教育能源.电信运营商等行业对邮件服务器需求不断增加,整个邮件服务器市场呈现一片欣欣向荣,前景十分乐观. 但作为邮件服务商,在市场繁荣背后,却也有着担忧:产品同质化.同行竞争激烈.企业高要求.也正因如此,邮件系统领域一线品牌U-Mail认为,在这弱肉强食的时代,邮件服务商急需解决三个"简单问题": 1. 我卖的是什么邮件服务器? 2. 为什么要选择我的邮件服务器? 3. 如何留住客户? 不管

  • U-Mail邮件服务器缓存功能 轻松实现"内网"互联 2013-12-05

    老板真的是越来越抠门了,这个怎么实现吖,怎是太郁闷了.又要我这个门外汉来做..在XX公司做行政的小李又在跟哭诉学计算机的学长小张抱怨了.今天领导又给派了个任务,让我搭建邮件服务器,我的天吖. 小张接到讯息后一边安慰小李,这个很简单吗的.不要太担心,这不是有我吗?心里替小李打抱不平,这不是赶鸭子上架吗.说来看看,你们老板又给你下了什么任务吖.. "老板想在我们公司与分公司之间建立两个独立的邮件服务器分别对外进行邮件收发,一个是@domain.com 一个是@test. com我想怎么配置这两台服务

  • centos6:postfix加dovecot邮件服务器配置+(CentOS)Centos6.3下搭建postfix/dovecot服务 2015-04-11

    mail邮局系统的MX(邮件交换)记录配置,以便收发邮件.(MX记录,是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器,如果没有做域名解析,邮局不能正常使用,即不能正常的发送或者接收邮件.) centos6:postfix加dovecot邮件服务器配置 安装postfix和dovecot yum install postfix dovecot chkconfig postfix on chkconfig dovecot on 配置postfix

  • [邮件] Postfix + Dovecot + Postfixadmin + Roundcubemail 企业邮件解决方案 2012-03-09

    近期给一个朋友的公司搭建一套邮件服务系统,于是在这方面做了一些调查和选型的工作,对比了诸多邮件服务器的解决方案,最后决定采用 iRedmail (http://www.iredmail.org/ ) 里面所提供的 Postfix + Dovecot + Postfixadmin + Roundcubemail 邮件系统解决方案,原因有两个:其一,这个解决方案可以说是目前最成熟的 Linux 系统解决方案,性能没话说,而且完全免费:其二,iRedmail 提供的安装脚本可以帮助我们快速的在 Lin

  • 邮件服务器Postfix 2014-03-20

    2014-03-20 一.邮件服务器 1.邮件传输所需组件及相关协议 MDA:邮件传送代理人 MTA:邮件发送代理人,postfix,sendmail,qmail,使用smtp协议(tcp 25) MUA:邮件用户代理人,foxmail,thunderbird,使用pop3(110),imap(143)协议来接收邮件. 2.mta服务器用postfix来实现 3.zimbra卸载 [[email protected] zcs-8.0.6_GA_5922.RHEL6_64.20131203103705]# ./i

  • 邮件服务器 Dovecot 2008-09-11

    Dovecot 网站 : http://www.dovecot.org/ Dovecot 是一个开源的 IMAP 和 POP3 邮件服务器,支持 Linux/Unix 系统. POP / IMAP 是 MUA 从邮件服务器中读取邮件时使用的协议.其中,与 POP3 是从邮件服务器中下载邮件比起来,IMAP4 则是将邮件留在服务器端直接对邮件进行管理.操作.而Dovecot 是一个比较新的软件,由 Timo Sirainen 开发,最初发布于 2002年7月.作者将安全性考虑在第一,所以 Dove

  • 企业邮件服务器搭建之品牌形象塑造 2013-04-11

    企业邮件服务器搭建,顾名思义即为企业所专门搭建的邮件服务器系统,其目的则主要是通过独立邮件系统,使之能够更好地处理企业内外的电子邮件业务往来. 然而,你是否有想过,拥有一套专属的企业邮件服务器,对于自身品牌形象的塑造有着什么样的影响呢? 企业邮件系统由于可以自行设定域名后缀,便慢慢演化成为一种品牌的代表.几乎所有的大型公司都会有一套甚至几套邮件系统.当你发出一封邮件,收件者只需一眼就能知道这是来自于哪家公司,是什么品牌.即便他不曾听说过,而此刻,潜意识中你的品牌已经在他脑海里留下了印记.数次之后

  • postfix邮件服务器的关键安全策略 2013-12-16

    邮件系统是Linux网络应用的重要组成,一个完整的邮件系统包括三个部分:底层操作系统(Linux Operation),邮件传送代理(Mail Transport Agent,MTA),邮件分 发代理(Mail Delivery Agent,MDA),邮件用户代理(Mail User Agent,MUA). Postfix是一个非常优秀的MTA,她素以高效.安全的特点而著称.Postfix是作者在UNIX上所见过的MTA中在反垃圾邮件(Anti-Spam或Anti-UCE)方面做得最好的一个,甚

  • 政府机构邮件服务器搭建方案 2014-06-12

    背景: 近年来,顺应信息化大潮,越来越多地方政府尝试政务公开,着力建设"电子政府",这是贴近民众.深接地气响应中央向"服务型政府职能转变"的举措.在信息化建设的大工程中,邮件系统是重要一环,它承担着政府机关内部沟通提升效率的重担,同时一些单位亦利用它加强与辖区内居民联系,使政府公告及时传达.深入人心.自从"棱镜门"丑闻曝光以来,中国政府将信息安全提到了前所未有的高度,连IBM此类资深企业都被禁止涉足某些领域.正是在这样的背景下,4月份U-Mail

  • Linux Postfix+Dovecot+sasl 2013-08-28

    又有业务需求要搞postfix,几年前部署过,这真是一段时间不操作就忘光光啊,趁部署完赶紧记录一下,部署环境debian5,软件都是apt安装,不要源码安装.这次的业务要求是能调用接口发邮件,并且为了安全要经过认证的账号才能发邮件,没经过认证的则拒绝.如果发信时无需认证的邮件服务器,很容易造成大量垃圾邮件的产生,也给服务器带来了不必要的负担.经过google后发现Cyrus SASL(Cyrus简单认证安全层)这个能满足我的需求. Postfix使用SASL框架来实现验证,具体地说是由Cyrus

  • 帮您选择一款最好的免费邮件服务器 2011-04-21

    近年来,随着互联网络的高速发展和普及,电子邮件逐渐成为企业经营.管理以及运作业务等主要的通讯和协同手段,邮件系统也成为企业信息化建设中非常重要的一环.市场上企业庞大的需求,带动了国内邮件系统行业的快速发展,互联网也出现不少免费邮件服务器产品公开地给用户去下载安装使用,可以分为以下几种,在此笔者作出总结供大家参考. 一.开源邮件系统 市面上主流的开源邮件系统,普遍支持Linux操作平台,部分开源产品支持windows操作系统. 1. Linux版本开源邮件系统 其中,可运行在Linux环境下的免费