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

本文首发: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】获取授权信息。

邮件服务配置(虚拟域&虚拟用户)的更多相关文章

  1. linux 学习第十八天学习(DNS分离解析、DHCP配置、邮件服务配置)

    DNS分离解析技术 yum install bind-chroot systemctl restart named systemctl enable named vim /etc/named.conf ...

  2. CentOS6 mail邮件服务配置

    mail服务配置 环境: [root@m01 ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [root@m01 ~]# uname -m ...

  3. 工程师技术(二):postfix基础邮件服务、postfix空客户端邮件服务、搭建mariadb数据库系统、配置一个数据库、使用数据库查询

    一.postfix基础邮件服务 目标: 本例要求在虚拟机server0上配置 postfix 基础服务,具体要求如下: 1> 监听本机的所有接口    2> 将邮件域和邮件服务主机名都改为 ...

  4. postfix基础邮件服务

                                                              postfix基础邮件服务  案例1:postfix基础邮件服务 1.1 问题 本例 ...

  5. bitnami-redmine邮件告警配置

    配置 bitnami-redmine的配置文件与单纯的redmine配置文件可能并不相同,在这里我们需要打开一下配置文件: /opt/bitnami/apps/redmine/htdocs/confi ...

  6. 配置postfix支持虚拟域和虚拟用户

    请先看基础篇  https://www.cnblogs.com/hellojackyleon/p/9281620.html https://sourceforge.net/projects/couri ...

  7. Linux中Postfix虚拟用户及虚拟域(六)

    Postfix基于虚拟用户虚拟域的邮件架构 上图是一个几乎完整的邮件系统架构图,这里基于Mysql数据库进行用户认证,不管是Postfix.Dovecot.webmail都需要去Mysql数据库中进行 ...

  8. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...

  9. vsftpd搭建ftp服务,并实现虚拟用户访问

    安装vsftpd服务: yum install vsftpd -y [root@wadeson ~]# rpm -ql vsftpd /etc/logrotate.d/vsftpd /etc/pam. ...

随机推荐

  1. 17 | 精益求精:聊聊提高GUI测试稳定性的关键技术

  2. MySQL性能分析之Explain

    目录 Explain基础 Explain进阶 Explain基础 关于explain命令相信大家并不陌生,具体用法和字段含义可以参考官网explain-output ,这里需要强调rows是核心指标, ...

  3. leadcode的Hot100系列--62. 不同路径--简单的动态规划

    题目比较清晰,简单来说就是: A B C D E F G H I J K L 只能往右或者往下,从A到L,能有几种走法. 这里使用动态规划的方法来做一下. 动态规划最重要的就是动态方程,这里简单说下这 ...

  4. Effective Java - 构造器私有、枚举和单例

    目录 饿汉式单例 静态常量 静态代码块 懒汉式单例 尝试加锁 同步代码块 双重检查 静态内部类单例 枚举单例 Singleton 是指仅仅被实例化一次的类.Singleton代表了无状态的对象像是方法 ...

  5. 用JAVA打印出棱形

    public class Test { public static void main(String[] args) { //输入行数 print(5); } public static void p ...

  6. 网络下载器 Pan Download v2.0.5 Lite 绿色便携版

    下载地址:点我 基本介绍 PanDownload最新版是一款能够快速下载百度网盘内资源的强大工具.PanDownload最新版能够无限速高速下载,满速下载百度云盘里的各种资源.而且PanDownloa ...

  7. MYSQL语句强化练习

    之前发现自己写sql不怎么得心应手,总是百度零零散散的学习一下,所以在空闲的时候自己就专门找一下mysql的强化题敲一下练习一下,简要记录一下,sql写着写着就会越来越熟练,总之要自己加油! 表结构 ...

  8. C语言中的函数与数学上的函数很类似

    函数,是C语言编程中一个很重要的概念,重要到个人认为可以与指针并驾齐驱.好多教材.老师.学习资源都会专门挑出一章来讲函数.我今天也来说说函数,只不过我是从数学课上的函数来引申到C语言中的函数. 先来说 ...

  9. 【UVA - 10006 】Carmichael Numbers (快速幂+素数筛法)

    -->Carmichael Numbers  Descriptions: 题目很长,基本没用,大致题意如下 给定一个数n,n是合数且对于任意的1 < a < n都有a的n次方模n等于 ...

  10. [POJ 2888]Magic Bracelet[Polya Burnside 置换 矩阵]

    也许更好的阅读体验 \(\mathcal{Description}\) 大意:给一条长度为\(n\)的项链,有\(m\)种颜色,另有\(k\)条限制,每条限制为不允许\(x,y\)颜色连在一起.要求有 ...