cenots7 postfix+dovecot+mysql+postfixadmin配置邮件服务器

该文章详细介绍了如何在CentOS7系统上配置邮件服务,包括DNS解析、Postfix和Dovecot的安装与设置,以及使用MySQL数据库和PHP的PostfixAdmin进行图形化管理。还涵盖了虚拟用户的配置、防火墙端口开放以及安全设置等内容。

一、环境准备

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-release

yum -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

<think> 首先,用户的问题是关于解决CentOS 7服务器忘记密码的方法。我从系统指令中看到,我需要参考提供的引用内容,并在回答中自然地添加引用标识。 回顾引用内容: - 引用[1]:描述了通过grub引导菜单进入紧急救援模式来重置root密码的步骤。 - 引用[2]:提供了另一种方法,涉及在grub编辑中添加init=/bin/sh,然后重置密码。 - 引用[3]:提到了一个错误信息。 - 引用[4]:给出了修改grub配置的步骤。 用户的需求是“查找解决CentOS 7服务器忘记密码的方法”,所以我应该综合这些引用,提供一个清晰的步骤指南。 系统级指令要求: - 使用$...$和$$...$$格式处理数学表达式,但在这个上下文中,可能没有数学表达式,所以我可以忽略。 - 回答使用中文。 - 生成相关问题。 - 在引用的段落末尾添加引用标识,如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 结构化回答: 1. 引言:简要介绍问题和方法。 2. 详细步骤:基于引用,描述如何重置密码。 3. 注意事项:包括潜在错误和如何解决(参考引用[3])。 4. 生成相关问题:在末尾添加相关问题。 确保引用标识: - 当引用特定部分时,在段落末尾添加如[^1]。 从引用中: - 引用[1]和[2]都提供了方法,但稍有不同: - 引用[1]:添加rd.break - 引用[2]:添加init=/bin/sh - 引用[3]提到了错误。 - 引用[4]类似于引用[1]的变体。 我应该选择一个标准的方法来避免混淆。引用[1]的方法似乎更常见,所以我将基于那个。 步骤概览: 1. 重启系统,进入grub菜单。 2. 按e编辑启动项。 3. 修改linux16行,添加rd.break(或类似)。 4. 进入紧急模式。 5. 挂载sysroot为读写。 6. chroot /sysroot。 7. passwd root。 8. 退出,重启。 在回答中,我需要引用来源。 最终回答结构: - 开头:说明方法。 - 步骤列表:清晰步骤。 - 错误处理:如果有。 - 结尾:相关问题。 生成相关问题: - 基于主题,如其他方法、常见问题、安全考虑等。 相关问题想法: 1. 如果grub菜单不出现怎么办? 2. CentOS 7密码重置的其他方法? 3. 如何预防密码丢失? 4. SELinux相关的问题(参考引用[2])。 现在,起草回答。 </think>### CentOS 7服务器忘记root密码的解决方法 如果您的CentOS 7服务器忘记了root密码,可以通过修改GRUB引导参数进入紧急救援模式来重置密码。以下是基于可靠参考的综合步骤指南。整个过程需在服务器物理控制台或虚拟控制台(如KVM)操作,避免远程连接中断。操作前请确保系统已关机或重启。 #### 详细步骤: 1. **重启系统并进入GRUB编辑模式**: 重启服务器,当出现GRUB引导菜单时(通常显示CentOS 7选项),快速按下键盘的 `e` 键。这会使系统暂停在编辑界面[^1][^2]。 2. **修改内核启动参数**: 在编辑界面中,找到以 `linux16` 或 `linuxefi` 开头的行。在该行末尾添加参数: - 方法一:添加 `rd.break`(推荐,兼容性好)[^1][^4]。 - 方法二:或添加 `init=/bin/sh`(适用于某些环境)[^2]。 修改后,该行应类似: ``` linux16 /vmlinuz-... ro rd.break ``` 或 ``` linux16 /vmlinuz-... ro init=/bin/sh ``` 完成后,按 `Ctrl+X` 启动系统,进入紧急救援模式[^1][^2]。 3. **挂载文件系统为读写模式**: 系统进入救援模式后(显示命令行提示符),输入以下命令重新挂载根目录: ```bash mount -o remount,rw /sysroot ``` 此步骤确保文件系统可修改[^1][^4]。如果遇到错误(如“cannot read table of mounted file system”),可能是文件系统损坏,可尝试执行 `grep -v rootfs /proc/mounts > /etc/mtab` 修复[^3]。 4. **切换到根环境并重置密码**: 输入命令进入系统根目录: ```bash chroot /sysroot ``` 然后使用 `passwd` 命令重置root密码: ```bash passwd root ``` 按提示输入两次新密码(输入时不显示字符)。如果密码太简单,系统可能警告“BAD PASSWORD”,但可忽略并继续[^2]。 5. **处理SELinux(可选)**: 如果服务器启用了SELinux,重置密码后需更新文件标签: ```bash touch /.autorelabel ``` 这确保SELinux策略在重启后正确应用[^2]。 6. **退出并重启系统**: 执行以下命令退出chroot环境并重启: ```bash exit mount -o remount,ro /sysroot # 重新挂载为只读 reboot ``` 系统重启后,使用新密码登录root账户[^1][^2]。 #### 注意事项: - **安全风险**:此方法需物理访问服务器,操作不当可能导致系统损坏。建议在测试环境中练习。 - **适用性**:适用于CentOS 7.x版本。其他Linux发行版(如Ubuntu)方法不同。 - **常见问题**: - 如果GRUB菜单未出现,可能是引导超时设置过短。重启时反复按 `Shift` 或 `Esc` 强制显示。 - 密码重置后登录失败?检查SELinux状态(`sestatus`),确保执行了 `touch /.autorelabel`[^2]。 通过以上步骤,您可以成功重置root密码。如果您在操作中遇到具体错误,可提供更多细节以进一步协助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值