一、邮件概述

电子邮件服务器是处理邮件交换(收发)的软硬件设施的总称,包括电子邮件程序、电子邮箱等。为用户提供基于E-mail服务的电子邮件系统,人们通过访问服务器实现邮件的交换。
电子邮件的过程与现实生活的寄邮件和收邮件的过程差不多。都会要经过邮局的转接。而邮局的角色就类似于电子邮件服务器
常见的邮件服务器

类型 名称 特点
服务器端 Sendmail 资格最古老,运行稳定,但安全性欠佳
Postfix 采用模块化设计,在投递效率、稳定性、性能及安全性方面表现优秀,与sendmail保持足够的兼容性。
Qmail 采用模块化设计,速度快、执行效率高,配置稍微复杂点
客户端 Outlook 都是用来收邮件的客户端!
foxmail
浏览器

image.png

二、邮件应用协议

SMTP 简单邮件传输协议(发邮件)TCP 25端口,加密时使用TCP 465端口
POP3 第三版邮局协议(收邮件)TCP 110端口,加密时使用TCP 995端口
IMAP4 第四版互联网邮件访问协议(收邮件〉TCP 143端口,加密时使用TCP 993端口
image.png

MUA(Mail User Agent):邮件客户端,功能是向外发送邮件白程序,以及提供用户浏览与编写邮件的功能。 MTA(Mail Transfer Agent):(可以理解为smtpd服务器)帮忙将用户的邮件传递出去或接收进来。进行收发邮件,进行邮件的交换的服务器。 MDA(Mail DeliveryAgent):将接收下来的邮件存放到对应用户邮筒当中的程序。通过分析MTA所收到邮件的表头或内容,来判断此邮件是属于哪个用户,然后决定将此邮件投递给哪个用户的邮筒里。类似于一个分拣过程。 MRA(Mail RetrievalAgent):通过MRA服务器提供的邮政服务协议(POP)来接收自己的邮件

三、软件相关

软件名: Postfix
主目录: /etc/postfix
主配置文件: main.cf

myhostname:邮件服务器主机名 mydomain:邮件域 myorigin:设置允许发信的用户的邮件域 mydestination:设置允许收信的用户的邮件域

四、企业级邮件服务

前提条件:要有一个DNS服务器,将准备好的软件包导入虚拟机

https://www.extmail.cn/ https://mail.extmail.org/

发送方配置

参考网站:

1 DNS搭建

  1. ~ yum install -y bind
  2. ~ vim /etc/named.conf
  3. #修改监听地址和访问控制为any
  4. options {
  5. listen-on port 53 { any; };
  6. allow-query { any; };
  7. }
  8. ~ vim /etc/named.rfc1912.zones
  9. #使用extmail.org作为解析域,只保留正向解析即可
  10. zone "extmail.org" IN {
  11. type master;
  12. file "extmail.localhost";
  13. allow-update { none; };
  14. };
  15. ~ cp -a /var/named/named.localhost /var/named/extmail.localhost
  16. ~ vim /var/named/extmail.localhost
  17. #修改数据文件如下:
  18. $TTL 1D
  19. @ IN SOA extmail.org. rname.invalid. (
  20. 0 ; serial
  21. 1D ; refresh
  22. 1H ; retry
  23. 1W ; expire
  24. 3H ) ; minimum
  25. NS dns.extmail.org.
  26. MX 3 mail.extmail.org.
  27. dns A 10.0.0.40
  28. mail A 10.0.0.40
  29. ~ systemctl enable --now named.service
  30. 或者#CentOS 6
  31. ~ chkconfig --add named && chkconfig named on && chkconfig named --list
  32. ~ service named start
  33. ~ nslookup mail.extmail.org.

在另一台上使用nslookup测试dns是否能解析
image.png

2 安装 gcc 以及其他依赖软件

#CentOS6版本
yum install -y gcc* mysql-server mysql httpd mailx
#CentOS7版本
yum install -y gcc* mariadb-server mariadb httpd mailx

启动MySQL(Apache)并设置开机自启动

service mysqld start && chkconfig mysqld on && chkconfig mysqld --list
service httpd start && chkconfig httpd on && chkconfig httpd --list

systemctl enable --now mysqld 
或者
systemctl enable --now mariadb
systemctl enable --now httpd

3 将 web 页面放到 Apache 的网页目录下

mkdir -p /var/www/extsuite
#创建一个单独的目录
tar -xf extman-1.1.tar.gz -C /var/www/extsuite
tar -xf extmail-1.2.tar.gz -C /var/www/extsuite
#将extmail 和 extman解压到创建的目录中
cd /var/www/extsuite
mv extmail-1.2 extmail
mv extman-1.1 extman
chown -R root.root *
#将两个解压后的目录去掉版本号,并修改文件归属

4 将成品数据库文件导入到 MySQL中(没设置密码,空密码登录)

cd /var/www/extsuite
mysql < ./extman/docs/extmail.sql
#将./extman/docs 中的模板和数据导入到数据库中
vim ./extman/docs/init.sql
INSERT INTO `manager` VALUES ('root@extmail.org' , '123456' , 'admin' , 'root');
#将此文件中该位置的密码修改为123456,切记先修改,在导入
mysql < ./extman/docs/init.sql
#mysql -uroot -p123456 < ./extman/docs/extmail.sql
#mysql -uroot -p123456 < ./extman/docs/init.sql

#或者登录数据库
mysql -uroot -p123456
MariaDB [(none)]> source ./extman/docs/extmail.sql;
MariaDB [(none)]> source ./extman/docs/init.sql;

报错: 若发现数据库版本过高,导入sql文件出现报错,大概率是在sql文件的存储引擎部分,将sql文件的TYPE=MyISAM 改为 ENGINE=MyISAM 即可

5 将邮件模板拷贝到邮件服务器的主目录下

cd /var/www/extsuite/extman/docs
cp -a mysql_virtual_alias_maps.cf mysql_virtual_domains_maps.cf mysql_virtual_mailbox_maps.cf /etc/postfix/

6 创建映射用户 & 修改配置文件

useradd -u 600 -s /sbin/nologin -c 'Mail User' vmail

vim /etc/postfix/main.cf
inet_interfaces = all                    #此行选项取消注释
#inet_interfaces = localhost    #此行选项注释掉
在尾部添加下列内容
#添加指定用户的配置
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:600
virtual_gid_maps = static:600
#添加postfix读取模板文件的配置
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

7 重启服务 & 发送邮件测试 & 查看结果

image.png

service postfix restart && chkconfig postfix on && chkconfig --list postfix
或者 systemctl restart postfix && systemctl enable postfix

echo "test..." | mail -s mail postmaster@extmail.org
cd /home/vmail/extmail.org/postmaster/Maildir/new
cat 1657026300.V802I540016M478211.CentOS6-Server

image.png

~ yum -y install telnet
~ telnet mail.extmail.org 25
mail from: root@extmail.org
rcpt to:postmaster@extmail.org  
data
test...
.
quit

image.png

接收方配置

image.png

1 安装 dovecot 相关软件

#安装dovecot,dovecot-mysql组件是让两者结合
yum install -y dovecot dovecot-mysql dovecot-devel
chkconfig dovecot on && chkconfig dovecot --list
service dovecot start

2 配置 dovecot 能够去数据库里读数据

1)修改 /etc/dovecot/conf.d/10-mail.conf
在配置文件中增加下列两行

~ vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%d/%n/Maildir 
#定义dovecot查询邮件的位置(顶头写)
first_valid_uid = 600

2)修改 /etc/dovecot/conf.d/10-auth.conf

~ vim /etc/dovecot/conf.d/10-auth.conf
!include auth-sql.conf.ext
#取消调用数据库的记录注释

3)修改数据库连接配置文件(需要拷贝模板生成)

# cp -a /usr/share/doc/dovecot-2.0.9/example-config/dovecot-sql.conf.ext /etc/dovecot/ 
vim dovecot-sql.conf.ext
#将下列内容加入配置文件即可
driver = mysql
#驱动类型
connect = host=localhost dbname=extmail user=extmail password=extmail
#连接数据库的信息
default_pass_scheme = MD5 
password_query = \
  SELECT username, domain, password \
  FROM mailbox WHERE username = '%u' AND domain= '%d'
#验证登录密码的查询命令
user_query = SELECT maildir, 600 AS uid, 600 AS gid FROM mailbox WHERE username = '%u'
#查询虚拟用户对应的邮箱目录

3.重启 dovecot 验证是否能够连接

安装telnet 客户端进行登录验证。

yum install -y telnet
service dovecot restart

telnet mail.extmail.org 110
#使用数据里的用户名和密码,证明连接成功
user postmaster@extmail.org #登录postmaster用户
pass extmail                                #密码是extmail
retr 1                                            #查看第一封邮件

image.png

MAIL + WEB 页面

1.修改/etc/httpd/conf/httpd.conf 配置文件,能加载邮件 web 页面

~ vim /etc/httpd/conf/httpd.conf
#确认主配置文件加载的模块配置文件位置
IncludeOptional conf.d/*.conf
#修改ServerName
ServerName localhost:80

NameVirtualHost *:80
#取消注释,开启虚拟主机功能
#添加以下内容
<VirtualHost *:80>
      ServerName mail.extmail.org
      DocumentRoot /var/www/extsuite/extmail/html/
      ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
      Alias /extmail /var/www/extsuite/extmail/html
      ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
      Alias /extman /var/www/extsuite/extman/html
      SuexecUserGroup vmail vmail
</VirtualHost>

~ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jun 19 2018 15:45:13
~ httpd -t
Syntax OK
~ service httpd restart

2. extmail目录中更改 cgi的属组属主,让vmail有权限执行

cd /var/www/extsuite/extmail
chown -R vmail.vmail cgi
cp -a webmail.cf.default webmail.cf
vim webmail.cf
     SYS_MAILDIR_BASE = /home/vmail 
     #- 127 行 邮件存放目录
     SYS_MYSQL_USER = extmail 
     #- 139 行 加密类型
     SYS_MYSQL_PASS = extmail
     #- 140 MySQL用户名
     SYS_CRYPT_TYPE = plain 
     #- 136 行 MySQL密码

image.png

3.extman中更改cgi的属组属主,让 vmail有权限执行

cd /var/www/extsuite/extman
chown -R vmail.vmail cgi
cp -a webman.cf.default webman.cf
vim webman.cf
     SYS_MAILDIR_BASE = /home/vmail 
     #- 12 行
     SYS_SESS_DIR = /tmp/ 
     #- 18 行
     SYS_CRYPT_TYPE = plain 
     #- 124 行
     SYS_CAPTCHA_ON = 0  
     #- 21行,生产环境中开启,实验环境无法现实校验码

service httpd restart
#systemctl restart httpd

4.安装Unix-Syslog 软件

解压缩Unix-Syslog-1.1.tar.gz软件

cd ~/extmail
tar -xf Unix-Syslog-1.1.tar.gz
cd Unix-Syslog-1.1
perl Makefile.PL
make && make install
echo $?

5.在浏览器上访问,windows测试需要手动指向dns服务器

将Windows的hosts文件添加对应的解析即可

10.0.0.40 mail.extmail.org

浏览器地址栏输入:http://mail.extmail.org 显示该页面即完成实验
image.png
image.png

echo "Hello,Extmail" | mail -s "Hello" postmaster@extmail.org

image.png

登录邮件后台管理系统 用户名:root@extmail.org 密码:123456

image.png
image.png