搭建属于自己的个人邮件服务器 --EwoMai

0x01至于搭建个人邮件的原因?

哈哈,原因很简单,作为一个单身许久的程序员实在是无聊。一次偶然的机会接触到了公司搭建的个人邮件服务器。趁着周末时间看了一下网上开源的邮件服务器iredmail、extmail、emos、umail 等;都各有个的优点,论安全性的话我觉得 extmail 邮箱服务器很好,至于我为什么不选择 extmail 因为我尝试了一下,这个是基于 PHP 写的,配置起来太痛苦了,于是小编找遍网上各种开源的 Email 服务器,于是选择了 EwoMai . 原因是界面还不错,还可以切换主题,至于安全性的嘛开源版本的没有绝对的安全,这就点忽略了。

0x02EwoMail 简介

EwoMail 是基于 Linux 的开源邮件服务器软件,集成了众多优秀稳定的组件,是一个快速部署、简单高效、多语言、安全稳定的邮件解决方案,帮助你提升运维效率,降低 IT 成本,兼容主流的邮件客户端,同时支持电脑和手机邮件客户端。

安全与稳定:

集成知名的开源反垃圾和防病毒组件,为你的邮件保驾护航,服务器定时更新病毒库,无需管理。支持基于 TLS/SSL(POP3/IMAP/SMTP)邮件传输加密,支持服务器与邮件账号的密码破解防御。数据安全,可以根据需求在你的服务器定时备份数据(包括邮件数据)

集成组件

  • Postfix:邮件服务器

  • Dovecot:IMAP/POP3/邮件存储

  • Amavisd:反垃圾和反病毒 (低配置服务器建议关闭)

  • Fail2ban:监控策略

  • LNAMP:apache2.2,nginx1.8, mysql5.5,php5.4

  • EwoMail-Admin:Web 邮箱管理后台

  • Rainloop:webmail

0x03安装环境

服务器需要干净环境,要求全新干净系统,不能安装在已有的 apache,mysql 的环境中。在上面吃过亏数据库给搞坏了,恢复数据大半天放弃了。

配 置:

  1. 云服务器(CentOS 6/7 系统)

  2. 域名(国内需要备案)

最低配置:

  • CPU:1 核

  • 内存:1G

  • 磁盘: 40G

由于新版本的杀毒软件占用的内存比较多,512M 到 2GB 内存请参考降低内存占用

0x03准备工作

Nginx 反向配置,SSL 证书配置

域名解析配置

首先进入到各大服务商的域名控制台,点击解析按钮,配置以下参数;

主机记录

记录类型

解析线路

记录值

mail

A

默认

服务器 IP

@

A

默认

服务器 IP

pop3

CNAME

默认

mail.slera.cn

pop

CNAME

默认

mail.slera.cn

imap

CNAME

默认

mail.slera.cn

smtp

CNAME

默认

mail.slera.cn

@

TXT

默认

v=spf1 include:118.24.188.192 -all

@

MX

默认

mail.slera.cn

删除线部分需要改成服务器的 ip 地址,_dnsauth 这两个是申请 ssl 证书的时候解析的地址,在 SSL 证书申请完成后会自动添加不需要手动添加。pop3,pop,imap 是邮局的协议目前流行的是 imap 协议,其他两个可以不用配置。

至此,域名解析就配置完成,可以进行准备安装了!!

0x04EwoMail 安装

CentOS 6/7 防火墙

安装成功后,系统会开放以下的端口 ,CentOS 系统是默认开启防火墙的,可关闭

默认开放的端口

端口都是 TCP 类型

8000,8010,443,8020,25,143,993,995,587,110,109,22,80,465

如果是使用的是云服务器,可能需要在控制面板的防火墙开放以上端口

必须打开的端口 8000,8010,25,143

关闭防火墙

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

#firewall 关闭之后看一下iptables状态

service iptables status
systemctl disable iptables.service
service iptables stop

服务器开启端口

如果不关闭防火墙可以将端口添加为白名单

firewall-cmd --zone=public --add-port=80/tcp --permanent

关闭 selinux

vi /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled

检查 swap

如果没启动 swap,这会导致 EwoMail 的防病毒组件不能启动,所以在安装前先检查 swap 是否已经启动,如已启动可跳过该步骤。

查看swap
free -m

创建 swap 分区(内存超过 2G,可不配置)

创建 1G 的 swap,可以根据你的服务器配置来调整大小

dd if=/dev/zero of=/mnt/swap bs=1M count=1024  

设置交换分区文件

mkswap /mnt/swap

启动 swap

swapon /mnt/swap

设置开机时自启用 swap 分区

需要修改文件 /etc/fstab 中的 swap 行,添加
/mnt/swap swap swap defaults 0 0

个人觉得这地方最好重启一下,可能会因为/etc/fstab 挂载错误导致系统不能启动

邮箱域名

EwoMail 本身是可以配置多个域名来收发邮件的,但在安装前需要一个邮箱的主域名。本次教程例子使用的主域名是 iredteam.cn

设置主机名(可不配置主机名)

EwoMail 在安装后会默认使用域名前缀 mail 的主机名,例如: mail.iredteam.cn

将系统主机名改成 iredteam.cn

查看当前主机名

hostname -f

CentOS7 配置

输入命令:

hostnamectl set-hostname mail.iredteam.cn

修改文件 /etc/hosts , 添加 mail.iredteam.cn,添加 hosts 可以加快域名解析(也可以不配置)

安装(方法一)

虽然官方建议使用此方法安装,但是个人不建议使用 Git 方式安装,个人推荐下面方法二通过一个链接就可以安装完成,因为我尝试了 N 次虽然显示安装成功了,

但是实际并没有,还有个原因版本库是在 GitHub 上面,国外的网站访问速度有限制。

GitHub 项目地址 https://github.com/gyxuehu/EwoMail

yum -y install git
cd /root
git clone https://github.com/gyxuehu/EwoMail.git
cd /root/EwoMail/install
#需要输入一个邮箱域名,不需要前缀,列如下面的ewomail.cn
sh ./start.sh ewomail.cn

安装 (方法二)

安装前请服务器必须已链接网络,安装时间将会根据你的系统配置和网络环境大概会在 10 分钟内安装完成。(需要 root 权限)

打开:http://www.ewomail.com/list-11.html 输入域名获取安装代码

wget -c http://download.ewomail.com:8282/ewomail-1.05.sh && sh ewomail-1.05.sh slera.cn

复制上面代码注意修改域名,执行安装命令后全程会自动安装(需要 root 权限);

安装过程中可能会显示 shutting down postfix : FAILED,如果它的下面再出现一条 starting postfix : OK ,那就是正常的。

安装成功后将会输出”Complete installation”。

查看安装的域名和数据库密码

cat /ewomail/config.ini

遇到的报错

部分 CentOS 版本可能会在安装时不兼容的情况,会出现 ewomail-lamp install failed

在 sh ./start.sh xxx.com 安装域名后面加-f

完整语句

sh ./start.sh xxx.com -f

注意:使用该命令安装,必须要求你的系统是全新干净的系统,而且系统没有安装 apache,mysql,nginx 这些组件,否则千万别执行该命令安装。

启用 Nginx 代理 (Http 协议 + Https 协议)

https 协议需要申请 SSL 证书,阿里云、腾讯云等都可以免费申请

vim /ewomail/nginx/conf/nginx.conf

http 下加入 include /ewomail/nginx/conf.d/*.conf;

#创建conf.d文件夹
mkdir -p /ewomail/nginx/conf.d/

#进入conf.d路径下
cd /ewomail/nginx/conf.d/

#创建文件mail.conf
touch mail.conf

#编辑文件mail.conf
vim mail.conf
upstream mail{
   ip_hash;
   server 127.0.0.1:8000 max_fails=3 fail_timeout=600s;
server {
     listen 80;
     server_name slera.cn; #填写绑定证书的域名
     # 获取真实IP
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header REMOTE-HOST $remote_addr;
     # 获取代理者的真实ip
     proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
     proxy_http_version 1.1;
     #proxy_set_header Connection "";
     proxy_buffering off;
     proxy_redirect off;
     location / {
             proxy_pass http://mail;
     }
}

#下面是Https协议,需要申请SSL证书。[申请SSL证书](https://www.slera.cn/articles/2019/11/02/1572624076821.html)

#ssl_certificate和ssl_certificate_key分别是证书文件名称和私钥文件名称(很重要!!)
server {
        listen 443 ssl backlog=65535;
        #ssl on;
        server_tokens off;
        server_name slera.cn;
        #access_log /gs/nginx-logs/teach.access.log;
        #proxy_set_header Host $host:$server_port;
        proxy_set_header Host $host;
        # 获取真实IP
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        # 获取代理者的真实ip
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        #proxy_set_header Connection "";
        proxy_buffering off;
#        proxy_redirect off;
        ssl_certificate /ewomail/nginx/crt/slera.cn.pem;#证书文件名称
        ssl_certificate_key /ewomail/nginx/crt/slera.cn.key;#私钥文件名称
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #请按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#请按照这个套件配置
        ssl_prefer_server_ciphers on;
    location / {
             proxy_pass http://mail;
     }
}

0x05邮箱管理后台

登录界面

在浏览器输入你的邮箱管理后台地址,例如:http://IP:8010

默认账号:admin密码:ewomail123

首次登陆后请尽快改密码。http://服务器 IP:8010/Admin/user

邮箱域名管理

系统安装后会自动把邮箱主域名添加,手动在后台添加的域名基本是副域名。

添加域名后需要设置副域名的 DNS 才能正常收发邮件。

邮箱系统设置

系统安装后会自动添加配置信息,在更改主域名后才需要更改邮箱配置信息,一般情况下不建议修改。

imap 和 smtp 是客户端的配置信息。

邮箱用户管理

接下来就可以通过 http://服务器 IP:8010 进行登录了。

无法连接服务器

1、安装过程检查是否有报错

2、检查运营商是否开放 25 端口出站方向

  • 25 端口是邮局通信的固定端口,不能更换成其他端口,465 端口只用登录(465 端口不是用于发送邮件,只用于登录,将邮件数据加密传送到本地服务器,最后本地服务器将会链接对方邮局的 25 端口,进行邮件发送,基本所有的邮局,都只用于 25 端口来接收邮件)

  • 如果你的 25 端口出站方向被屏蔽了,那么你就不能发送邮件到外面的邮局。

  • 但你可以使用 465 端口登录第三方服务器的邮局

首先在服务器执行以下命令测试你的端口是否正常,注意(是在你搭建邮局的服务器执行)

以下命令不需修改,复制执行即可

yum install xinetd telnet telnet-server -y
telnet smtp.qq.com 25 

正常情况下:

出于安全考虑,阿里云、腾讯云默认封禁 TCP 25 端口出方向的访问流量,即你无法在阿里云上的云服务器通过 TCP 25 端口连接外部地址,需要去云服器商申请开通 25 访问 详情

0x06降低内存占用

#查看内存占比命令
free -m

命令执行

#安装vim
yum install vim -y
#修改文件(修改前请备份文件)
vim /etc/amavisd/amavisd.conf
输入 :set number 回车显示行号
输入 i 回车可以编辑修改
找到大概在383行左右,将图片以下的4行前面加上#符号

在文件尾部加上该行参数

@bypass_virus_checks_maps= (1);

最后按下 esc 键,输入:wq 保存

修改文件(参考上面的例子操作命令修改)
vim /usr/lib/systemd/system/amavisd.service
在 Wants=clamd@amavisd.service 前面加上#符号
保存文件

修改后

输入以下命令即可完成杀毒软件的关闭

systemctl daemon-reload
systemctl stop clamd@amavisd
systemctl disable clamd@amavisd
systemctl restart amavisd

0x07数据备份与还原

EwoMail 主要目录在/ewomail,相关的数据与文件都存放在该目录。

数据备份

备份 ewomail 数据库,相关数据库备份操作可百度 MySQL 数据库操作

备份目录/ewomail/mail

数据还原

无论你在原有 EwoMail 或新安装的 EwoMail,都可以还原。

将备份的数据库覆盖 MySQL 的 ewomail 数据库

将备份的目录/ewomail/mail,覆盖回去。

执行下面的命令

chown -R vmail:vmail /ewomail/mail
systemctl restart dovecot

apache/nginx

1.05 版本开始

nginx

默认绑定 80 端口,需手动启动。

可以利用 nginx 配置 php-fpm 或 apache,php-fpm 默认端口 9000,需手动启动。

配置目录:/ewomail/nginx

启动命令:

service nginx start

php-fpm 启动命令:

service php-fpm start

apache

取消 apache 的 80 端口,管理邮箱后台与 webmail 保留原来的端口。

配置目录:/ewomail/apache

启动命令:

service httpd start

数据管理

为了安全,可以关闭或更换端口

登录后 ewomail 为邮箱的数据库

数据库表说明:

说明

i_admin

是否管理员

i_admin_log

操作日志

i_admin_menu

角色表

i_domains

邮箱域名

i_mail_config

邮箱系统配置

i_quota

邮箱账号

i_system_config

系统配置

i_users

邮箱账号密码

忘记密码

管理员默认账号:admin

默认密码:ewomail123

忘记管理员

如果忘记管理员密码,需要进入数据库修改。

查看数据库密码

进入服务器执行命令:cat /ewomail/config.ini 红色部分为 MySQL root 的密码

http://服务器 IP:8020 phpmyadmin 页面

打开 ewomail 数据库,找到 i_admin 表,password 栏目为密码,使用 MD5 解密工具解密可查看密码,然后使用账号和密码登录即可。

0x08重装与卸载

1、重装需要重新安装系统,然后按照教程来安装。

2、卸载,因为依赖的组件比较多,所以卸载后再安装会有相关冲突,所以不能再次重装。

更多配置请查看官方文档:

http://doc.ewomail.com

最后更新于