PostFix/Devecot Mail安装配置

文章来源:   作者:何丽花     发布时间:2023-03-01 11:40    浏览量:

PostFix/Devecot Mail安装配置 

操作系统:CentOS 7.3.1611 最⼩安装 (已关闭 SELinux 和防⽕墙) 

应⽤软件: Postfifix 2.10.1 Dovecot 2.2.10 MariaDB 5.5.52 OpenDKIM 2.11.0 Nginx 1.10.2 PHP 5.4.16 Roundcube WebMail 1.3.0 

域名(主机名): example.com 

公⽹ IP: 1.1.1.1 

⼆级域名 mail (这⾥就是 mail.example.com )的数字证书(推荐免费的 Letʼs Encrypt) 

说明 

1、下⽂的 MySQL 均代表 MariaDB; 

2、Nginx 和 PHP 不做详细配置,只确保 Webmail 可以正常使⽤。 

三、原理 & 关系图 下⾯两张图⾜以说明⼀切: 

说明

• SMTP 是 Postfifix 发件的模块,SMTPD 是 Postfifix 收件的模块,请注意区分。 

四、安装软件 

执⾏以下命令:

yum -y update && /

yum -y install epel-release && / 

yum -y update && / 

yum -y install dovecot dovecot-mysql mariadb-server nginx opendkim php-fpm php-mbstring php-mysql php-xml post 

若出现密钥警告,按 y 回车即可。 

五、配置 MySQL 

5.1 初始化 MySQL 

5.1.1 启动服务 

执⾏以下命令: 

systemctl start mariadb 

5.1.2 进⾏安全设置 

执⾏以下命令: 

mysql_secure_installation 

然后根据提⽰操作: 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL       SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY! In order to log into MySQL to secure it, we'll need the current password for the root user.  If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, 

so you should just press enter here. Enter current password for root (enter for none): # 回车即可OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. 

Set root password? [Y/n] y # 使⽤密码验证 

New password: # 设置 root 密码 

Re-enter new password:  

Password updated successfully! 

Reloading privilege tables..  

... Success! 

# 后⾯的问题全部按 y 回车,这⾥省略。 

5.2 邮件系统数据库的创建 

注意

• SQL 语句后⾯要加上分号才能执⾏。 

5.2.1 进⼊ MySQL 命令⾏界⾯ 

执⾏以下命令: 

mysql -u root -p

然后输⼊刚才设置的数据库 Root 密码然后按回车。

出现 MariaDB [(none)]> 指⽰符就说明进⼊了。 

5.2.2 创建⼀个⽤户⽤于读取邮件系统数据库 

执⾏以下 SQL 语句: 

CREATE USER 'mail_sys'@'localhost' IDENTIFIED BY 'mail_sys'; 

5.2.3 创建邮件系统数据库

执⾏以下 SQL 语句: 

CREATE DATABASE mail_sys; 

说明

• 这⾥的“邮件系统数据库”并不存储邮件,只⽤作域名、⽤户、别名的验证。邮件默认是存储 /var/spool/mail ⾥⾯的。

5.2.4 为⽤户授予读取权限 

执⾏以下 SQL 语句: 

GRANT SELECT ON mail_sys.* TO 'mail_sys'@'localhost' IDENTIFIED BY 'mail_sys';

5.2.5 刷新权限 

执⾏以下 SQL 语句: 

FLUSH PRIVILEGES; 

5.2.6 进⼊邮件系统数据库 

执⾏以下 SQL 语句: USE mail_sys;

5.2.7 创建域名表 

执⾏以下 SQL 语句: CREATE TABLE `domains` ( `id` int(20) NOT NULL auto_increment, `name` varchar(100) NOT NULL, PRIMARY KEY (`id`)  

5.2.8 创建⽤户表 

执⾏以下 SQL 语句: CREATE TABLE `users` ( `id` int(20) NOT NULL auto_increment, `domain_id` int(20) NOT NULL, `password` varchar(200 

5.2.9 创建别名表 

执⾏以下 SQL 语句: CREATE TABLE `aliases` ( `id` int(20) NOT NULL auto_increment, `domain_id` int(20) NOT NULL, `source` varchar(200)  

5.3 往邮件系统数据库⾥添加或删除域名、⽤户、别名 

说明 

1、为了⽅便以后添加或删除,下⾯我把 SQL 语句(命令)的格式写出来;

2、索引号从 1 开始依次递增,需⼿动指定;

3、由于密码需要使⽤ SQL 语句进⾏ SHA512 运算来存储散列值,因此图形化数据库管理⼯具可能⽆法实现;

4、当添加多⾏数据时,⾮末⾏的⾏分隔符为逗号,直到末⾏才使⽤分号。 

5.3.1 添加或删除域名 

添加域名 

INSERT INTO `mail_sys`.`domains` (`id` ,`name`)  VALUES ('<域名索引号>', '<域名>'); 例如: MariaDB [mail_sys]> INSERT INTO `mail_sys`.`domains` (`id` ,`name`)      -> VALUES ('1', 'example.com'); 删除域名 DELETE FROM `mail_sys`.`domains` WHERE `id`='<域名索引号>';

5.3.2 添加或删除⽤户 

添加⽤户

INSERT INTO `mail_sys`.`users` (`id`, `domain_id`, `password` , `email`) VALUES ('<⽤户索引号>', '<域名索引号>', ENCRYPT('<密码>', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '<邮箱地址>'), ('<⽤户索引号>', '<域名索引号>', ENCRYPT('<密码>', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '<邮箱地址>'), ('<⽤户索引号>', '<域名索引号>', ENCRYPT('<密码>', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '<邮箱地址>'); 

例如: 

MariaDB [mail_sys]> INSERT INTO `mail_sys`.`users`     -> (`id`, `domain_id`, `password` , `email`) VALUES     -> ('1', '1', ENCRYPT('12345678', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user1@example.com'),     -> ('2', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user2@example.com'),    -> ('3', '1', ENCRYPT('11111111', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user3@example.com'); #以后再继续添加⽤户名的时候,⽤户索引就应该从4开始,下同。 

删除⽤户 DELETE FROM `mail_sys`.`users` WHERE `id`='<⽤户索引号>'; 

5.3.3 添加或删除别名(可选) 

说明 

• 别名的意思就⽐如说:设置 user1@example.com 的别名是 user11@example.com ,那么其他⼈ user11@example.com ⾥发送邮件时,邮件就会到 user1@example.com 的邮箱⾥去。 添加别名 INSERT INTO `mail_sys`.`aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('<别名索引号>', '<域名索引号>', '<别名地址>', '<⽬的地址>'), ('<别名索引号>', '<域名索引号>', '<别名地址>', '<⽬的地址>'), ('<别名索引号>', '<域名索引号>', '<别名地址>', '<⽬的地址>'); 例如: MariaDB [mail_sys]> INSERT INTO `mail_sys`.`aliases`     -> (`id`, `domain_id`, `source`, `destination`) VALUES     -> ('1', '1', 'user11@example.com', 'user1@example.com'),     -> ('2', '1', 'user22@example.com', 'user2@example.com'),     -> ('3', '1', 'user33@example.com', 'user3@example.com'); 

删除别名 

DELETE FROM `mail_sys`.`aliases` WHERE `id`='<别名索引号>';

5.4 检查数据库 

5.4.1 检查域名表 

执⾏以下 SQL 语句: 

SELECT * FROM mail_sys.domains; 若出现以下格式的输出结果,说明设置正确。 +----+-------------+ | id | name        | +----+-------------+ |  1 | example.com | +----+-------------+ 1 row in set (0.00 sec) 

5.4.2 检查⽤户表 

执⾏以下 SQL 语句: S

ELECT * FROM mail_sys.users; 若出现以下格式的输出结果,说明设置正确。 +----+-----------+----------------------------------------------------------------------------------- | id | domain_id | password                                                                                                   | email             | +----+-----------+-----------------------------------------------------------------------------------|  1 |         1 | $6$afbdd821f68a3f27$QH9yDKslGZMNZjzvBBvMtYXzzclbnNgb1AhmB7lqu6fj6PU04QTgCTvcvPwqsAaW6mJt |  2 |         1 | $6$a4f819161bd19901$oeDntXEyiY6RiM369ugKZrMfsK6yeV3CG/fhFF4ruPJImLCyzi2hR/PX8f2nBDBRWiMvW |  3 |         1 | $6$2a85aaab0ec76f64$KRQ2H8Zgn0YjTzDDnfwqim3mZynZ05iPMZ1GQPw7GNuJApcXuLi5LOmR9yDC6Jh2e +----+-----------+----------------------------------------------------------------------------------- 3 rows in set (0.00 sec) 

5.4.3 检查别名表(可选) 

执⾏以下 SQL 语句: 

SELECT * FROM mail_sys.aliases; 若出现以下格式的输出结果,说明设置正确。 +----+-----------+--------------------+-------------------+ | id | domain_id | source             | destination       | +----+-----------+--------------------+-------------------+ |  1 |         1 | user11@example.com | user1@example.com | |  2 |         1 | user22@example.com | user2@example.com | |  3 |         1 | user33@example.com | user3@example.com | +----+-----------+--------------------+-------------------+ 3 rows in set (0.00 sec) 数据库设置完成。按 Ctrl + D 退出 MySQL 命令⾏界⾯。 六、设置邮件系统专⽤⽤户 说明 1、所有的邮件⽤户都映射到系统的同⼀个真实的⽤户上; 2、不建议直接使⽤系统⾃带的 mail 账户。 

6.1 创建邮件系统专⽤组 执⾏以下命令: groupadd -g 2000 mail_sys 

6.2 创建邮件系统专⽤⽤户 执⾏以下命令: useradd -g mail_sys -u 2000 mail_sys -d /var/spool/mail -s /sbin/nologin 

6.3 修改邮件⽬录所有者 执⾏以下命令: chown -R mail_sys:mail_sys /var/spool/mail 

七、配置 Postfifix 

7.1 备份原版配置⽂件 执⾏以下命令: cp -r /etc/postfifix /etc/postfifix.bak 

7.2 修改 main.cf 说明 • 该⽂件配置 Postfifix 的全局参数。执⾏以下命令: cat > /etc/postfifix/main.cf << EOF 请按实际情况以及注释提⽰修改以下内容,完成后去除 # 号和后⾯的注释,然后粘贴到命令⾏窗⼝中按回车即可。 mydomain = example.com # 您的域名,需要修改 myhostname = mail.example.com # 您的域名前⾯加上 mail. 需要修改 mydestination = localhost alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mynetworks = 127.0.0.0/8 mailbox_size_limit = 0 recipient_delimiter = + inet_protocols = all inet_interfaces = all smtp_address_preference = ipv4 smtpd_banner = ESMTP biffff = no append_dot_mydomain = no readme_directory = no 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/postfifix/mysql_mailbox_domains.cf virtual_mailbox_maps = mysql:/etc/postfifix/mysql_mailbox_maps.cf virtual_alias_maps = mysql:/etc/postfifix/mysql_alias_maps.cf smtpd_sender_login_maps = mysql:/etc/postfifix/mysql_mailbox_maps.cf, mysql:/etc/postfifix/mysql_alias_maps.cf disable_vrfy_command = yes strict_rfc821_envelopes = yes smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, reject_sender_login_mismatch smtpd_recipient_restrictions = reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_sasl_authenticated, r virtual_uid_maps = static:2000 virtual_gid_maps = static:2000 message_size_limit = 102400000 smtpd_tls_security_level = may smtp_tls_security_level = may smtpd_tls_cert_fifile=/etc/pki/tls/certs/cert.pem # mail.example.com 证书⽂件位置,需要修改 smtpd_tls_key_fifile=/etc/pki/tls/private/key.pem # mail.example.com 证书私钥⽂件位置,需要修改 smtpd_tls_session_cache_database = btree:/${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:/${data_directory}/smtp_scache smtpd_tls_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3 smtp_tls_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3 smtp_tls_ciphers = high smtpd_tls_ciphers = high smtpd_tls_mandatory_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3 smtp_tls_mandatory_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3 smtp_tls_mandatory_ciphers = high smtpd_tls_mandatory_ciphers = high smtpd_tls_mandatory_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL smtpd_tls_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL smtp_tls_mandatory_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL smtp_tls_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL tls_preempt_cipherlist = yes smtpd_tls_received_header = yes policyd-spf_time_limit = 3600 EOF 

7.3 修改 master.cf 

说明 

• 该⽂件配置 Postfifix 中各模块的参数。 执⾏以下命令: cat > /etc/postfifix/master.cf << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 smtp      inet  n       -       n       -       -       smtpd submission inet n       -       n       -       -       smtpd        -o smtpd_tls_security_level=encryptsmtps     inet  n       -       n       -       -       smtpd        -o smtpd_tls_wrappermode=yes 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 flflush     unix  n       -       n       1000?   0       flflush 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       -       -       discard local     unix  -       n       n       -       -       local virtual   unix  -       n       n       -       -       virtual lmtp      unix  -       -       n       -       -       lmtp anvil     unix  -       -       n       -       1       anvil scache    unix  -       -       n       -       1       scache policyd-spf    unix  -       n       n       -       0       spawn        user=mail_sys argv=/usr/libexec/postfifix/policyd-spf EOF 7.4 MySQL 对接 

7.4.1 指定域名数据表 执⾏以下命令: cat > /etc/postfifix/mysql_mailbox_domains.cf << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 user = mail_sys password = mail_sys hosts = localhost dbname = mail_sys query = SELECT 1 FROM domains WHERE name='%s' EOF 

7.4.2 指定⽤户数据表 执⾏以下命令: cat > /etc/postfifix/mysql_mailbox_maps.cf << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 user = mail_sys password = mail_sys hosts = localhost dbname = mail_sys query = SELECT email FROM users WHERE email='%s' EOF 

7.4.3 指定别名数据表 执⾏以下命令: cat > /etc/postfifix/mysql_alias_maps.cf << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。user = mail_sys password = mail_sys hosts = localhost dbname = mail_sys query = SELECT destination FROM aliases WHERE source='%s' EOF

7.5 测试数据库读取 

7.5.1 启动 Postfifix 服务 执⾏以下命令: systemctl start postfifix

7.5.2 测试域名数据表的读取 下⾯的 example.com 请替换为⾃⼰设定的域名。 执⾏以下命令: postmap -q example.com mysql:/etc/postfifix/mysql_mailbox_domains.cf 若返回 1 ,则说明设置正确。 

7.5.3 测试⽤户数据表的读取 下⾯的 user2@example.com 请替换为⾃⼰设定的⽤户名的其中⼀个。 执⾏以下命令: postmap -q user2@example.com mysql:/etc/postfifix/mysql_mailbox_maps.cf 若返回⽤户名,则说明设置正确。

7.5.4 测试别名数据表的读取(可选) 下⾯的 user11@example.com 请替换为⾃⼰设定的别名其中⼀个。 执⾏以下命令: postmap -q user11@example.com mysql:/etc/postfifix/mysql_alias_maps.cf 若返回别名所对应的真实⽤户名,则说明设置正确。 

7.5.5 停⽌ Postfifix 服务 等全部配置完成后再启动。 

执⾏以下命令: 

systemctl stop postfifix 

⼋、配置 Dovecot 

8.1 备份原版配置⽂件 执⾏以下命令: cp -r /etc/dovecot /etc/dovecot.bak 

8.2 修改 dovecot.conf说明 • 该⽂件配置 Dovecot 的全局参数。 执⾏以下命令: cat > /etc/dovecot/dovecot.conf << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 protocols = imap lmtp dict { } !include conf.d/*.conf !include_try local.conf EOF

8.3 修改 conf.d/10-mail.conf 说明 • 该⽂件配置邮箱⽂件存储的位置和命名空间。 执⾏以下命令: cat > /etc/dovecot/conf.d/10-mail.conf << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 namespace inbox {   inbox = yes } fifirst_valid_uid = 1000 mbox_write_locks = fcntl mail_location = maildir:/var/spool/mail/%d/%n mail_privileged_group = mail EOF 

8.4 修改 conf.d/15-mailboxes.conf 说明 • 该⽂件配置邮箱内部的⽬录结构。 执⾏以下命令: cat > /etc/dovecot/conf.d/15-mailboxes.conf << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 namespace inbox {   mailbox Drafts {     auto = create     special_use = /Drafts   }   mailbox Trash {     auto = create     special_use = /Trash   }   mailbox Sent {     auto = create     special_use = /Sent   } } EOF 8.5 修改 conf.d/10-auth.conf说明 • 该⽂件配置⽤户⾝份认证流程。 执⾏以下命令: cat > /etc/dovecot/conf.d/10-auth.conf << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 auth_mechanisms = plain login !include auth-sql.conf.ext EOF 

8.6 修改 conf.d/auth-sql.conf.ext 说明 • 该⽂件配置数据库认证的参数。 执⾏以下命令: cat > /etc/dovecot/conf.d/auth-sql.conf.ext << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 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 

8.7 修改 dovecot-sql.conf.ext 说明 • 该⽂件配置验证⽤户名密码所⽤的数据表以及认证⽅法。 执⾏以下命令: cat > /etc/dovecot/dovecot-sql.conf.ext << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 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 

8.8 修改 conf.d/10-ssl.conf 

说明

• 该⽂件配置 SSL 加密参数。 执⾏以下命令: cat > /etc/dovecot/conf.d/10-ssl.conf << EOF请按实际情况以及注释提⽰修改以下内容,完成后去除 # 号和后⾯的注释,然后粘贴到命令⾏窗⼝中按回车即可。 ssl = required ssl_cert = </etc/pki/tls/certs/cert.pem # mail.example.com 证书⽂件位置,需要修改 ssl_key = </etc/pki/tls/private/key.pem # mail.example.com 证书私钥⽂件位置,需要修改 ssl_protocols = TLSv1.2 TLSv1.1 !TLSv1 !SSLv2 !SSLv3 ssl_cipher_list = ALL:!MD5:!DES:!ADH:!RC4:!PSD:!SRP:!3DES:!eNULL:!aNULL EOF 

8.9 修改 conf.d/10-master.conf 

说明 

• 该⽂件配置 Dovecot 中各服务的主要参数。 执⾏以下命令: cat > /etc/dovecot/conf.d/10-master.conf << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 service imap-login {   inet_listener imap {     port = 143   }   inet_listener imaps {     port = 993     ssl = yes   } } service lmtp {     unix_listener /var/spool/postfifix/private/dovecot-lmtp {     mode = 0600     user = postfifix     group = postfifix   } } service imap { } service auth {   unix_listener /var/spool/postfifix/private/auth {     mode = 0666     user = postfifix     group = postfifix   }   unix_listener auth-userdb {     mode = 0600     user = mail_sys   }   user = dovecot } service auth-worker {   user = mail_sys } EOF

8.10 修改 conf.d/15-lda.conf 

说明 

1、该⽂件配置特定域的 postmaster 邮箱; 

2、我⾃⼰没有修改这个配置⽂件。但是根据部分⽹友反馈,如果不设定 postmaster 邮箱的话会导致收不到邮 件,所以还是加上去吧。 执⾏以下命令: cat > /etc/dovecot/conf.d/15-lda.conf << EOF以下内容直接粘贴到命令⾏窗⼝中按回车即可。 postmaster_address = postmaster@%d protocol lda { } EOF 

九、配置 OpenDKIM 

9.1 修改 OpenDKIM 配置⽂件 

执⾏以下命令: 

cat > /etc/opendkim.conf << EOF 请按实际情况以及注释提⽰修改以下内容,完成后去除 # 号和后⾯的注释,然后粘贴到命令⾏窗⼝中按回车即可。 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 

9.2 ⽣成私钥 下⾯的 example.com 请替换成您的域名。 

执⾏以下命令:

opendkim-genkey -D /etc/opendkim/keys/ -d example.com -s mail && / chown -R opendkim:opendkim /etc/opendkim/keys/

9.3 配置 Postfifix main.cf 配置发件增加 DKIM 签名。 

执⾏以下命令: 

cat >> /etc/postfifix/main.cf << EOF 以下内容直接粘贴到命令⾏窗⼝中按回车即可。 milter_protocol = 2 milter_default_action = accept smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = inet:127.0.0.1:8891 EOF 

9.4 启动所有服务 

执⾏以下命令: 

systemctl start postfifix dovecot opendkim 如需开机启动,请执⾏以下命令: systemctl enable postfifix dovecot opendkim mariadb

⼗、配置域名记录 

以下项⽬需要在域名服务商或云主机服务商的控制⾯板中设置。下⽂的域名服务商以 DNSPOD 为例,其他域名服务商或 云主机服务商请⾃⾏参阅相关说明⽂档。 

10.1 A 记录的设定 在域名控制⾯板中添加⼀条记录,主机记录填 @  ,记录类型选 A 记录值填 1.1.1.1 ,其他保持默认,保存即可。 

10.2 MX 记录的设定 在域名控制⾯板中添加⼀条记录,主机记录填 @  ,记录类型选 MX  ,记录值填 mail.example.com ,其他保持默认; 再添加⼀条记录,主机记录填 mail  ,记录类型选 A  ,记录值填 1.1.1.1 ,其他保持默认,保存即可。 

10.3 SPF 记录的设定 在域名控制⾯板中添加⼀条记录,主机记录填 @  ,记录类型选 TXT  ,记录值填 v=spf1 mx -all ,其他保持默认,保存 即可。

10.4 DMARC 记录的设定 在域名控制⾯板中添加⼀条记录,主机记录填 _dmarc  ,记录类型选 TXT  ,记录值填 v=DMARC1; p=reject ,其他保持 默认,保存即可。

10.5 DKIM 记录的设定 (以我的密钥⽂件为例) 执⾏以下命令: cat /etc/opendkim/keys/mail.txt 会出现以下结果: mail._domainkey IN  TXT ( "v=DKIM1; k=rsa; "       "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDU5nkxbS36hOa2FCJqotvahTbxb83CvLt5XqV4WAPzJQmfaA1eH 把括号内的值复制出来,去掉所有引号并整理成⼀⾏,形如: v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDU5nkxbS36hOa2FCJqotvahTbxb83CvLt5XqV4WAP 在域名控制⾯板中添加⼀条记录,主机记录填 mail._domainkey  ,记录类型选 TXT  ,记录值 v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDU5nkxbS36hOa2FCJqotvahTbxb83CvLt5XqV4WAPzJQm 其他保持默认,保存即可。 上述五个步骤完成后域名控制⾯板的效果如下图: 

10.6 IP 反向解析 这个……普通家庭宽带⽤户就别想了,企业宽带和国内云主机⽤户需要⽹站通过备案才能设置。如果⽤国外云主机的话, 有些可以⽀持(我使⽤的 Vultr ⽀持)。将服务器的 IP 地址反向解析(PTR 记录)到 MX 域名(这⾥就 mail.example.com )可以⼤幅降低外发邮件被拒收的⼏率。 

⼗⼀、配置 Web 邮箱 

11.1 下载并安装 Roundcube 11.1.1 下载 

执⾏以下命令: wget https://github.com/roundcube/roundcubemail/releases/download/1.3.0/roundcubemail-1.3.0-complete.tar.gz

11.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 

11.2 配置 Nginx PHP 

11.2.1 配置 Nginx 

执⾏以下命令:

vi /etc/nginx/conf.d/mail.conf 请按实际情况以及注释提⽰修改以下内容,在命令⾏窗⼝按下 i ,将内容直接粘贴到命令⾏窗⼝中,再按下 ESC ,最后 输⼊ :wq 按回车。 server {     listen       80;     server_name  mail.example.com; # 您的域名前⾯加上 mail. 需要修改     return 301 https://$server_name$request_uri; } server {     listen       443 ssl http2;     server_name  mail.example.com; # 您的域名前⾯加上 mail. 需要修改     ssl_certifificate "/etc/pki/tls/certs/cert.pem"; # mail.example.com 证书⽂件位置,需要修改     ssl_certifificate_key "/etc/pki/tls/private/key.pem"; # mail.example.com 证书私钥⽂件位置,需要修改     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;     } }

11.2.2 配置 PHP 设置时区 

执⾏以下命令:

echo "date.timezone = Asia/Shanghai" >> /etc/php.ini 创建会话⽂件夹 执⾏以下命令: mkdir /var/lib/php/session && / chown apache:apache /var/lib/php/session 11.3 配置数据库 

11.3.1 进⼊ MySQL 命令⾏界⾯

执⾏以下命令: 

mysql -u root -p然后输⼊ 5.1.2 设置的数据库 Root 密码然后按回车。 出现 MariaDB [(none)]> 指⽰符就说明进⼊了。

11.3.2 创建⼀个⽤户⽤于读写 Roundcube 数据库 

执⾏以下 SQL 语句:

CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'roundcube'; 

11.3.3 创建 Roundcube 数据库

执⾏以下 SQL 语句:

CREATE DATABASE roundcube; 

11.3.4 为⽤户授予读写权限 

执⾏以下 SQL 语句: 

GRANT ALL ON roundcube.* TO 'roundcube'@'localhost' IDENTIFIED BY 'roundcube'; 

11.3.5 刷新权限 

执⾏以下 SQL 语句: 

FLUSH PRIVILEGES; 数据库设置完成。按 Ctrl + D 退出 MySQL 命令⾏界⾯。 

11.4 启动服务 

执⾏以下命令: 

systemctl start nginx php-fpm 如需开机启动,请执⾏以下命令: systemctl enable nginx php-fpm 

11.5 配置 Roundcube 打开浏览器,输⼊ https://mail.example.com/installer/?_step=1 ,回车打开。然后按图⽚提⽰进⾏配置。 配置完成后,关闭浏览器页⾯。执⾏以下命令来使安装程序不可⽤: chmod -R 000 /usr/share/roundcube/installer/

11.6 登录 打开浏览器,输⼊ https://mail.example.com ,然后输⼊您的⽤户名密码登录。登录之后,默认只会有⼀个收件箱,我们再设置⼀下就完美了! 最终效果如下图:

⼗⼆、收发件测试 

12.1 收件测试 ⾮常简单,从 QQ 或者 Gmail 给⾃⼰的邮箱发⼀封邮件,如果可以收到,说明外⽹已经可以连通这台服务器了。 

12.2 发件测试 打开浏览器,输⼊ http://www.mail-tester.com ,回车打开。发⼀封邮件到它指定的邮箱⾥。然后过⼀分钟左右查看 下结果,重点检查 SPF 记录、DMARC 记录和 DKIM 签名是不是有效的。如果都是有效的,那恭喜您!您的邮件系统已 经搭建完了!⾄于这个得分,由于受 IP 地址可能被拉⿊的影响,因此各⼈的分数有可能不同。如果有 8 分以上的话发出 去的邮件基本上就不会被拒收了。如果很不幸 IP 地址被拉⿊了,建议换⼀个 IP 地址。

⼗三、防⽕墙的设置(可选)

如果服务器需要部署防⽕墙,请放⾏ TCP 25 TCP 465 TCP 587 以及 TCP 993 这四个端⼝的传⼊链接。 以 iptables 为例,配置命令为: iptables -A INPUT -p tcp -m multiport --dports 25,465,587,993 -j ACCEPT 然后根据需要⾃⾏保存防⽕墙的配置。

甘肃华科信息技术有限责任公司    版权所有    陇ICP备17001897-1号   甘公网安备 62010202001329 号