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

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

如今我作的是:
Linux + httpd + php + mariadb + postfix + dovecot + phpMyAdmin + postfixadmin + roundcubemailphp

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

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

再整理好须要的软件以后。 咱们开始搭建邮件服务。linux

关闭selinux

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

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

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

修改yum源sql

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环境apache

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

初始化数据库:vim

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 再安装的时候就已经使开机自启动的了。无需再次配置
相关文章
相关标签/搜索