AWS Ubuntu 16.04搭建邮件服务器(Postfix+Dovecot+Mysql)

       最近想给我们的iplaystudio搭建一个邮件服务器,选择的方案是经典的Postfix+Dovecot+Mysql,在此记录一下本次实践的过程,以供以后参考。在实践过程中,我主要参考了简书YusenMeng从零开始邮件服务器搭建和CSDN上的Ubuntu之邮件服务器(Postfix, Dovecot, MySql)这两篇博文,名词解释很详细,过程也很细致,在此感谢大神们的无私分享,给了我们后来人很大的帮助。

        一开始我在阿里云服务器上进行搭建后,发现可以在自己的域内收发邮件以及接收外域的邮件,但是无法向外域发送邮件,捣鼓了半天才知道阿里封锁了对外25端口,最终我不得不转移AWS上进行操作,建议如果有向外域发送邮件的需求的话,最好选择AWS作为邮件服务器。

        下面进入正题

      开放端口

        设置AWS的安全组,开放邮件服务的相关端口

        如下图

        SMTP——25

        SMTPS——465、587

        POP3——110

        POPS——995

        IMAP——143

        IMAPS——993

       设置域名解析


        创建A记录,将我的域名(iplaystudio.top)解析到我的ip地址

        创建MX记录,指向我的域名

        分别创建mail、imap、pop、smtp的CNAME记录,指向我的域名,相当于是域名的一个别名。

        完成以上工作之后,就可以连接服务器,在服务器上进行相关工作了。

      设置HOSTNAME

        通过以下命令设置机器的hostname,hostname与我的域名保持一致

  hostnamectl set-hostname iplaystudio.top

       安装MySql

$ sudo apt-get install mysql-client mysql-server

        安装完以后会提示输入密码,下文就以root作为数据库用户,password作为数据库密码

        之后我们需要创建mail数据库,并将mail数据库的相应权限赋给root用户

$ mysql -u root -p 

Enter password: input your password 

mysql> CREATE DATABASE mail; 

mysql> USE mail; 

mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'root'@'localhost' IDENTIFIED BY 'password'; 

mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'password'; 

mysql> FLUSH PRIVILEGES; 

      创建domains、users、forwardings和transport四张表

mysql> CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) ); 

mysql> CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) ); 

mysql> CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) ); 

mysql> CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) ); 

      至此MySql数据库就设置好了。

    安装并配置Postfix

$ sudo apt-get install postfix postfix-mysql postfix-doc mailutils

      安装的过程中会弹出界面

      General type of mail configuration 我们选择 Internet Site 

      System Mail Name 填写自己的域名 iplaystudio.top

      安装完成后,修改配置文件main.cf

postconf -e 'myhostname = iplaystudio.top'

postconf -e 'mydestination = iplaystudio.top, localhost, localhost.localdomain'

postconf -e 'mynetworks = 127.0.0.0/8, 18.219.29.10'

postconf -e 'message_size_limit = 30720000'

postconf -e 'virtual_alias_domains ='

postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'

postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'

postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'

postconf -e 'virtual_mailbox_base = /home/vmail'

postconf -e 'virtual_uid_maps = static:5000'

postconf -e 'virtual_gid_maps = static:5000'

postconf -e 'smtpd_sasl_type = dovecot'

postconf -e 'smtpd_sasl_path = private/auth'

postconf -e 'smtpd_sasl_auth_enable = yes'

postconf -e 'broken_sasl_auth_clients = yes'

postconf -e 'smtpd_sasl_authenticated_header = yes'

postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'

postconf -e 'smtpd_use_tls = yes'

postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem'

postconf -e 'smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key'

postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'

postconf -e 'virtual_transport = dovecot'

postconf -e 'local_transport = dovecot'

      修改master.cf文件

        取消注释smtps和submission部分,并在末尾加入

dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient} 

      编写相关的虚拟文件

       虚拟domain文件

  $ sudo vim /etc/postfix/mysql-virtual_domains.cf

        由于virtual是mysql的保留关键字,所以这里的列别名要加上双引号——"virtual"

user = root

password = password

dbname = mail

query = SELECT domain AS "virtual" FROM domains WHERE domain='%s'

hosts = 127.0.0.1

        虚拟forwarding文件

$ sudo vim /etc/postfix/mysql-virtual_forwardings.cf

user = root

password = password

dbname = mail

query = SELECT destination FROM forwardings WHERE source='%s'

hosts = 127.0.0.1

        虚拟mailbox文件

$ sudo vim /etc/postfix/mysql-virtual_mailboxes.cf

user = root

password = password

dbname = mail

query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'

hosts = 127.0.0.1

        虚拟email2email文件

$ sudo vim /etc/postfix/mysql-virtual_email2email.cf

user = root

password = password

dbname = mail

query = SELECT email FROM users WHERE email='%s'

hosts = 127.0.0.1

         设置权限

$ sudo chmod o= /etc/postfix/mysql-virtual_*.cf

$ sudo chgrp postfix /etc/postfix/mysql-virtual_*.cf

          建立用户

$ sudo groupadd -g 5000 vmail

$ sudo useradd -c 'VMail' -g vmail -u 5000 vmail -d /home/vmail -m    

        到这就完成了Postfix的安装和配置

       安装并配置Dovecot

$ sudo apt-get install dovecot-common dovecot-imapd dovecot-pop3d dovecot-mysql

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

log_timestamp = "%Y-%m-%d %H:%M:%S "

mail_location = maildir:/home/vmail/%d/%n/Maildir

namespace {

        inbox = yes

        location =

        prefix = INBOX.

        separator = .

        type = private

}

passdb {

        args = /etc/dovecot/dovecot-sql.conf

        driver = sql

}

protocols = imap pop3

disable_plaintext_auth = no

auth_mechanisms = plain login

service auth {

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

                group = postfix

                mode = 0660

                user = postfix

        }

        unix_listener auth-master {

                mode = 0600

                user = vmail

        }

        user = root

}

ssl = required

ssl_cert = </etc/ssl/certs/dovecot.pem

ssl_key = <//etc/ssl/private/dovecot.key

userdb {

        args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes

        driver = static

}

protocol lda {

        auth_socket_path = /var/run/dovecot/auth-master

        log_path = /home/vmail/dovecot-deliver.log

        postmaster_address = postmaster@zjc.com

}

protocol pop3 {

        pop3_uidl_format = %08Xu%08Xv

}

     创建dovecot-sql.conf文件

$ sudo vim /etc/dovecot/dovecot-sql.conf

driver = mysql

connect = host=127.0.0.1 dbname=mail user=root password=password

default_pass_scheme = CRYPT

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

       修改dovecot-sql.conf文件权限

$ sudo chgrp vmail /etc/dovecot/dovecot.conf

$ sudo chmod g+r /etc/dovecot/dovecot.conf

        至此配置就完成了。

      重启服务

$ sudo service postfix restart

$ sudo service dovecot restart

      添加测试账号

        最后就是添加测试账号进行测试了

mysql> USE mail; 

mysql> INSERT INTO domains (domain) VALUES ('vzjc.com'); 

mysql> INSERT INTO users (email, password) VALUES ('user@iplaystudio.top', ENCRYPT('password'));

mysql> quit

      后续就可以通过user@iplaystudio.top和password来登录邮件服务器了

      在测试之前需要重启一下机器

      然后使用telnet分别测试25、587、imap、pop,看到以下结果就代表服务启动成功了

        接下来就可以通过outlook、Foxmail来登录邮件服务器,验证收发邮件功能了


        至此,邮件服务器的搭建就完成了,接下来可以参考这篇博文邮件服务器添加SPF、DKIM、DMARC、PTR提高送达率来设置SPF、DKIM和DMARC以提高邮件送达率。

      参考博文

从零开始邮件服务器搭建

Ubuntu之邮件服务器(Postfix, Dovecot, MySql)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容