|
|
通过如上章节的配置,使用系统用户可以登录到postfix邮件服务器,并且进行邮件的发送和接收,为了管理的方便和系统安全,一般通过postfix虚拟用户来管理邮件用户的。
Postfix虚拟用户的原理:基于系统中创建的一个映射用户,该用户不能登录到系统,然后将其他虚拟用户全部映射到该系统用户所属目录。
对于操作系统来说所有的操作均是通过该系统用户进行的,但是对于postfix的邮件用户来说又是各自独立的。Postfix虚拟用户与Vsftpd虚拟用户相似,所有的虚拟用户或者系统用户可以通过Postfixadmin来进行管理。
配置Postfix SMTP认证基于MYSQL数据库,读取MYSQL虚拟用户配置:
修改Postfix真实用户的uid和gid,命令如下:
usermod -u 1000 postfix
groupmod -g 1000 postfix
chown -R postfix.postfix /var/spool/mail/
创建postfix主配置文件mail.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.jingfengjiaoyu.com
mydomain = jingfengjiaoyu.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
#mydestination = localhost
#mydestination = $myhostname,localhost.$mydomain,localhost,$mydomain
unknown_local_recipient_reject_code = 550
#mynetworks = 192.168.0.0/24,127.0.0.0/8
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.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
#Config Virtual Mailbox Settings 2026
virtual_minimum_uid = 100
virtual_mailbox_base = /var/spool/mail
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains = $virtual_alias_maps
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000
virtual_transport = virtual
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1
#Config QUOTA 2026
message_size_limit = 52428800
mailbox_size_limit = 209715200
virtual_mailbox_limit = 209715200
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, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
#Config SASL 2026
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination,permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_banner=$myhostname SMTP "Version not Available"
创建POSTFIX读取MYSQL配置信息:
cat>/etc/postfix/mysql_virtual_alias_maps.cf<<EOF
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
EOF
cat>/etc/postfix/mysql_virtual_domains_maps.cf<<EOF
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
EOF
cat>/etc/postfix/mysql_virtual_mailbox_limit_maps.cf<<EOF
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
EOF
cat>/etc/postfix/mysql_virtual_mailbox_maps.cf<<EOF
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
EOF
mysql_virtual_mailbox_maps.cf:服务器邮箱文件的存储路径。
mysql_virtual_domains_maps.cf:邮件服务器上所有的虚拟域。
mysql_virtual_alias_maps.cf:邮件服务器上虚拟别名和实际邮件地址间的对应关系。
mysql_virtual_mailbox_limit_maps.cf:服务器上邮箱的一些限制参数。
如上配置文件可以供Postfix读取数据库表。
默认是基于hash:/etc/aliases查询表,哈希文件,文件的路径是/etc/aliases。Postfix在需要的时候读取这些配置信息,然后根据这些配置信息的指示,到另外的文件或者数据库中去读取实际的数据。
创建数据库并授权:
create database postfix charset=utf8;
grant all privileges on postfix.* to postfix@'localhost' identified by "postfix";
flush privileges;
修改postfixadmin配置文件数据库连接信息:

通过Postfixamin创建4个虚拟用户,如图所示:

配置Dovecot服务,修改dovecot.conf配置文件代码如下:
#/etc/dovecot/dovecot.conf
#OpenEuler: Linux 2.6.32
#2026年7月1日09:53:30
auth_mechanisms = PLAIN LOGIN
#auth_mechanisms = PLAIN LOGIN CRAM-MD5 DIGEST-MD5
disable_plaintext_auth = no
first_valid_uid = 1000
listen = *
mail_location = maildir:/var/spool/mail/%d/%n
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date
passdb {
args = /etc/dovecot/mysql.conf
driver = sql
}
protocols = imap pop3
service auth {
unix_listener auth-client {
group = postfix
mode = 0660
user = postfix
}
}
ssl = no
userdb {
args = /etc/dovecot/mysql.conf
driver = sql
}
创建Dovecot连接MYSQL认证,配置文件
/etc/dovecot/mysql.conf代码如下:
driver = mysql
connect = host=/var/lib/mysql/mysql.sock dbname=postfix user=postfix password=postfix
default_pass_scheme = MD5
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1000 AS uid, 1000 AS gid FROM mailbox WHERE username = '%u'
使用虚拟用户登录RoundCube,如图所示:

 |
|