当前位置: 首页 > Linux

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

时间:2023-04-06 01:48:43 Linux

最新ubuntu搭建公网个人邮件服务器(基于postfix、dovecot、mysql)通过邮件发送通知,但是是免费的我的邮箱每天发送的邮件数量是有限制的,所以想自己搭建一个邮件服务器,可以实现邮件的收发。找了资料,测试了大概一个星期,终于成功了。写一篇教程分享给大家。本教程基于ubuntu18.04(其他linux理论上也可以,只是安装的软件包不同)。主要用到的软件有:postfix、dovecot、mysql。废话不多说,下面是教程:前提条件mysql数据库。在本教程中,mysql用于存储域名、用户信息等域名。需要域名才能向公共网络发送/接收电子邮件。这里我们以lichongbing.com为例。证书。免费的ssl证书提供商很多,或者使用自签名证书,百度一下就可以了。安装软件切换到root用户执行以下命令:aptupdateaptinstallpostfixpostfix-mysqldovecot-coredovecot-pop3ddovecot-imapddovecot-lmtpddovecot-mysql在安装过程中,postfix会弹出提示:选择类别,这里我们选择第二项:InternetSite。然后会出现如下提示:这里填写域名:lichongbing.com配置mx解析在域名提供商中添加如下解析:MX记录:lichongbing.com指向服务器IPA记录:pop3.lichongbing.com指向到服务器IPA记录:smtp.lichongbing。com指向服务器IP创建mysql数据库创建数据库mailserver,管理账号为:admin/123456创建虚拟域表作为认证域。该表是邮件服务器接收邮件使用的域名:--创建表CREATETABLE`virtual_domains`(`id`INTNOTNULLAUTO_INCREMENT,`name`VARCHAR(50)NOTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;--Insertarecordinsertintovirtual_domainsvalues(1,'test.com')创建用户表用于用户认证。--CREATETABLE`virtual_users`(`id`INTNOTNULLAUTO_INCREMENT,`domain_id`INTNOTNULL,`password`VARCHAR(106)NOTNULL,`email`VARCHAR(120)NOTNULL,PRIMARYKEY(`id`),UNIQUEKEY`email`(`email`),FOREIGNKEY(domain_id)REFERENCESvirtual_domains(id)ONDELETECASCADE)ENGINE=InnoDBDEFAULTCHARSET=utf8;--插入两个用户,密码用md5加密,实际应用中应该选择强度更高的算法,md5目前不安全insertintovirtual_usersvalues(1,1,md5('123456'),'first@test.com');插入virtual_users值(2,1,md5('123456'),'second@test.com');创建别名表。该表的作用相当于当源端收到邮件后,自动将邮件转发到目的地。--创建表CREATETABLE`virtual_aliases`(`id`int(11)NOTNULLauto_increment,`domain_id`int(11)NOTNULL,`source`varchar(100)NOTNULL,`destination`varchar(100)NOTNULL,PRIMARYKEY(`id`),FOREIGNKEY(domain_id)REFERENCESvirtual_domains(id)ONDELETECASCADE)ENGINE=InnoDBDEFAULTCHARSET=utf8;--插入数据,所有发送到第一个的邮件将自动转发到第二个insertintovirtual_aliasesvalues(1,1,'first@test.com','second@test.com')生成ssl证书生成ssl证书可以参考这篇文章https://www.jianshu.com/p/b47...测试。com生成ssl证书,假设证书存放地址为:公钥/etc/letsencrypt/live/test.com/fullchain.pem;私钥/etc/letsencrypt/live/test.com/privkey.pem;配置postfixpreferredbackuppostfix默认的配置文件,然后编辑main.cfcp/etc/postfix/main.cf/etc/postfix/main.cf.bakvim/etc/postfix/main.cf注释下面的配置:注释然后添加以下配置:#使用你自己的ssl证书smtpd_tls_cert_file=/etc/letsencrypt/live/test.com/fullchain.pemsmtpd_tls_key_file=/etc/letsencrypt/live/test.com/privkey.pemsmtpd_use_tls=yessmtpd_tls_auth_only=yes#使用dovecot进行身份验证身份验证dovecotdovecotpatpat_satsl_ttype=h=private/authsmtpd_sasl_auth_enable=yessmtpd_recipient_restrictions=permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination将myhostname,myorigin修改为如下值:myhostname=test.commyorigin=$myhostname将mydestination的值修改为localhost启动mysqllocaldes配置文件虚拟域innation=:添加最后一行确保邮件被传送到mysql表中列出的虚拟域。virtual_transport=lmtp:unix:private/dovecot-lmtp最后添加以下三个参数,告诉Postfix配置虚拟域、用户和别名virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cfvirtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cfvirtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf接下来,创建与上面添加的最后三个参数对应的文件。创建/etc/postfix/mysql-virtual-mailbox-domains.cf,内容如下:user=adminpassword=123456port=3306hosts=127.0.0.1dbname=mailserverquery=SELECT1FROMvirtual_domainsWHEREname='%s'然后重启postfix,并测试postfix是否能找到域,成功则返回1:servicepostfixrestartpostmap-qtest.commysql:/etc/postfix/mysql-virtual-mailbox-domains.cfCreate/etc/postfix/mysql-virtual-邮箱地图。cf,内容如下:user=adminpassword=123456port=3306hosts=127.0.0.1dbname=mailserverquery=SELECT1FROMvirtual_usersWHEREemail='%s'然后重启postfix,测试能否找到邮箱地址,成功返回1:servicepostfixrestartpostmap-qfirst@test.commysql:/etc/postfix/mysql-virtual-mailbox-maps.cf最后创建/etc/postfix/mysql-virtual-alias-maps.cf,内容如下:user=adminpassword=123456port=3306hosts=127.0.0.1dbname=mailserverquery=SELECTdestinationFROMvirtual_aliasesWHEREsource='%s'同样重启postfix,验证alias是否能正确找到,返回:servicepostfixrestartpostmap-qfirst@test.commysql:/etc/postfix/mysql-virtual-mailbox-maps.cf如果响应使用587端口进行我的smtp通讯,需要修改/etc/postfix/master.cf文件:取消下面一行的注释:configuredovecotpostfixisconfigured,现在要配置dovecot,先编辑主配置文件/etc/dovecot/dovecot.conf:首先确保启用了以下行:!includeconf.d/*.conf然后在配置文件的末尾添加以下配置以启用每个协议:protocols=imaplmtppop3修改/etc/dovecot/conf.d/10-mail.conf,确保存在以下两个配置:mail_location=maildir:/var/mail/vhosts/%d/%nmail_privileged_group=mail以上配置设置邮件存放目录在/var/mail,所以该文件夹属于将其更改为vmail/vmail。命令如下:groupadd-g5000vmailuseradd-gvmail-u5000vmail-d/var/mailchown-Rvmail:vmail/var/mailmodify/etc/dovecot/conf.d/10-auth.conf首先确保以下两个配置存在且取值正确:disable_plaintext_auth=yesauth_mechanisms=plainlogin然后修改配置禁用系统用户登录,开启mysql支持,如下图:Enablemysqlsupport修改/etc/dovecot/conf.d/auth-sql.conf.ext文件,将内容改成如下:passdb{driver=sqlargs=/etc/dovecot/dovecot-sql.conf.ext}userdb{driver=staticargs=uid=vmailgid=vmailhome=/var/mail/vhosts/%d/%n}修改/etc/dovecot/dovecot-sql.conf.ext:最好取消驱动参数的注释,设置为mysqldriver=mysql,然后取消注释连接线并将其设置为以下内容:connect=host=127.0.0.1port=3306dbname=mailserveruser=adminpassword=123456然后取消注释default_pass_scheme行并将其更改为MD5default_pass_scheme=MD5然后取消注释password_query行并进行设置到以下信息:password_query=SELECTemailasuser,passwordFROMvirtual_usersWHEREemail='%u';最后将/etc/dovecot的owner修改为vmail:dovecotchown-Rvmail:dovecot/etc/dovecotchmod-Ro-rwx/etc/dovecot修改/etc/dovecot/conf.d/10-master.conf:Firstsetimap-login和pop3-login下的第一个端口为0,禁用非ssl加密的imap和pop3协议,如下图:然后找到servicelmtp并设置修改如下:servicelmtp{unix_listener/var/阀芯/postfix/private/dovecot-lmtp{mode=0600user=postfixgroup=postfix}#只有当你不能使用上面的UNIX套接字时才创建inet监听器#inet_listenerlmtp{#避免让LMTP在整个互联网上可见#address=#port=#}}然后找到serviceauth,修改其内容如下:serviceauth{unix_listener/var/spool/postfix/private/auth{mode=0666user=postfixgroup=postfix}unix_listenerauth-userdb{mode=0600user=vmail#group=}user=dovecot}最后找到serviceauth-worker,改成如下:如果这不是必需的,则应将用户更改为#$default_internal_user。user=vmail}required:ssl=required然后设置ssl证书路径就ok了,或者使用之前的ssl证书:ssl_cert=