默认分类 42 0

    Ctenos7邮箱服务器搭建

    使用mysql+PHP+nginx环境,搭建Postfix+Dovecot+Postfixadmin邮箱服务器

    **列表清单

    • DNS服务器(使用项目二)
    • 数据库服务器(使用项目二)
    • 邮箱服务器 (全新创建)
    • 安装桌面程序 (Foxmail)))

    **首先DNS服务器配置域名
    named配置文件声明

    
    vi /etc/named.rfc1912.zones
    
    //添加
    zone "mailcomd.cn" IN { 
        type master; 
        file "mail.com.zone"; 
        allow-update { none; }; 
    };

    **复制基本模板改名为mail.forward并编辑

    $TTL 3H 
    @    IN SOA    mailcomd.cn. rname.invalid. (  
                        0    ; serial  
                        1D    ; refresh  
                        1H    ; retry  
                        1W    ; expire  
                        3H )    ; minimum  
    @    IN NS    ns.mailcomd.cn.  
      
    @    IN MX 10    mail.mailcomd.cn.  
      
    www     IN A    192.168.6.200  
    ns      IN A    192.168.6.200  
    mail    IN A    192.168.6.200  
    pop3    IN A    192.168.6.200  
    imap4   IN A    192.168.6.200  
    root    IN A    192.168.6.200  

    **重启dns服务

    systemctl restart named

    检查各个域名是否正常解析

    nslookup www.mailcomd.cn
    ==域名服务器部署完工==

    _

    **配置关于postfix数据库(复用项目二工单数据库服务器)

    //连接数据库
    mysql -uroot -p
    //回车输入密码
    
    -- 1. 创建数据库
    CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    
    -- 2. 创建用户,并强制指定使用旧版兼容的密码加密方式 (非常关键)
    CREATE USER 'postfix'@'%' IDENTIFIED WITH mysql_native_password BY 'Postfix@123';
    
    -- 3. 授予权限
    GRANT ALL PRIVILEGES ON postfix.* TO 'postfix'@'%';
    
    -- 4. 刷新权限使其生效
    FLUSH PRIVILEGES;
    
    EXIT;

    **在创建一台邮箱服务器安装Nginx与PHP

    
    yum install -y nginx
    
    # 1. 安装 EPEL 和 yum 扩展工具
    yum install -y epel-release yum-utils
    
    # 2. 安装 Remi 软件源
    yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
    
    # 3. 启用 PHP 7.4 源
    yum-config-manager --enable remi-php74
    
    # 4. 安装 PHP 7.4 及其核心扩展 (注意这里用的是 php-mysqlnd)
    yum install -y php php-fpm php-mysqlnd php-mbstring php-imap
    
    # 5. 启动并设置开机自启
    systemctl start php-fpm
    systemctl start nginx
    systemctl enable php-fpm
    systemctl enable nginx
    

    **关闭SElinux与防火墙放行

    
    sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config && setenforce 0
    
    firewall-cmd --add-port={9000,80,25,110,143}/tcp --permanent 
    firewall-cmd --reload

    **下载并部署 PostfixAdmin 3.3.11

    cd /usr/share/nginx/html
    
    # 下载 3.3.11 稳定版
    wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.11.tar.gz
    
    # 解压并重命名文件夹
    tar -zxvf postfixadmin-3.3.11.tar.gz
    mv postfixadmin-postfixadmin-3.3.11 postfixadmin
    
    # 创建缓存目录(PostfixAdmin 运行必须)
    mkdir -p /usr/share/nginx/html/postfixadmin/templates_c
    
    # 赋予 Nginx 用户权限(假设你的 Nginx 运行用户是 nginx,如果不确定可以执行 ps -ef | grep nginx 看一下)
    chown -R nginx:nginx /usr/share/nginx/html/postfixadmin

    **PostfixAdmin配置数据库连接

    vi /usr/share/nginx/html/postfixadmin/config.local.php
    <?php
    $CONF['configured'] = true;
    $CONF['database_type'] = 'mysqli';
    $CONF['database_host'] = '192.168.6.100';
    $CONF['database_user'] = 'postfix';
    $CONF['database_password'] = 'Postfix@123';
    $CONF['database_name'] = 'postfix';
    $CONF['domain_path'] = 'YES';
    $CONF['domain_in_mailbox'] = 'NO';
    $CONF['encrypt'] = 'md5crypt';
    ?>

    **PostfixAdmin配置nginx

    vi /etc/nginx/conf.d/postfixadmin.conf
    server {
        listen 80;
        server_name www.mailcomd.cn; 
        
        root /usr/share/nginx/html/postfixadmin/public; 
        index index.php index.html;
    
        location / {
            try_files $uri $uri/ /index.php;
        }
    
        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }

    **重载nginx

    
    nginx -t 
    systemctl reload nginx

    接下来在网页上的操作步骤(PostfixAdmin 初始化)

    打开网址

    //域名访问
    http://www.mailcomd.cn/setup.php
    
    //ip访问
    http://192.168.6.200/setup.php

    第一步:生成 Setup Password(安装密码)

    1. 页面最下方有一个 Setup password 输入框。随便输入一个密码(比如 qaz123456),然后点击 Generate password hash
    2. 页面刷新后,上方会出现一行带有哈希值的红字或提示,类似于:

      $CONF['setup_password'] = '248c8b5....:12ab...';

    第二步:将哈希值写入配置文件

    打开邮箱服务器,编辑刚才的本地配置文件:

    Bash

    vi /usr/share/nginx/html/postfixadmin/config.local.php

    将网页上生成的那整行 $CONF['setup_password'] = '...'; 复制粘贴到文件末尾(?> 的上方),保存退出。

    第三步:创建超级管理员账号

    1. 回到浏览器,刷新 setup.php 页面。
    2. 此时页面下方会出现输入密码后添加超级管理员(Superadmin)的表单。
    3. 第一栏 Setup password 填入你刚才设置的明文密码(如 qaz123456)。
    4. 下面填入你要创建的管理员邮箱(比如 admin@mail.com)和对应的登录密码。
    5. 点击添加。

    完成后,你就可以点击页面的登录链接(或访问 http://www.mailcomd.cn/login.php),用刚才创建的管理员账号登录进入 PostfixAdmin 的可视化控制台

    第四步:创建测试账号

    1. 登录账号在顶部导航栏找到 “域名清单” -> “添加域”
    2. 在弹出的表单中:

      • 域: 填入域名不加前缀 mail.com
      • 别名数与邮箱数: 0
      • **其他不动。
    3. 点击“新增”。

    1. 在顶部导航栏找到 “虚拟用户清单” -> “添加邮箱”
    2. 在弹出的表单中:

      • 用户名: 填入 user1(下拉框会自动帮你选上 @mail.com)。
      • 密码: 设置一个好记的测试密码(比如 123456 或者 User@123),并重复确认。
      • 姓名: 随便填(比如“测试用户1”)。
    3. 点击“新增”。
    4. 重复这个步骤,再建一个 user2@mail.com

    创建成功后刷新检查,就意味着你的数据库里已经有了真实的账号密码数据。

    ==Web 界面完成==

    **接下来邮件服务器 安装核心组件

    安装能够处理收发信件的核心底层软件:Postfix(负责发信和转递,MTA)和 Dovecot(负责收信和存储,MRA/MDA)。

    # 安装 Postfix 和 Dovecot,以及 Dovecot 连接 MySQL 所需的依赖模块
    yum install -y postfix dovecot dovecot-mysql

    **第一步:准备邮件存放的专用“仓库”

    真实的邮件是以文件的形式存在硬盘上的。我们需要创建一个专属的系统用户和目录,专门用来存放所有的邮件数据。(虚拟用户映射)既安全又高效。

    # 1. 创建一个名为 vmail 的组(指定 GID 为 5000,方便管理)
    groupadd -g 5000 vmail
    
    # 2. 创建一个名为 vmail 的系统用户,不分配登录权限,专门用于管理邮件
    useradd -u 5000 -g vmail -s /sbin/nologin -d /var/vmail -m vmail
    
    # 3. 确保这个目录的权限完全归 vmail 所有
    chown -R vmail:vmail /var/vmail
    chmod -R 770 /var/vmail

    **第二步:配置 Postfix (发信与收信网关)

    告诉 Postfix,它不再为系统本地用户(比如 root)收发信了,而是要转变为一个虚拟域邮件网关

    1. 修改 Postfix 主配置文件 打开配置文件:

    Bash

    vi /etc/postfix/main.cf

    2. 核心参数修改与添加 你需要在这个文件里找到相应的行进行修改,如果没有的行,就直接添加到文件的最末尾。

    找到并修改以下基础信息:

    # 设置你的主机名和域名
    myhostname = mail.mailcomd.cn
    mydomain = mailcomd.cn
    myorigin = $mydomain
    
    # 监听所有网卡接口
    inet_interfaces = all
    inet_protocols = ipv4
    
    # 非常关键:将本地域名设置为空!因为我们将使用虚拟域名
    mydestination = 
    
    

    然后在文件最末尾,添加虚拟域配置(告诉 Postfix 去连接数据库):

    # --- Virtual Mailbox Settings ---
    virtual_mailbox_base = /var/vmail
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000
    
    # 告诉 Postfix,所有的虚拟域邮件都直接交给 Dovecot 处理,不要自己瞎转圈
    virtual_transport = lmtp:unix:private/dovecot-lmtp
    
    # 告诉 Postfix 用这些配置文件去连 MySQL 查询数据
    virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
    virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

    修改完成后保存退出 (:wq)。

    **第三步:配置 Postfix (编写 MySQL 桥接文件 (核心关键))

    依次创建以下三个文件,并粘贴对应的内容(注意里面的数据库 IP 密码必须精准):

    1. 域名查询文件

    Bash

    vi /etc/postfix/mysql_virtual_domains_maps.cf

    填入以下内容:

    hosts = 192.168.6.100
    user = postfix
    password = Postfix@123
    dbname = postfix
    query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'

    2. 邮箱查询文件

    vi /etc/postfix/mysql_virtual_mailbox_maps.cf

    填入以下内容:

    hosts = 192.168.6.100
    user = postfix
    password = Postfix@123
    dbname = postfix
    query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

    3. 别名查询文件

    Bash

    vi /etc/postfix/mysql_virtual_alias_maps.cf

    填入以下内容:

    hosts = 192.168.6.100
    user = postfix
    password = Postfix@123
    dbname = postfix
    query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

    **Postfix 的重启与自启

    systemctl restart postfix
    systemctl enable postfix

    🟢 连通性测试

    文件建好后,直接用 Postfix 自带的工具测试它能不能连上数据库并查到你刚建的账号。

    在终端执行这个命令(请把你刚在网页上建的真实测试邮箱替换掉下面的 user1@mailcomd.cn

    postmap -q user1@mailcomd.cn mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
    • 成功标志:如果终端返回了类似 mailcomd.cn/user1/ 这样的目录路径,说明 Postfix 已经完美打通了远端数据库!配置成功 MTA(邮件传输代理)已经拥有了鉴别虚拟用户的能力
    • 失败标志:如果什么都没返回,或者报错 can't connect to mysql,则说明密码写错了或 100 服务器的防火墙又拦截了。
    ==Postfix配置完工==

    **最后配置 Dovecot (收信与认证服务)

    Dovecot 承担着两个极其关键的任务:

    1. 收信库管理:让用户可以通过 Foxmail/Outlook (POP3/IMAP) 来把 /var/vmail/ 里的信读走。
    2. 发信保镖 (SASL):当用户要往外网发信时,Postfix 会拜托 Dovecot 去查一下数据库,看看这个发信人的密码对不对(防止服务器变成被黑客利用的垃圾邮件中继站)。

    请在你的邮件服务器上依次修改以下 Dovecot 配置文件:

    1. 开启基础协议

    打开主配置文件:

    Bash

    vi /etc/dovecot/dovecot.conf

    找到 #protocols = imap pop3 lmtp 这一行,去掉前面的 # 注释(如果没找到,直接在文件末尾加上):

    protocols = imap pop3 lmtp

    2. 指定邮件存放仓库

    告诉 Dovecot 去哪里读邮件。

    vi /etc/dovecot/conf.d/10-mail.conf

    找到 mail_location 这一行,将其修改为我们之前建好的 vmail 目录规则,并指定好 UID 和 GID:

    mail_location = maildir:/var/vmail/%d/%n
    mail_uid = 5000
    mail_gid = 5000

    3. 切换认证方式为 MySQL并关闭ssl

    打开 Dovecot 的 SSL 配置文件:

    vi /etc/dovecot/conf.d/10-ssl.conf

    在文件比较靠前的位置(大概第 6 行或第 8 行),找到 ssl = required(或者可能是 ssl = yes)。 把它修改为:

    ssl = no

    (这会告诉 Dovecot:不要强制要求 SSL 证书连接。) 保存退出。

    Dovecot 默认去查 Linux 系统密码,我们需要把它强行扭转去查数据库。

    vi /etc/dovecot/conf.d/10-auth.conf

    在这个文件里,找到并修改以下三处(注意看前面的注释符号 #,该去掉的去掉,该加上的加上,改,该修改的修改):

    # 允许纯文本认证(为了前期测试方便,不强制要求 SSL 加密)
    disable_plaintext_auth = no
    
    # 设置认证机制
    auth_mechanisms = plain login
    
    # 找到包含 system.conf 的这行,在前面加 # 注释掉它 (禁用系统本地认证)
    #!include auth-system.conf.ext
    
    # 找到包含 sql.conf 的这行,去掉前面的 # 开启它 (启用数据库认证)
    !include auth-sql.conf.ext
    

    4. 编写 Dovecot 专属的数据库连接书

    现在我们要告诉 Dovecot 怎么连数据库,以及密码是用什么方式加密的。我们之前在 PostfixAdmin 里配置的是 md5crypt

    vi /etc/dovecot/dovecot-sql.conf.ext

    你可以清空里面的所有内容,直接粘贴以下这段最精简有效的配置(注意数据库 IP 和密码):

    driver = mysql
    connect = host=192.168.6.100 dbname=postfix user=postfix password=Postfix@123
    
    # PostfixAdmin 默认的密码加密方式
    default_pass_scheme = MD5-CRYPT
    
    # 验证密码的 SQL 语句
    password_query = SELECT username AS user, password FROM mailbox WHERE username = '%u' AND active='1'
    
    # 获取用户邮箱目录的 SQL 语句
    user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active='1'

    5. 为 Postfix 开启 SASL 认证通道

    打开 Postfix 主配置文件:

    Bash

    vi /etc/postfix/main.cf

    在文件的最末尾,追加以下几行用来开启发信安全校验的代码:

    # === SMTP Auth (SASL) Settings ===
    # 告诉 Postfix 使用 Dovecot 的认证插件
    smtpd_sasl_type = dovecot
    # 指定认证接口的路径 (相对于 Postfix 运行环境的相对路径)
    smtpd_sasl_path = private/auth
    # 开启发信认证功能
    smtpd_sasl_auth_enable = yes
    
    # 核心安全规则:允许本机发信、允许密码验证通过的人发信、拒绝其他一切代发请求
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

    这是最后一步联动!我们要让 Dovecot 开一个小后门,让 Postfix 能够随时过来问密码。

    vi /etc/dovecot/conf.d/10-master.conf

    在这个文件里搜索 service auth {(大概在 70+行左右)。仔细修改这段大括号里面的内容,修改后应该长这样:

    service auth {
      # 把原本的 unix_listener auth-userdb 注释或保持原样
      
      # 添加下面这块给 Postfix 用的认证通道
      unix_listener /var/spool/postfix/private/auth {
        mode = 0666
        user = postfix
        group = postfix
      }
    }
    
    service lmtp {
      unix_listener /var/spool/postfix/private/dovecot-lmtp {
        mode = 0600
        user = postfix
        group = postfix
      }
    }
    
    

    🟢 重启并检查服务状态

    五个文件修改保存后,直接重启 Dovecot 让配置生效:

    systemctl restart dovecot
    systemctl enable dovecot

    然后执行查看状态命令:

    systemctl status dovecot

    只要看到绿色的 active (running),没有满屏的红色报错,说明我们的邮件认证核心也已经成功启动!


    验收阶段

    📝 具体填写说明:

    • 接收服务器类型:保持 POP3 即可。(如果你想在多台电脑/手机上同步查看邮件,建议下拉选择 IMAP,此时后面的端口会自动变成 143)。
    • 邮件账号:填入你在网页上创建的完整邮箱地址,例如:user1@mailcomd.cn(注意:必须包含 @mailcomd.cn 后缀,不能只填 user1)。
    • 密码:填入你在 PostfixAdmin 里为 user1 设置的那个登录密码。
    • POP 服务器:为了排除测试电脑 DNS 解析延迟的干扰,这里最稳妥的办法是直接填服务器的 IP:192.168.6.200。(如果你确信本地主机的 DNS 或 hosts 已经指向准确,填 mail.mailcomd.cn 也可以)。
    • SMTP 服务器:同样填入:192.168.6.200
    • SSL 勾选框千万不要勾选 SSL! 我们目前搭建的是基础架构,还没有去配置加密证书。
    • 端口:保持默认的 110 (POP3) 和 25 (SMTP) 不要动。
    • STARTTLS:下方那个“如服务器支持,用STARTTLS加密传输”的框,也不要勾选

    全部核对无误后,点击最下方的 “创建” 按钮!


    Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /www/sites/zhanbolg.cn/index/usr/themes/farallon/comments.php on line 4

    Deprecated: stripos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /www/sites/zhanbolg.cn/index/usr/themes/farallon/comments.php on line 4