Curitiba/PR Contato
Administração e Suporte em Ti

Atenção:

Para o servidor de e-mail funcionar corretamente é necessário endereço IP público com reverso apontando para o endereço seu servidor. O(s) domínio(s) deve(m) estar registrado(s) nos órgãos competentes.

Após uma instalação simples do Centos 7 (mínima):

Vamos instalar as Ferramentas de desenvolvimento, pois será necessário compilarmos algumas aplicações posteriormente.

yum -y install "Ferramentas de Desenvolvimento"

yum -y install wget whois nc vim gpm dialog logwatch telnet nmap mutt
yum -y install epel-release
yum -y update
yum -y install perl-MailTools perl-MIME-EncWords perl-Email-Valid perl-Test-Pod dovecot dovecot-mysql dovecot-pigeonhole  perl-Mail-Sender perl-Log-Log4perl imapsync offlineimap amavisd-new clamav perl-Razor-Agent mariadb-server opendkim vim crypto-utils mod_ssl php php-mysql php-fpm clamav-update php-imap mailx lrzip lzop lz4 arj  unzoo cabextract p7zip unzip unrar fail2ban php-mcrypt

Presumo que este servidor também  será usado para responder pelo serviço de DNS.
yum -y install bind bind-devel bind-utils
systemctl stop rpcbind
systemctl disable rpcbind

Configure o seu hostname server.
hostnamectl set-hostname mail.seudominio.com.br
echo "192.168.30.2 mail.seudominio.com.br" >> /etc/hosts

Até aqui o servidor já poderá enviar e-mails dos usuários registrados no servidor através de um único domínio.
Lembre-se que o serviço de dns já deve estar configurado, com reverso apontando para essa máquina. Mas vamos continuar, pois queremos que esse servidor de e-mail possa ser usado para mais de um domínio.

PS: No Centos 7 o MySQL-Server foi substituído pelo Mariadb.

Habilite inicie o serviço Mariadb
systemctl enable mariadb.service
systemctl start mariadb.service
mysql_secure_installation

Configurando Clam Antivirus:
vim /etc/sysconfig/freshclam
Comente ou remova esta linha
#  FRESHCLAM_DELAY=disabled-warn    # REMOVE ME

Editando clamav config
vim /etc/freshclam.conf
Comente a linha:
# Example

Faça um update do database.
freshclam

Habilitar o serviço do spamassasin
systemctl start spamassassin.service
systemctl status spamassassin.service
systemctl enable spamassassin.service

Update spamassasin
sa-update

Integrando spamassasin e clamav com o amavisd.
yum -y install clamav clamav-devel clamav-server clamd
cp /usr/share/doc/clamav-server-0.99.2/clamd.sysconfig /etc/sysconfig/clamd.amavisd


vim /etc/sysconfig/clamd.amavisd

CLAMD_CONFIGFILE=/etc/clamd.d/amavisd.conf
CLAMD_SOCKET=/var/run/clamd.amavisd/clamd.sock
#CLAMD_OPTIONS=

vi /etc/tmpfiles.d/clamd.amavisd.conf

Adicione o seguinte:
D /var/run/clamd.amavisd 0755 amavis amavis -
Crie um novo arquivo:
vi /usr/lib/systemd/system/[email protected]
Adicione o seguinte conteúdo:
[Unit]
Description = clamd scanner (%i) daemon
After = syslog.target nss-lookup.target network.target
[Service]
Type = simple
ExecStart = /usr/sbin/clamd -c /etc/clamd.d/%i.conf --foreground=yes
Restart = on-failure
PrivateTmp = true
[Install]
WantedBy=multi-user.target
Agora habilite e inicie o serviço  clamd@amavisd.

systemctl start clamd@amavisd
systemctl enable clamd@amavisd
systemctl status clamd@amavisd

Configure amavisd service
 vi /etc/amavisd/amavisd.conf
 
$max_servers = 2;  número de processos filhos.
Processos filhos podem requisitar muita memória e processamento. Isto irá influenciar na velocidade de entrega dos e-mails e carga da CPU.
$max_servers = <number>
 
linha 20 $mydomain
$mydomain = ‘ceae.info’;
 
linha 152 hostname
$myhostname= ‘mail.ceae.info’;
 
Inicie / hablite Amavisd
systemctl start amavisd.service
systemctl enable amavisd.service
 
 
# Apache

yum -y install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel mod_fcgid php-cli httpd-devel spamassassin unzip bzip2 unrar perl-DBD-mysql
 
systemctl start httpd.service
systemctl enable httpd.service
 
Configure:
vi /etc/httpd/conf/httpd.conf

na linha 86 admin email
# ServerAdmin root@localhost
 
na linha 152 altere para:
## AllowOverride None
AllowOverride All
 
Config php
vi /etc/php.ini
 
na linha 763 
;cgi.fix_pathinfo=1
cgi.fix_pathinfo=0
 
na linha 877 edit timezone:
;date.timezone =
date.timezone = America/Sao_Paulo
 
Reinicie apache
systemctl restart httpd.service
 
 
Setup Postfixadmin
 
Download Postxiadmin
Página: https://sourceforge.net/projects/postfixadmin/files/postfixadmin/ pegue a última versão.
wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-3.0/postfixadmin-3.0.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fpostfixadmin%2Ffiles%2Fpostfixadmin%2Fpostfixadmin-3.0%2F&ts=1479731076&use_mirror=netix
 mv postfixadmin-3.0.tar.gz\?r\=https\:%2F%2Fsourceforge.net%2Fprojects%2Fpostfixadmin%2Ffiles%2Fpostfixadmin%2Fpostfixadmin-3.0%2F
postfixadmin-3.0.tar.gz
 
Descompacte a pasta:
tar -zxvf postfixadmin-3.0.tar.gz -C /var/www/html/
cd /var/www/html/
chown -R root.apache postfixadmin-3.0/
 ln -s postfixadmin-3.0/ postfixadmin
 
Criar usuário  postfix database:
mysql -u root -p
MariaDB [(none)]> create database postfix;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT all on postfix.* to 'postfix'@'localhost' identified by 'yourPASSword';
Query OK, 0 rows affected (0.00 sec)
 
Agora, edite config:
vi /var/www/html/postfixadmin/config.inc.php
 
$CONF[‘configured’] = true;
$CONF[‘setup_password’] = ‘YOUR-STRONG-PASSWORD’;
$CONF[‘database_type’] = ‘mysqli’;
$CONF[‘database_host’] = ‘localhost’;
$CONF[‘database_user’] = ‘postfix’;
$CONF[‘database_password’] = ‘yourPASSword’;
$CONF[‘database_name’] = ‘postfix’;
$CONF[‘show_password’] = ‘YES’;
$CONF[‘page_size’] = ’30’;
$CONF[‘default_aliases’] = array (
‘abuse’ => ‘[email protected]’,
‘hostmaster’ => ‘[email protected]’,
‘postmaster’ => ‘[email protected]’,
‘webmaster’ => ‘[email protected]
);
$CONF[‘domain_path’] = ‘NO’;
$CONF[‘domain_in_mailbox’] = ‘YES’;
$CONF[‘maildir_name_hook’] = ‘NO’;
$CONF[‘transport’] = ‘YES’;
$CONF[‘vacation’] = ‘YES’;
$CONF[‘vacation_domain’] = ‘autoreply.ceae.info’;
$CONF[‘vacation_control’] =’YES’;
 
If your domain do not exist, activate this
$CONF['emailcheck_resolve_domain']='NO';

Agora acesse o seu navegador e digite http://your-ip/postfixadmin/setup.php para configurar sua senha de administrador.


Faça login, crie um novo domínio, e-mail  em: http://YOUR-IP-server/postfixadmin/login.php
 

#  Setup Dovecot.
Habilite  IMAP and POP3 service.

vi /etc/dovecot/dovecot-sql.conf.ext
# The mysqld.sock socket may be in different locations in different systems
driver = mysql
##
connect = host=localhost dbname=postfix user=postfix password=yourpassword
#
# Default password scheme.
# depends on your $CONF['encrypt'] setting:
# md5crypt  -> MD5-CRYPT
# md5       -> PLAIN-MD5
# cleartext -> PLAIN
default_pass_scheme = MD5-CRYPT
# Query to retrieve password. user can be used to retrieve username in other
# # formats also.
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
# Query to retrieve user information.
## user_query = SELECT maildir, 1001 AS uid, 1001 AS gid FROM mailbox WHERE username = '%u' AND active='1'
user_query = SELECT CONCAT('/var/spool/vmail/', domain,'/', maildir) AS
home, CONCAT('maildir:/var/spool/vmail/',domain,'/', maildir) AS mail,
5000 AS uid, 12 AS gid, concat('dict:storage=',CAST(ROUND(quota / 1024)
AS CHAR), '::proxy::quota') AS quota, CONCAT('*:storage=',CAST(quota AS
CHAR), 'B') AS quota_rule FROM mailbox WHERE username = '%u' AND active =
'1'
vi /etc/dovecot/conf.d/dovecot-mysql-quota.conf.ext
connect = host=localhost dbname=postfix user=postfix password=yourpassword
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
}
vi /etc/dovecot/dovecot.conf
linha 24  dovecot  protocols
protocols = imap pop3
linha 31 interfaces de escuta
listen = *, [::]

linha 44  menssagem de boas vindas,
#login_greeting = Dovecot ready.
login_greeting = Server OK.
linha 69 defines 
shutdown_clients = yes
custom logging
vi /etc/dovecot/conf.d/10-logging.conf

linha 8 log 
log_path = /var/log/dovecot.log

linha 32 logging verbose
#auth_verbose_passwords = no
auth_verbose_passwords = plain
linha 41 enable debug
#auth_debug_passwords = no
auth_debug_passwords = yes
Reinicie dovecot
systemctl restart dovecot.service
Crie usuário para deliver  interno e log.
useradd -r -u 5000 -g mail -d /var/spool/vmail -s /sbin/nologin -c "Virtual mailbox" vmail
Crie a pasta vmail
mkdir /var/spool/vmail
chown vmail /var/log/dovecot.log

Crie logrotate para dovecot
vi /etc/logrotate.d/dovecot


/var/log/dovecot.log {
missingok
notifempty
delaycompress
sharedscripts
postrotate
/bin/kill -USR1 `cat /var/run/dovecot/master.pid 2>/dev/null` 2> /dev/null || true
endscript
}
Configure authenticated user
vi /etc/dovecot/conf.d/10-auth.conf
linha 10 disable plain test on
disable_plaintext_auth = yes
Auth mecanism
auth_mechanisms = plain login cram-md5
and databate type user setup
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Setup SSL
SSL protocols
ssl_protocols = !SSLv2 !SSLv3
SSL ciphers to use
ssl_cipher_list = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4
Prefer the server’s order of ciphers over client’s.
ssl_prefer_server_ciphers = yes
 Now dovecot needs to know what protocols will  serve and how
vim /etc/dovecot/conf.d/10-master.conf
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
 
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
service auth {
 
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = vmail
    group = mail
  }
Enable sieve in dovecot
vim /etc/dovecot/conf.d/15-lda.conf

protocol lda {
# Space separated list of plugins to load (default is global mail_plugins).
#mail_plugins = $mail_plugins
mail_plugins = $mail_plugins sieve
}