一、环境准备
centos7 xxx.xxx.xxx.60
windows 10 client:192.168.58.136
二、DNS域名解析配置

三、安装邮件服务软件
yum install -y postfix postfix-mysql
yum install cyrus* -y
yum install -y dovecot* dovecot-devel dovecot-mysql
四、设置本地用户
useradd cdu1;
702 echo 123|passwd --stdin cdu1
703 useradd cdu2
704 echo 123|passwd --stdin cdu2
705 cat /etc/passwd
706 mkdir -p /home/cdu1/mail/.imap/INBOX
707 mkdir -p /home/cdu2/mail/.imap/INBOX
708 chown -R cdu1:cdu1 /home/cdu1/
709 chown -R cdu2:cdu2 /home/cdu2/
五、配置postfix服务
[root@server dovecot]# sed '/^#/d;/^$/d' /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.pulin.online
mydomain = pulin.online
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
mynetworks = 0.0.0.0/0
relay_domains = $mydestination#
alias_maps = hash:/etc/aliases#
alias_database = hash:/etc/aliases#
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
六、配置dovecot服务配置
[root@server dovecot]# sed '/^#/d;/^$/d' /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
listen = *, ::
login_trusted_networks = 0.0.0.0/0
dict {
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}
!include conf.d/*.conf
!include_try local.conf
- 配置dovecot子配置文件(目录: /etc/dovecot/conf.d/)
[root@server conf.d]# cd /etc/dovecot/conf.d/
[root@server conf.d]# ls
10-auth.conf 15-mailboxes.conf 90-quota.conf auth-master.conf.ext
10-director.conf 20-imap.conf 90-sieve.conf auth-passwdfile.conf.ext
10-logging.conf 20-lmtp.conf 90-sieve-extprograms.conf auth-sql.conf.ext
10-mail.conf 20-managesieve.conf auth-checkpassword.conf.ext auth-static.conf.ext
10-master.conf 20-pop3.conf auth-deny.conf.ext auth-system.conf.ext
10-ssl.conf 90-acl.conf auth-dict.conf.ext auth-vpopmail.conf.ext
15-lda.conf 90-plugin.conf auth-ldap.conf.ext[root@server conf.d]# vim 10-auth.conf
disable_plaintext_auth = no
[root@server conf.d]# vim 10-ssl.conf
#ssl = required
ssl = no
[root@server conf.d]# vim 10-mail.conf# mail_location = maildir:~/Maildir
mail_location = mbox:~/mail:INBOX=/var/mail/%u
七、邮件测试


八、安装postfixadmin管理postfix(图形界面管理工具)
1、安装PHP7.4版本源镜像
[root@server conf.d]# cd /etc/yum.repos.d/
yum install epel-releaseyum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum repolist all |grep php 查看源php
yum --enablerepo=remi install php74-php php74-php-gd php74-php-xml php74-php-sockets php74-php-session php74-php-snmp php74-php-mysql php74-php-mbstring php74-php-imap php74-php-multibyte
注:扩展安装格式php74-php-扩展模块名,缺什么扩展只要按照格式安装相应模块即可
#链接php文件
ln -s /opt/remi/php74/root/usr/bin/php /usr/bin/php
#运行并查看版本
php74 -v
# The current PHP memory limit is below the recommended value of 512MB.
vi /etc/opt/remi/php74/php.ini
memory_limit = 512M
#如果你运行的是nginx而不是apache,修改
vi /etc/opt/remi/php74/php-fpm.d/www.conf
user = apache
group = apache
# Replace the values with
user = nginx
group = nginx
卸载 php7.4
yum remove php74-php*
2、安装httpd并启动和配置服务
yum install httpd http-devel httpd-tools
systemctl restart httpd.service
systemctl status httpd.service
systemctl enable httpd.service
#开启防火墙端口
firewall-cmd --permanent --zone=public --add-service=httpd
firewall-cmd --reload
3、安装mysql数据库和配置数据库
#centos 7 安装mysql
1.安装源
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum -y localinstall mysql57-community-release-el7-11.noarch.rpm
2.安装数据库
yum -y install mysql-community-server
报错解决:rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
查看初始密码:
grep 'temporary password' /var/log/mysqld.log
或者修改配置文件
vim /etc/my.cnf
在[mysqld] 后面加入:skip_grant_tables;
保存重启,登录 mysql -uroot
修改密码:update user set authentication_string='' where user='root' and host='localhost';
修改配置去掉:skip_grant_tables;
如果设置密码简单需要修改:set global validate_password_policy=LOW; set global validate_password_length=6;
alter user 'root'@'localhost' identified by '123456';
远程登录:
grant all privileges on *.* to 'mail'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;
创建postfixadmin数据库
create database postfix charset utf8;
4.安装和配置postfixadmin
-
安装 postfixadmin
cd /var/www/html/ wget http://nchc.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.tar.gz && tar xvf postfixadmin-3.2.tar.gz && mv postfixadmin-3.2 postfixadmin cd /var/www/html/postfixadmin/ mkdir -p templates_c chmod 757 templates_c/ -
配置 postfixadmin
#修改配置文件中以下参数
vim config.inc.php
$CONF['configured'] = true;
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'mail';
$CONF['database_password'] = '123456';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'postmaster@pulin.online';
$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['aliases'] = '1000';
$CONF['mailboxes'] = '1000';
$CONF['maxquota'] = '1000';
$CONF['fetchmail'] = 'NO';
$CONF['quota'] = 'YES';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';
-
部署postfixadmin
访问页面检查部署环境:http://xx.185.107.xx/postfixadmin32/public/setup.php
- 设置超级密码并设置管理员:
- 并修改配置vim config.inc.php
-
登录 postfixadmin


九、配置虚拟用户
1、创建本地“寄生用户”
useradd -u 5000 -d /var/vmail -m -s /sbin/nologin vmail
chmod -R 757 /var/vmail
chown -R vmail.vmail /var/www/html/postfixadmin/
2、postfix虚拟用户配置
- 配置postfix主文件
[root@server postfix]# vim /etc/postfix/main.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, this user has exceeded their disk space quota, please try again later.
virtual_overquota_bounce = yes
#Specify the user/group that owns the mail folders. I'm not sure if this is strictly necessary when using Dovecot's LDA.
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
# Turns on sasl authorization
smtpd_sasl_auth_enable = yes
#Use dovecot for authentication
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
- 使用Dovecot做为投递
vim /etc/postfix/master.cf
#在最后增加这两行,注意flags前面有两个空格,不然会报错[/code]
dovecot unix - n n - - pipe,
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}
- 创建MySQL脚本
注:user password dbname 要和上面配置postfixadmin中授权的一致
创建/etc/postfix/mysql_virtual_domains_maps.cf文件
vim /etc/postfix/mysql_virtual_domains_maps.cf
user = mail
password = 123456
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
创建/etc/postfix/mysql_virtual_alias_maps.cf文件
vim /etc/postfix/mysql_virtual_alias_maps.cf
user = mail
password = 123456
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
创建/etc/postfix/mysql_virtual_mailbox_maps.cf文件
vim /etc/postfix/mysql_virtual_mailbox_maps.cf
user = mail
password = 123456
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
创建/etc/postfix/mysql_virtual_mailbox_maps.cf文件
vim /etc/postfix/mysql_virtual_mailbox_maps.cf
user = mail
password = 123456
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
创建/etc/postfix/mysql_virtual_mailbox_limit_maps.cf文件
vim /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user = mail
password = 123456
hosts = localhost
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
3、配置dovecot虚拟用户设置
#修改dovecot配置文件
#以下配置都是在原文件基础上修改
#修改/etc/dovecot/dovecot.conf #主配置文件
vim /etc/dovecot/dovecot.conf
protocols = imap pop3
listen = *
dict {
quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}
!include conf.d/*.conf
修改/etc/dovecot/conf.d/10-auth.conf
vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login cram-md5
!include auth-system.conf.ext
!include auth-sql.conf.ext
修改/etc/dovecot/conf.d/10-mail.conf
vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u
mbox_write_locks = fcntl
修改/etc/dovecot/conf.d/10-master.conf
vim /etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
}
inet_listener imaps {
}
}
service pop3-login {
inet_listener pop3 {
}
inet_listener pop3s {
}
}
service lmtp {
unix_listener lmtp {
}
}
service imap {
}
service pop3 {
}
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
#新加下面一段,为smtp做认证
unix_listener auth-client {
mode = 0600
user = postfix
group = postfix
}
}
service auth-worker {
}
service dict {
unix_listener dict {
mode = 0600
user = vmail
group = vmail
}
}
修改/etc/dovecot/conf.d/15-lda.conf
vim /etc/dovecot/conf.d/15-lda.conf
protocol lda {
mail_plugins = quota
postmaster_address = postmaster@pulin.online #管理员邮箱
}
修改/etc/dovecot/conf.d/20-imap.conf
vim /etc/dovecot/conf.d/20-imap.conf
protocol imap {
mail_plugins = quota imap_quota
}
修改/etc/dovecot/conf.d/20-pop3.conf
vim /etc/dovecot/conf.d/20-pop3.conf
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
mail_plugins = quota
}
修改/etc/dovecot/conf.d/90-quota.conf
vim /etc/dovecot/conf.d/90-quota.conf[/code]
plugin {
quota_rule = *:storage=1G
}
plugin {
}
plugin {
quota = dict:User quota::proxy::quota
}
plugin {
}
以下配置文件为新添加文件
增加/etc/dovecot/dovecot-sql.conf.ext
vim /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfix user=mail password=123456
default_pass_scheme = CRAM-MD5
user_query = SELECT CONCAT('/var/vmail/', maildir) AS home, 5000 AS uid, 5000 AS gid, CONCAT('*:bytes=', quota) as quota_rule FROM mailbox WHERE username = '%u' AND active='1'
password_query = SELECT username AS user, password, CONCAT('/var/vmail/', maildir) AS userdb_home, 5000 AS userdb_uid, 5000 AS userdb_gid, CONCAT('*:bytes=', quota) as userdb_quota_rule FROM mailbox WHERE username = '%u' AND active='1'
增加/etc/dovecot/dovecot-dict-sql.conf.ext
vim /etc/dovecot/dovecot-dict-sql.conf.ext
connect = host=localhost dbname=postfix user=mail password=123456
map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}
map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}
4、重启postfix和dovecot服务
systemctl status dovecot.service
systemctl restart postfix.service
该文章详细介绍了如何在CentOS7系统上配置邮件服务,包括DNS解析、Postfix和Dovecot的安装与设置,以及使用MySQL数据库和PHP的PostfixAdmin进行图形化管理。还涵盖了虚拟用户的配置、防火墙端口开放以及安全设置等内容。


1094

被折叠的 条评论
为什么被折叠?



