useradd -g vmail -u 5000 vmail -d /home/vmail -m
yum install dovecot dovecot-mysql postfix mariadb mariadb-server php php-imap php-mbstring php-pdo php-mysql php-fpm (optional postfix-perl-scripts)
secure mysql installation
mysql_secure_installation
mysql –
CREATE DATABASE postfix;
CREATE USER ‘postfix’@’localhost’ IDENTIFIED BY ‘shibaniakus’;
GRANT ALL PRIVILEGES ON `postfix` . * TO ‘postfix’@’localhost’;
// Postfix //
vim /etc/postfix/main.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf,mysql:/etc/postfix/mysql_virtual_alias_domains_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_domains_maps.cf
relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
mynetworks = 192.168.3.0/24 , more networks
smtpd_discard_ehlo_keywords = silent-discard, dsn
smtpd_banner = $myhostname ESMTP
append_dot_mydomain = no
append_at_myorigin = nosmtpd_tls_security_level = may
smtp_tls_security_level = maysmtpd_tls_auth_only = yes
smtpd_tls_received_header = yes
myhostname = mail.d1m0.com
smtpd_tls_cert_file = /etc/pki/dovecot/2_mail.d1m0.com.crt
smtpd_tls_key_file = /etc/pki/dovecot/mail.key
biff = no
message_size_limit = 4194304
dovecot_destination_recipient_limit = 1
smtpd_tls_CAfile = /etc/pki/dovecot/1_root_bundle.crt
smtp_tls_CAfile = $smtpd_tls_CAfilesmtpd_tls_loglevel = 1
smtp_tls_loglevel = 1
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_soft_error_limit = 1h
vim mysql_virtual_mailbox_maps.cf
hosts = 127.0.0.1
user = postfix
password = @@
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username=’%s’ AND active = 1
vim mysql_virtual_mailbox_domains.cf
hosts = 127.0.0.1
user = postfix
password = @@
dbname = postfix
query = SELECT domain FROM domain WHERE domain=’%s’ and backupmx = 0 and active = 1
vim mysql_virtual_alias_maps.cf
password = @@
dbname = postfix
query = SELECT goto FROM alias WHERE address=’%s’ AND active = 1
vim mysql_virtual_alias_domains_maps.cf
hosts = 127.0.0.1
user = postfix
password = @@
dbname = postfix
query = select goto from alias,alias_domain where alias_domain.alias_domain=’%d’ and alias.address = ‘%u’ || ‘@’ || alias_domain.target_domain and alias.active= true and alias_domain.active= 1
// Dovecot //
vim /etc/dovecot/dovecot.conf
listen = *
ssl = yes
ssl_cert = </etc/pki/dovecot/2_mail.crt
ssl_key = </etc/pki/dovecot/mail.key
ssl_ca = </etc/pki/dovecot/1_root_bundle.crt
protocols = imap lmtp
disable_plaintext_auth = no
auth_mechanisms = plain login
mail_access_groups = vmail
default_login_user = vmail
first_valid_uid = 2000
first_valid_gid = 5000
mail_location = maildir:/home/vmail/%d/%nuserdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}service auth {
unix_listener auth-client {
group = postfix
mode = 0660
user = postfix
path = /var/spool/postfix/private/auth
}
user = root
}
service imap-login {
process_min_avail = 1
user = vmail
}
vim /etc/dovecot/dovecot-sql.conf.ext
connect = host=127.0.0.1 dbname=postfix user=postfix password=@@
driver = mysql
default_pass_scheme = MD5-CRYPT
password_query = SELECT username AS user,password FROM mailbox WHERE username = ‘%u’ AND active=’1′
user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = ‘%u’ AND active=’1′
user_query = SELECT CONCAT(‘/home/vmail/’, maildir) AS home, 5000 AS uid, 5000 AS gid, CONCAT(‘*:bytes=’, quota) AS quota_rule FROM mailbox WHERE username = ‘%u’ AND active=’1′
user_query = SELECT maildir, 5000 AS uid, 5000 AS gid, CONCAT(‘dict:storage=’,floor(quota/1000),’ proxy::quota’) as quota FROM mailbox WHERE username = ‘%u’ AND active=’1′
// Postfixadmin //