自选组件搭建邮件服务器 CentOS
环境 CentOS 7
组件 Postfix
Dovecot
MySQL 5.7
OpenDKIM
Nginx
PHP
Roundcube WebMail
Policyd
安装 MySQL 从mysql 下载离线包
1 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar
解压包
1 tar -zxvf mysql-5.7.xx.rpm-bundle.tar
包的作用
mysql-community-client(客户端程序和工具) mysql-community-server( 服务器程序和工具) mysql-community-libs(LIB库) mysql-community-libs-compat( LIB共享兼容库) mysql-community-common(*公共文件) mysql-community-devel(开发MySQL必备的头文件和库) mysql-community-embedded(嵌入式库) mysql-community-embedded-compat(嵌入式共享兼容库) mysql-community-embedded-dev(嵌入式开发库) mysql-community-test(测试套件)
安装需要的包
1 yum install mysql-community-{server,client,common,libs}-*
安装生成文件
启动
设置root密码
SET PASSWORD FOR ‘root‘@’localhost’ = PASSWORD(‘123’);
SHOW VARIABLES LIKE ‘validate_password%’;
validate_password_dictionary_file 插件用于验证密码强度的字典文件路径。
validate_password_length 密码最小长度,参数默认为8,它有最小值的限制,最小值为:validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)
validate_password_mixed_case_count 密码至少要包含的小写字母个数和大写字母个数。
validate_password_number_count 密码至少要包含的数字个数。
validate_password_policy 密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。有以下取值: Policy Tests Performed 0 or LOW Length 1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters 2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file 默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
validate_password_special_char_count
密码至少要包含的特殊字符数。
set global validate_password_policy=0;
set global validate_password_mixed_case_count=0;
set global validate_password_number_count=3;
set global validate_password_special_char_count=0;
set global validate_password_length=3;
创建虚拟数据 创建用户
1 CREATE USER 'mail_sys'@'localhost' IDENTIFIED BY 'mail_sys';
创建数据库
1 CREATE DATABASE mail_sys;
授权
1 GRANT SELECT ON mail_sys.* TO 'mail_sys'@'localhost' IDENTIFIED BY 'mail_sys';
刷新权限
切换数据库
域名表
1 CREATE TABLE `domains` ( `id` int(20) NOT NULL auto_increment, `name` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
用户表
1 CREATE TABLE `users` ( `id` int(20) NOT NULL auto_increment, `domain_id` int(20) NOT NULL, `password` varchar(200) NOT NULL, `email` varchar(200) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
别名表
1 CREATE TABLE `aliases` ( `id` int(20) NOT NULL auto_increment, `domain_id` int(20) NOT NULL, `source` varchar(200) NOT NULL, `destination` varchar(200) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
添加域名
1 2 INSERT INTO `mail_sys`.`domains` (`id` ,`name`) VALUES (1, 'example.com');
添加用户
1 2 3 4 5 INSERT INTO `mail_sys`.`users` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('123qwe', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'admin@example.com'), ('2', '1', ENCRYPT('123qwe', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user1@example.com'), ('3', '1', ENCRYPT('123qwe', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user2@example.com');
添加别名
1 2 3 4 5 INSERT INTO `mail_sys`.`aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', 'admin1@example.com', 'admin@example.com'), ('2', '1', 'user11@example.com', 'user1@example.com'), ('3', '1', 'user22@example.com', 'user2@example.com');
检查数据库
1 SELECT * FROM mail_sys.domains;
1 SELECT * FROM mail_sys.users;
1 SELECT * FROM mail_sys.aliases;
邮件系统专用用户
所有的邮件用户都映射到系统的同一个真实的用户上。
不建议直接使用系统自带的 mail 账户。
创建专用组
1 groupadd -g 2000 mail_sys
创建专用用户
1 useradd -g mail_sys -u 2000 mail_sys -d /var/spool/mail -s /sbin/nologin
修改邮件目录所有者
1 chown -R mail_sys:mail_sys /var/spool/mail
生成数字签名 私钥
1 2 openssl genrsa -des3 -out privkey.pem 2048
自签证书
1 2 openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
Postfix 安装
备份原版配置文件 1 2 cp -r /etc/postfix /etc/postfix.bak
修改 main.cf 该文件配置 Postfix 的全局参数。
1 2 cat > /etc/postfix/main.cf << EOF
请按实际情况以及注释提示修改以下内容 ,完成去除 # 号和后面的注释,然后粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 myhostname = example.com alias_maps = hash :/etc/aliases alias_database = hash :/etc/aliases myorigin = /etc/mailname mydestination = localhost relayhost = mynetworks = 127.0.0.0/8 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all smtpd_banner = $myhostname ESMTP $mail_name biff = no append_dot_mydomain = no readme_directory = no smtpd_tls_cert_file=/etc/pki/tls/certs/cert.pem smtpd_tls_key_file=/etc/pki/tls/certs/key.pem smtpd_use_tls=yes smtpd_tls_auth_only = no smtpd_tls_security_level = may smtp_tls_security_level = may virtual_transport = lmtp:unix:private/dovecot-lmtp smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes virtual_mailbox_domains = mysql:/etc/postfix/mysql_mailbox_domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox_maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql_alias_maps.cf, mysql:/etc/postfix/mysql_email2email.cf smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination virtual_uid_maps = static:2000 virtual_gid_maps = static:2000 message_size_limit = 102400000 EOF
修改 master.cf 该文件配置 Postfix 中各模块的参数。
1 2 cat > /etc/postfix/master.cf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 smtp inet n - n - - smtpd submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=no -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING pickup unix n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr unix n - n 300 1 qmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - n - - smtp relay unix - - n - - smtp -o smtp_helo_timeout=120 -o smtp_connect_timeout=120 showq unix n - n - - showq error unix - - n - - error retry unix - - n - - error discard unix - - n - - discardlocal unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache EOF
与 MySQL 对接 指定域名数据表
1 2 cat > /etc/postfix/mysql_mailbox_domains.cf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 user = mail_sys password = mail_sys hosts = localhost dbname = mail_sys query = SELECT 1 FROM domains WHERE name='%s' EOF
指定用户数据表
1 2 cat > /etc/postfix/mysql_mailbox_maps.cf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 user = mail_sys password = mail_sys hosts = localhost dbname = mail_sys query = SELECT 1 FROM users WHERE email='%s' EOF
指定别名数据表
1 2 cat > /etc/postfix/mysql_alias_maps.cf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 user = mail_sys password = mail_sys hosts = localhost dbname = mail_sys query = SELECT destination FROM aliases WHERE source ='%s' EOF
指定用户收件目标数据表
(这个有点懵,Linode 上面的教程要求添加这个,懂的大神麻烦解释下)
1 2 cat > /etc/postfix/mysql_email2email.cf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 user = mail_sys password = mail_sys hosts = localhost dbname = mail_sys query = SELECT email FROM users WHERE email='%s' EOF
测试数据库读取 启动 Postfix 服务
1 2 systemctl start postfix
测试域名数据表的读取
下面的 example.com 请替换为自己设定的域名。
1 2 postmap -q example.com mysql:/etc/postfix/mysql_mailbox_domains.cf
若返回 1 ,则说明设置正确。
测试用户名数据表的读取
下面的 user1@example.com 请替换为自己设定的用户名其中一个。
1 2 postmap -q user1@example.com mysql:/etc/postfix/mysql_mailbox_maps.cf
若返回 1 ,则说明设置正确。
测试别名数据表的读取(可选)
下面的 user11@example.com 请替换为自己设定的别名其中一个。
1 2 postmap -q user11@example.com mysql:/etc/postfix/mysql_alias_maps.cf
若返回别名所对应的真实用户名 ,则说明设置正确。
停止 Postfix 服务
等全部配置完成后再启动。
日志
Dovecot 安装 卸载 sendmail
安装 Dovecot
注意:CentOS 6 需要安装 managesieve
1 2 yum install dovecot-pigeonhole
备份原版配置文件 1 2 cp -r /etc/dovecot /etc/dovecot.bak
修改 dovecot.conf
说明 • 该文件配置 Dovecot 的全局参数。
1 2 cat > /etc/dovecot/dovecot.conf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 protocols = imap lmtp dict { } !include conf.d/*.conf !include_try local.conf EOF
修改 conf.d/10-mail.conf
说明 • 该文件配置邮箱文件存储的位置和命名空间。
1 2 cat > /etc/dovecot/conf.d/10-mail.conf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 8 9 namespace inbox { inbox = yes } first_valid_uid = 1000 mbox_write_locks = fcntl mail_location = maildir:/var/spool/mail/%d/%n mail_privileged_group = mail EOF
修改 conf.d/15-mailboxes.conf
说明 • 该文件配置邮箱内部的目录结构。
1 2 cat > /etc/dovecot/conf.d/15-mailboxes.conf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 namespace inbox { mailbox Drafts { auto = create special_use = \Drafts } mailbox Trash { auto = create special_use = \Trash } mailbox Sent { auto = create special_use = \Sent } } EOF
注意
dovecot2.3以下放入空内容就好
1 2 3 4 namespace inbox { } EOF
修改 conf.d/10-auth.conf
说明 • 该文件配置用户身份认证流程。
1 2 cat > /etc/dovecot/conf.d/10-auth.conf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 auth_mechanisms = plain login !include auth-sql.conf.ext EOF
修改 conf.d/auth-sql.conf.ext
说明 • 该文件配置数据库认证的参数。
1 2 cat > /etc/dovecot/conf.d/auth-sql.conf.ext << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 8 9 10 passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=mail_sys gid=mail_sys home=/var/spool/mail/%d/%n } EOF
修改 dovecot-sql.conf.ext
说明 • 该文件配置验证用户名密码所用的数据表以及认证方法。
1 2 cat > /etc/dovecot/dovecot-sql.conf.ext << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 driver = mysql connect = host=localhost dbname=mail_sys user=mail_sys password=mail_sys default_pass_scheme = SHA512-CRYPT password_query = SELECT email as user, password FROM users WHERE email='%u' ; EOF
修改 conf.d/10-ssl.conf
说明 • 该文件配置 SSL 加密参数。
1 2 cat > /etc/dovecot/conf.d/10-ssl.conf << EOF
请按实际情况以及注释提示修改以下内容 ,完成去除 # 号和后面的注释,然后粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 8 ssl = required ssl_cert = </etc/pki/tls/certs/cert.pem ssl_key = </etc/pki/tls/certs/key.pem ssl_protocols = !SSLv3 ssl_cipher_list = ALL:!LOW:!SSLv3:!EXP:!aNULL ssl_prefer_server_ciphers = no EOF
修改 conf.d/10-master.conf
说明 • 该文件配置 Dovecot 中各服务的参数。
1 2 cat > /etc/dovecot/conf.d/10-master.conf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } } service imap { } service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = mail_sys } user = dovecot } service auth-worker { user = mail_sys } service dict { unix_listener dict { mode = 0660 user = mail group = mail } } EOF
日志
配置 OpenDKIM 安装
修改 OpenDKIM 配置文件 1 2 cat > /etc/opendkim.conf << EOF
请按实际情况以及注释提示修改以下内容 ,完成去除 # 号和后面的注释,然后粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 7 8 9 10 Syslog yes UMask 002 OversignHeaders From Socket inet:8891@127.0.0.1 Domain example.com KeyFile /etc/opendkim/keys/mail.private Selector mail RequireSafeKeys no EOF
生成私钥 下面的 example.com 请替换成您的域名。
1 2 opendkim-genkey -D /etc/opendkim/keys/ -d example.com -s mail && chown -R opendkim:opendkim /etc/opendkim/keys/
配置 Postfix 的 main.cf 配置发件增加 DKIM 签名。
1 2 cat >> /etc/postfix/main.cf << EOF
以下内容直接粘贴到命令行窗口中按回车即可。
1 2 3 4 5 6 milter_protocol = 2 milter_default_action = accept smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891 EOF
启动所有服务 CentOS 7
1 2 systemctl start postfix dovecot opendkim
CentOS 6
1 2 3 4 service postfix start service dovecot start service opendkim start
如需开机启动,请执行以下命令。
CentOS 7
1 2 systemctl enable postfix dovecot opendkim mariadb
CentOS 6
1 2 3 4 5 chkconfig postfix on chkconfig dovecot on chkconfig opendkim on chkconfig mariadb on
配置域名参数 A 记录的设定 在域名控制面板中添加一条记录,主机记录 填 @ ,记录类型 选 A 记录值 填 1.1.1.1 ,其他保持默认,保存即可。
MX 记录的设定 在域名控制面板中添加一条记录,主机记录 填 @ ,记录类型 选 MX ,记录值 填 http://mail.example.com ,其他保持默认; 再添加一条记录,主机记录 填 mail ,记录类型 选 A ,记录值 填 1.1.1.1 ,其他保持默认,保存即可。
SPF 记录的设定 在域名控制面板中添加一条记录,主机记录 填 @ ,记录类型 选 TXT ,记录值 填 v=spf1 mx -all ,其他保持默认,保存即可。
DMARC 记录的设定 在域名控制面板中添加一条记录,主机记录 填 _dmarc ,记录类型 选 TXT ,记录值 填 v=DMARC1; p=none ,其他保持默认,保存即可。
DKIM 记录的设定 (以我的密钥文件为例) 执行以下命令
1 2 cat /etc/opendkim/keys/mail.txt
会出现以下结果
1 2 3 mail._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDU5nkxbS36hOa2FCJqotvahTbxb83CvLt5XqV4WAPzJQmfaA1eHyvOz9XiZgE8vWRgP2jJFlL+J4yEroB3YV/8EBjAM8lFTi31DVgRsoHMwH6f3GuLAfcuVofymDfRxHxPzIlm7rgzfWwrGcPrIzt64NLuZG4yusTWp8MTfWZxvQIDAQAB" ) ; ----- DKIM key default for example.com
把括号内的值复制出来,去掉所有引号并整理成一行,形如:
1 2 v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDU5nkxbS36hOa2FCJqotvahTbxb83CvLt5XqV4WAPzJQmfaA1eHyvOz9XiZgE8vWRgP2jJFlL+J4yEroB3YV/8EBjAM8lFTi31DVgRsoHMwH6f3GuLAfcuVofymDfRxHxPzIlm7rgzfWwrGcPrIzt64NLuZG4yusTWp8MTfWZxvQIDAQAB
在域名控制面板中添加一条记录,主机记录 填 mail._domainkey ,记录类型 选 TXT ,记录值 填 v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDU5nkxbS36hOa2FCJqotvahTbxb83CvLt5XqV4WAPzJQmfaA1eHyvOz9XiZgE8vWRgP2jJFlL+J4yEroB3YV/8EBjAM8lFTi31DVgRsoHMwH6f3GuLAfcuVofymDfRxHxPzIlm7rgzfWwrGcPrIzt64NLuZG4yusTWp8MTfWZxvQIDAQAB ,其他保持默认,保存即可。
最终效果如图
IP 反向解析的设定 这个……普通家庭宽带用户就别想了,企业宽带和国内云主机用户需要网站通过备案才能设置。如果用国外云主机的话,有些可以支持。为您的域名配置 IP 地址反向解析可以大幅降低外发邮件被拒收的几率。
过滤沟通 Amavisd-new 安装并配置病毒扫描与垃圾邮件过滤
病毒扫描 ClamAV 垃圾邮件过滤 SpamAssassin Policyd 白名单 官网 下载
1 2 wget https://download.policyd.org/v2.0.14/cluebringer-v2.0.14.tar.gz
解压
1 2 tar -zxvf cluebringer-v2.0.14.tar.gz
整合初始化 sql
1 2 cd ./cluebringer-v2.0.14/database
执行shell
1 2 3 4 5 for i in core.tsql access_control.tsql quotas.tsql amavis.tsql checkhelo.tsql checkspf.tsql greylisting.tsql do ./convert-tsql mysql $i done > policyd.sql
使用 vim 替换错误 SQL 语法
1 2 %s/TYPE=InnoDB/ENGINE=InnoDB/g
建库
1 2 mysql -u root -p -e 'CREATE DATABASE policyd'
初始化数据库
1 2 mysql -u root -p policyd < policyd.sql
复制文件 cbp/ & awitpt/
1 2 mkdir /usr/local/lib/cbpolicyd-2.0
1 2 3 cp -r cbp /usr/local/lib/cbpolicyd-2.0/cp -r awitpt/awitpt /usr/local/lib/cbpolicyd-2.0/
复制文件 cbpolicyd 和 cbpadmin
1 2 3 cp cbpadmin /usr/local/bin/cp cbpolicyd /usr/local/sbin/
设置系统目录
1 2 3 mkdir /var/log/cbpolicydmkdir /var/run/cbpolicyd
在 /etc/postfix/main.cf 中配置
1 2 3 smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1 :10031 ,permit_mynetworks,...,...
日志 Awstats 防爆 fail2ban 安装
添加过滤配置 /etc/fail2ban/filter.d/dovecot-pop3imap.conf
1 2 3 [Definition ] failregex = (?: pop3-login|imap -login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed|Aborted login \(\d+ authentication attempts).*rip=`<HOST>`
添加配置 /etc/fail2ban/jail.conf
1 2 3 4 5 6 7 8 9 [dovecot-pop3imap] enabled = true filter = dovecot-pop3imapaction = iptables-multiport[name=dovecot-pop3imap, port="pop3,imap" , protocol=tcp]logpath = /var/log/maillogmaxretry = 20 findtime = 1200 bantime = 1200
运行服务 启动
1 2 3 4 service fail2ban start systemctl start fail2ban
自启
1 2 3 4 chkconfig fail2ban on systemctl enable fail2ban
配置 Web 邮箱 安装 Nginx、PHP Nginx
PHP
检查当前版本
1 2 yum list installed | grep php
确保可以卸载旧版本
添加第三方yum源
CentOs 5.x
1 2 rpm -Uvh <http://mirror.webtatic.com/yum/el5/latest.rpm
CentOs 6.x
1 2 rpm -Uvh <http://mirror.webtatic.com/yum/el6/latest.rpm
CentOs 7.X
1 2 3 rpm -Uvh <https://mirror.webtatic.com/yum/el7/epel-release.rpm> rpm -Uvh <https://mirror.webtatic.com/yum/el7/webtatic-release.rpm>
安装php及其组件
1 2 yum install php56w-mysql php56w-fpm php56w-xml php56w-mbstring
1 2 yum install -y php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64 php70w-fpm.x86_64 php70w-xml.x86_64
下载并安装 Roundcube 下载
1 2 wget https://github.com/roundcube/roundcubemail/releases/download/1.3.0/roundcubemail-1.3.0-complete.tar.gz
解压 & 安装
1 2 tar -xf roundcubemail-1.3.0-complete.tar.gz && mv roundcubemail-1.3.0 /usr/share/roundcube && chown -R apache:apache /usr/share/roundcube
配置 Nginx 、PHP 配置 Nginx
1 2 vim /etc/nginx/conf.d/mail.conf
请按实际情况以及注释提示修改以下内容 ,在命令行窗口按下 i ,将内容直接粘贴到命令行窗口中,再按下 ESC ,最后输入 :wq 按回车。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 server { listen 80 ; server_name mail.example.com; return 301 https://$server_name $request_uri ; }server { listen 443 ssl http2; server_name mail.example.com; ssl_certificate "/etc/pki/tls/certs/cert.pem" ; ssl_certificate_key "/etc/pki/tls/certs/key.pem" ; add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" ; location / { root /usr/share/roundcube; index index.php; } location ~ .php$ { root /usr/share/roundcube; fastcgi_pass 127.0.0.1:9000 ; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ; include fastcgi_params; } }
配置 PHP
设置时区
1 2 echo "date.timezone = Asia/Shanghai" >> /etc/php.ini
创建会话文件夹
1 2 mkdir /var/lib/php/session && chown apache:apache /var/lib/php/session
配置数据库 进入 MySQL 命令行界面
1 2 3 4 mysql -u root -p Enter password: #输入密码按回车
创建一个用户用于读写 Roundcube 数据库
1 2 CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'roundcube';
创建 Roundcube 数据库
1 2 CREATE DATABASE roundcube;
为用户授予读写权限
1 2 GRANT ALL ON roundcube.* TO 'roundcube'@'localhost' IDENTIFIED BY 'roundcube';
刷新权限表
数据库设置完成
启动服务 CentOS 6
1 2 3 service nginx start service php-fpm start
CentOS 7
1 2 systemctl start nginx php-fpm
如需开机启动,请执行以下命令。
CentOS 6
1 2 3 chkconfig nginx on chkconfig php-fpm on
CentOS 7
1 2 systemctl enable nginx php-fpm
配置 Roundcube 打开浏览器,输入 https://mail.example.com/installer/?_step=1 ,回车打开。然后按图片提示进行配置。
配置完成后,关闭浏览器页面。执行以下命令来使安装程序不可用。
1 2 chmod -R 000 /usr/share/roundcube/installer/
登录测试 打开浏览器,输入 https://mail.example.com ,然后输入您的用户名密码登录,测试收发邮件
日志 1 2 /usr/ share/roundcube/ logs/*
测试工具 打开浏览器,输入 http://www.mail-tester.com ,回车打开。发一封邮件到它指定的邮箱里。然后过一分钟左右查看下结果,重点检查 SPF 记录、DMARC 记录和 DKIM 签名是不是有效的。
参考 在 CentOS 7 上搭建属于自己的 “完美” 邮件系统