邮件服务配置(虚拟域&虚拟用户)
邮件服务配置(虚拟域&虚拟用户)
现在我做的是:
linux + httpd + php + mariadb + postfix + dovecot + phpmyadmin + postfixadmin + roundcubemail
这里我将会讲解 如何制作基于 虚拟域和虚拟用户 的邮件服务。需要的软件如下:
- phpmyadmin-3.4.3-all-languages.tar.xz (download:)
- postfixadmin-3.2.tar.gz(download:)
- roundcubemail-1.3.9-complete.tar.gz(download:)
这里我已经整理好了 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
- 配置数据库
- 配置imap
- 设置语言 和 主题
最后点击 create config
然后根据提示将返回内容保存至指定位置
vim /var/www/html/webmail/config/config.inc.php # 编辑这个文件。 然后复制上图的内容即可。
最后回到登入界面。 使用邮件账号登入即可。
用户界面如下, roundcube 还是挺好看。而且挺好用的:
安全配置
上面的所有步骤都已经配置完成了,那么现在就开始安全方便的配置。 比如说这些服务如果是明文传输肯定是会泄露的。所以都需要配置ssl。 然后还需要配置防火墙,禁止连接其余端口。
- 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/
- 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服务
- 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服务
- 配置防火墙
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 # 重载服务。 使其生效
- 取消日志记录
编辑/etc/my.cnf
#log=/var/log/mariadb/access.log # 注释添加的内容
systemctl restart mariadb
- 配置开机自启动
systemctl enable mariadb systemctl enable httpd systemctl enable dovecot systemctl enable named # postfix 再安装的时候就已经使开机自启动的了。无需再次配置
上一篇: 那个灯怎么从来没亮过
下一篇: 客户端笔记——UI