• 【网络服务&数据库教程】08 邮件服务


    一、邮件概述

    电子邮件服务器是处理邮件交换(收发)的软硬件设施的总称,包括电子邮件程序、电子邮箱等。为用户提供基于E-mail服务的电子邮件系统,人们通过访问服务器实现邮件的交换。

    电子邮件的过程与现实生活的寄邮件和收邮件的过程差不多。都会要经过邮局的转接。而邮局的角色就类似于电子邮件服务器

    常见的邮件服务器

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

    img

    二、邮件应用协议

    SMTP 简单邮件传输协议(发邮件)TCP 25端口,加密时使用TCP 465端口

    POP3 第三版邮局协议(收邮件)TCP 110端口,加密时使用TCP 995端口

    IMAP4 第四版互联网邮件访问协议(收邮件〉TCP 143端口,加密时使用TCP 993端口

    img

    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/

    发送方配置

    参考网站:https://blog.csdn.net/zcyygyl/article/details/120725124

    1 DNS搭建

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

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

    img

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

    #CentOS6版本
    yum install -y gcc* mysql-server mysql httpd mailx
    #CentOS7版本
    yum install -y gcc* mariadb-server mariadb httpd mailx
    
    • 1
    • 2
    • 3
    • 4

    启动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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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 *
    #将两个解压后的目录去掉版本号,并修改文件归属
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    报错:

    若发现数据库版本过高,导入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/
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

    img

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    img

    ~ yum -y install telnet
    ~ telnet mail.extmail.org 25
    mail from: root@extmail.org
    rcpt to:postmaster@extmail.org  
    data
    test...
    .
    quit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    img

    接收方配置

    img

    1 安装 dovecot 相关软件

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

    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
    
    • 1
    • 2
    • 3
    • 4

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

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

    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'
    #查询虚拟用户对应的邮箱目录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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											#查看第一封邮件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    img

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    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密码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    img

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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 $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

    10.0.0.40 mail.extmail.org
    
    • 1

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

    img

    img

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

    img

    登录邮件后台管理系统

    用户名:root@extmail.org

    密码:123456

    img

    img

  • 相关阅读:
    xinput1_3.dll丢失怎么修复win10_有什么好的修复方法推荐?
    The file Structure
    重磅硬核 | 一文聊透对象在 JVM 中的内存布局,以及内存对齐和压缩指针的原理及应用
    4种 Redis 集群方案及优缺点对比
    通话蓝牙耳机什么牌子好?通话工作蓝牙耳机推荐
    [SQL Server]在应使用条件的上下文(在 ‘)‘ 附近)中指定了非布尔类型的表达式,查询时间大于某个数值时
    bugku ctf(web篇2)
    电场与磁场中的物理量
    Java 9 Reactive Streams
    TiDB 集群监控 API
  • 原文地址:https://blog.csdn.net/weixin_40274679/article/details/126800960