• 邮件服务配置(虚拟域&虚拟用户)


    邮件服务配置(虚拟域&虚拟用户)

    本文首发:https://www.somata.net/2019/virtual_mail_server_config_with_mariadb.html

    现在我做的是:
    Linux + httpd + php + mariadb + postfix + dovecot + phpMyAdmin + postfixadmin + roundcubemail

    这里我将会讲解 如何制作基于 虚拟域和虚拟用户 的邮件服务。需要的软件如下:

    这里我已经整理好了 https://pan.baidu.com/s/1TT2EUGRnU2tqaiUwRsPUMQ 提取码:0i6x

    再整理好需要的软件之后。 我们开始搭建邮件服务。

    关闭selinux

    邮件服务有太多的权限要求,为了方便配置, 直接关闭selinux

    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config    # 使用这条命令进行修改
    reboot    # 重启电脑使其生效
    

    配置yum源,然后开始安装软件

    修改yum源

    mkdir /root/back    # 建立备份目录
    mv /etc/yum.repos.d/* /root/back/    # 将默认配置移动到备份目录
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo    # 下载基础yum源
    curl -o /etc/yum.repos.d/CentOS-Epel.repo http://mirrors.aliyun.com/repo/epel-7.repo    # 下载扩展yum源
    yum makecache    # 建立缓存
    

    安装软件

    yum install httpd mod_ssl mariadb mariadb-server php dovecot dovecot-mysql vim wget nc php-xml php-mbstring php-mysql php-mcrypt php-imap php-intl php-ldap php-gd bash-completion bash-completion-extras bind bind-utils
    

    配置LAMP环境,同时装载phpMyAdmin

    启动lamp环境

    systemctl enable httpd
    systemctl enable mariadb
    systemctl start httpd
    systemctl start mariadb
    

    初始化数据库:

    mysql_secure_installation
    


    开启防火墙

    firewall-cmd --add-service=http    # 临时开启防火墙,允许http服务通过
    # 临时防火墙再重启后就会失效。 后面会配置永久生效
    

    上传phpMyAdmin-3.4.3-all-languages.tar.xz, 上传方法 和 过程 省略

    # 切换到上传目录
    tar -xf phpMyAdmin-3.4.3-all-languages.tar.xz    # 解压web程序
    mv phpMyAdmin-3.4.3-all-languages /var/www/html/ # 移动到web
    根目录下
    ln -s phpMyAdmin-3.4.3-all-languages phpMyAdmin    # 创建一个软连接便于访问
    cd phpMyAdmin    # 切换到phpMyAdmin目录
    cp config.sample.inc.php  config.inc.php    # 复制配置文件
    openssl rand -base64 32    # 生成一串随机数, 然后需要导入到配置文件中。 自行复制
    vim config.inc.php    # 编辑配置文件
    


    这样phpMyAdmin 就可以正常访问了

    装载postfixadmin

    同样的先上传postfixadmin。

    # 切换到上传目录
    tar -xf postfixadmin-3.2.tar.gz    # 解压文件
    mv postfixadmin-3.2 /var/www/html/    # 移动到web根目录
    ln -s postfixadmin-3.2/public/ postfixadmin    # 创建软连接便于访问
    

    后面的步骤开始初始化postfixadmin。 如有疑问, 请查看 postfixadmin-3.2/INSTALL.TXT

    创建数据库用户

    通过phpMyAdmin 创建用户


    配置用户信息。然后新建用户。 即可

    通过命令行完成配置

    mysql -uroot -p123456    # mysql 通过客户端配置数据库。 -p 后面直接跟密码
    
    create database postfix;
    GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'postfixadmin';    # 设定权限, 由于没有检测到用户。所以同时创建用户
    FLUSH PRIVILEGES;    # 刷新权限
    

    创建和编辑配置文件

    # 切换到postfixadmin 的根目录
    # cd /var/www/html/postfixadmin-3.2/
    vim config.local.php    # 编辑新建配置文件。 然后输入以下内容
    
    <?php
    $CONF['database_type'] = 'mysqli';
    $CONF['database_user'] = 'postfix';
    $CONF['database_password'] = 'postfixadmin';
    $CONF['database_name'] = 'postfix';
    
    $CONF['configured'] = true;
    ?>
    
    vim config.inc.php    # 编辑第二个配置文件
    

    找到,并修改如下内容

    $CONF['configured'] = true;
    
    $CONF['default_language'] = 'cn';
    
    $CONF['database_type'] = 'mysqli';
    $CONF['database_host'] = 'localhost';
    $CONF['database_user'] = 'postfix';
    $CONF['database_password'] = 'postfixadmin';
    $CONF['database_name'] = 'postfix';
    
    $CONF['admin_email'] = 'root@localhost';
    

    这样就完成了postfix的基础配置

    还有, 需要创建一个缓存目录

    mkdir templates_c    # 创建缓存目录
    chown -R apache:apache templates_c    # 更改属主组
    

    进入postfix配置界面,继续完成配置

    进入setup.php完成配置。

    然后拉到底。 添加以下setup.php的密码

    然后创建管理员用户。

    然后出现如下提示,即为成功:

    然后登入账户。


    新建somata.com域

    创建用户

    创建用户mail1 和 mail2


    提示如下,即为成功

    那么到此为止, postfixadmin 的配置就已经完成了。 后面会开始 postfix 和 dovecot 的服务配置。

    注意: 以上创建域 和 用户 等 其实都是存储在数据库当中,并非真是存在的用户。 所以我们需要通过配置postfix 和 dovecot 通过读取数据库中的信息来完成配置。

    配置DNS服务器

    这里我使用bind 来做DNS服务器。
    DNS 我就不多解释了。直接上配置文件
    配置/etc/named.conf

    options {
            listen-on port 53 { any; };
            directory       "/var/named";
            dump-file       "/var/named/data/cache_dump.db";
            statistics-file "/var/named/data/named_stats.txt";
            memstatistics-file "/var/named/data/named_mem_stats.txt";
            recursing-file  "/var/named/data/named.recursing";
            secroots-file   "/var/named/data/named.secroots";
            allow-query     { any; };
            recursion yes;
            dnssec-enable yes;
            dnssec-validation yes;
            /* Path to ISC DLV key */
            bindkeys-file "/etc/named.iscdlv.key";
            managed-keys-directory "/var/named/dynamic";
            pid-file "/run/named/named.pid";
            session-keyfile "/run/named/session.key";
    };
    zone "." IN {
            type hint;
            file "named.ca";
    };
    zone "somata.com" IN {
            type master;
            file "named.somata.com";
    };
    

    配置/var/named/named.somata.com

    $TTL 1D
    somata.com.     IN SOA  ns.somata.com. root.somata.com. (
                                            2019052701      ; serial
                                            1D      ; refresh
                                            1H      ; retry
                                            1W      ; expire
                                            3H )    ; minimum
            NS      ns.somata.com.
            MX 10   mail.somata.com.
    ns      A       172.16.102.141
    mail    A       172.16.102.141
    www     A       172.16.102.141
    

    启动named

    chgrp named /var/named/named.somata.com
    systemctl restart named
    firewall-cmd --add-service=dns
    

    配置postfix

    postfixadmin中 也介绍了如何配置postfix, 他的介绍在这里DOCUMENTS/POSTFIX_CONF.txt 如果没有看懂我接下来的步骤,可以尝试去看看这个文件

    添加用于读取和写入邮件用的用户:

    groupadd -g 2000 vmail
    useradd -r -u 2000 -g 2000 -d /var/spool/mail/vmail -c "Virtual mail user" vmail
    # 这里还是需要注意。 UID必须超过1000, 我也不知道为什么。
    

    配置/etc/postfix/main.cf

    queue_directory = /var/spool/postfix
    command_directory = /usr/sbin
    daemon_directory = /usr/libexec/postfix
    data_directory = /var/lib/postfix
    mail_owner = postfix
    # 配置主机名等信息
    myhostname = mail.somata.com
    mydomain = somata.com
    myorigin = $mydomain
    # 配置监听端口
    inet_interfaces = all
    inet_protocols = ipv4
    # 配置接受的域列表。 注意这里绝对不能添加与虚拟域相同的域名。否则会导致邮件无法发送。
    mydestination = $myhostname, localhost.$mydomain, localhost
    unknown_local_recipient_reject_code = 550
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    home_mailbox = Maildir/
    smtpd_banner = $myhostname ESMTP $mail_name
    debug_peer_level = 2
    debugger_command =
    	 PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
    	 ddd $daemon_directory/$process_name $process_id & sleep 5
    sendmail_path = /usr/sbin/sendmail.postfix
    newaliases_path = /usr/bin/newaliases.postfix
    mailq_path = /usr/bin/mailq.postfix
    setgid_group = postdrop
    html_directory = no
    manpage_directory = /usr/share/man
    sample_directory = /usr/share/doc/postfix-2.10.1/samples
    readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
    # 以下是虚拟用户配置
    # 设置postfix 读取和写入是的uid 和 gid
    virtual_gid_maps = static:2000
    virtual_uid_maps = static:2000
    # 虚拟域, 这里配置通过mysql来实现。 这里指定的文件 后面就会创建
    virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
    # 虚拟域中,的别名设置
    virtual_alias_maps =
       proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
       proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
       proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
    # 虚拟域中,用户邮箱设置
    virtual_mailbox_maps =
       proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
       proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
    # 设置基本路径。 上面查询到的邮箱地址是相对的。所以需要设置基本路径来确认邮箱位置。
    virtual_mailbox_base = /var/mail/vmail
    # 以上的这些虚拟化配置其实还可以简化为如下。同样可以使用,但是缺少了别名的功能
    #virtual_gid_maps = static:2000
    #virtual_uid_maps = static:2000
    #virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
    #virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
    #virtual_mailbox_base = /var/mail/vmail
    
    # 用户认证配置。 smtp 可以不用设置用户认证。也能使用
    # 拒绝非正常的客户端
    broken_sasl_auth_clients = yes
    # 启用sasl认证
    smtpd_sasl_auth_enable = yes
    # 配置认证方式为dovecot
    smtpd_sasl_type = dovecot
    # 配置认证套接字的相对路径
    smtpd_sasl_path = private/auth
    # 配置拒绝规则
    smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_unknown_sender_domain
    # permit_mynetworks    允许本地网络发送邮件
    # permit_sasl_authenticated    允许通过认证的用户发送邮件
    # reject_unauth_destination    拒绝不是发往本地的邮件
    # reject_unknown_sender_domain    拒绝未知发件域名
    

    然后我们通过postfixadmin提供的脚本生成以上虚拟域所需要的文件
    切换到postfix的安装目录,执行如下命令
    su nobody -s /bin/bash -c 'bash POSTFIX_CONF.txt'

    然后这里会返回文件路径,我们进入脚本创建的目录,复制到指定目录

    mkdir /etc/postfix/sql
    cp /tmp/postfixadmin-D4SOxG/* /etc/postfix/sql/
    

    配置dovecot

    postfixadmin 也提供了的 dovecot的配置方法:DOCUMENTS/DOVECOT.txt 如果我的配置没有看懂可以选择查看

    先配置第一个文件dovecot.conf

    protocols = pop3 imap    # 开启pop3 和 imap 服务
    listen = *    # 监听ipv4端口
    

    然后配置第二个文件conf.d/10-auth.conf

    disable_plaintext_auth = no    # 设置关闭强制加密认证
    auth_mechanisms = plain login    # 设置认证方法
    #!include auth-system.conf.ext    # 注释使用auth-system的认证方式
    !include auth-sql.conf.ext    # 使用auth-sql的认证方式
    

    配置第三个文件conf.d/10-mail.conf

    mail_location = maildir:/var/mail/vmail/%d/%n    # 设置邮箱格式
    first_valid_uid = 2000    # 设置读取和写入的uid  下面使gid
    first_valid_gid = 2000
    

    配置第三个文件conf.d/10-ssl.conf

    ssl = no    # 取消ssl加密    注释下面内容
    #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
    #ssl_key = </etc/pki/dovecot/private/dovecot.pem
    

    配置第四个文件conf.d/10-master.conf

      unix_listener /var/spool/postfix/private/auth {    # 为postfix 提供认证服务套接字
        mode = 0666    # 设置权限
        user = postfix    # 设置属主
        group = postfix    # 设置属组
      }
    

    配置第五个文件dovecot-sql.conf.ext

    driver = mysql    # 设置驱动为mysql
    default_pass_scheme = MD5-CRYPT    # 设置加密方法为MD5
    connect = host=localhost dbname=postfix user=postfix password=postfixadmin    # 设置连接参数
    password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'    # 设置查询密码的sql语句
    user_query = SELECT CONCAT('/var/mail/vmail/', maildir) AS home, 2000 AS uid, 2000 AS gid, CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active='1'    # 设置查询用户和邮箱的sql语句
    

    测试是否可以使用

    添加临时防火墙

    firewall-cmd --add-service=pop3
    firewall-cmd --add-service=smtp
    firewall-cmd --add-service=dns
    

    配置mariadb 记录 日志, 用于查看是否正常。 如果有问题先看看/var/log/mariadb/access.log 中的查询请求是否正常。

    [mysqld]
    log=/var/log/mariadb/access.log
    
    systemctl restart mariadb
    

    然后我们使用foxmail 来测试 服务是否可用。


    这里我们也可以看到,收到了邮件,完全可以使用了。

    装载webmail

    这里我使用了roundcubemail, 下面是配置步骤。

    tar -xf roundcubemail-1.3.9-complete.tar.gz    # 解压roundcubemail
    mv roundcubemail-1.3.9 /var/www/html/        # 移动
    cd /var/www/html/        # 切换目录
    ln -s roundcubemail-1.3.9 webmail    # 创建一个软连接 方便访问
    

    与 postfix 相同, 进入 phpMyAdmin 或者 命令行。 创建数据库用户

    然后进入安装界面, 这里先确认环境是否可以使用

    然后拉到底,点击next

    到了第二步。 配置 config

    1. 配置数据库
    2. 配置imap
    3. 设置语言 和 主题

      最后点击 CREATE CONFIG

    然后根据提示将返回内容保存至指定位置

    vim /var/www/html/webmail/config/config.inc.php    # 编辑这个文件。 然后复制上图的内容即可。
    


    最后回到登入界面。 使用邮件账号登入即可。

    用户界面如下, roundcube 还是挺好看。而且挺好用的:

    安全配置

    上面的所有步骤都已经配置完成了,那么现在就开始安全方便的配置。 比如说这些服务如果是明文传输肯定是会泄露的。所以都需要配置SSL。 然后还需要配置防火墙,禁止连接其余端口。

    1. httpd 的SSl 配置
      这里我们已经安装了mod_ssl 。 而且mod_ssl 已经为我们提供了默认的配置。 所以我们只需要修改以下使用的密钥即可。

    这里我在自己的服务器上使用openssl做了一个证书服务器。 并且已经为测试主机安装了证书 。 操作步骤就省略了。

    # 创建证书
    openssl genrsa -out private/postfix.pem 2048    # 创建密钥
    openssl req -new -key private/postfix.key -out postfix.csr    # 创建证书申请
    openssl ca -in postfix.csr -out certs/postfix.crt -days 365    # 使用证书服务签发证书
    

    编辑文件/etc/httpd/conf.d/ssl.conf
    主要修改如下2点:

    SSLCertificateFile /etc/pki/tls/certs/postfix.crt
    SSLCertificateKeyFile /etc/pki/tls/private/postfix.key
    

    编辑文件/etc/httpd/conf/httpd.conf

    # URL重定向。 设置自动重定向到www.somata.com
    <VirtualHost *:80>
       RewriteEngine on
       Rewritecond %{HTTPS} !=on
       RewriteRule ^(.*)?$ https://www.somata.com$1 [L,R]
    </VirtualHost>
    # 限制 postfixadmin 和 phpMyAdmin 的访问权限
    <Directory "/var/www/html/postfixadmin-3.2/">
        Order allow,deny
        allow from 172.16.102.188/32
        deny from all
    </Directory>
    <Directory "/var/www/html/phpMyAdmin-3.4.3-all-languages/">
        Order allow,deny
        allow from 172.16.102.188/32
        deny from all
    </Directory>
    <Directory "/var/www/html/postfixadmin/">
        Order allow,deny
        allow from 172.16.102.188/32
        deny from all
    </Directory>
    <Directory "/var/www/html/phpMyAdmin/">
        Order allow,deny
        allow from 172.16.102.188/32
        deny from all
    </Directory>
    
    

    然后移除 几个web程序的初始化 网页

    mv /var/www/html/postfixadmin-3.2/public/setup.php  /tmp/
    mv /var/www/html/roundcubemail-1.3.9/installer/ /tmp/
    mv /var/www/html/phpMyAdmin-3.4.3-all-languages/setup/ /tmp/
    
    1. postfix 配置支持SSL
      编辑/etc/postfix/main.cf
    smtpd_use_tls = yes
    smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.crt
    smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
    

    然后再编辑/etc/postfix/master.cf

    smtps     inet  n       -       n       -       -       smtpd    # 去除这一行的注释即可
    
    systemcl restart postfix    # 重启postfix服务
    
    1. DOVECOT 支持SSL
      编辑/etc/dovecot/conf.d/10-ssl.conf
    ssl = yes
    ssl_cert = </etc/pki/tls/certs/postfix.crt
    ssl_key = </etc/pki/tls/private/postfix.key
    
    systemctl restart dovecot    # 重启dovecot服务
    
    1. 配置防火墙
    firewall-cmd --permanent --add-service=dns
    firewall-cmd --permanent --add-service=http
    firewall-cmd --permanent --add-service=https
    firewall-cmd --permanent --add-service=pop3s
    firewall-cmd --permanent --add-service=smtps
    firewall-cmd --reload    # 重载服务。 使其生效
    
    1. 取消日志记录
      编辑/etc/my.cnf
    #log=/var/log/mariadb/access.log    # 注释添加的内容
    
    systemctl restart mariadb
    
    1. 配置开机自启动
    systemctl enable mariadb
    systemctl enable httpd
    systemctl enable dovecot
    systemctl enable named
    # postfix 再安装的时候就已经使开机自启动的了。无需再次配置
    

    本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【63P7QJPF】获取授权信息。

  • 相关阅读:
    makeObjectsPerformSelector 方法的用法
    UISearchBar控件
    iOS应用崩溃日志分析
    IOS崩溃日志分析
    iOS 中捕获程序崩溃日志
    iOS疯狂详解之imageIO完成渐进加载图片
    iOS中nil,NULL,Nil,NSNull的区别
    IOS 8 UITableView cell lines不能靠左解决方法
    Android小玩意儿-- 从头开发一个正经的MusicPlayer(三)
    Android小玩意儿-- 从头开发一个正经的MusicPlayer(二)
  • 原文地址:https://www.cnblogs.com/somata/p/VirtualMailServerConfig_MariaDB.html
Copyright © 2020-2023  润新知