Criando o certificado SSL
Para que nossas conexões não fiquem suscetíveis à captura de dados, iremos configurar
certificados SSL, gerando o certificado SSL para o
Postfix e
Dovecot, usando os comandos abaixo:
# genkey --days 3650 mail.seu_dominio.com.br
Obs. 1: O "--days 3650" significa o número de dias em que o certificado é válido (3650/365 dá 10 anos).
Obs. 2: Troque "mail.example.com" para o nome completo do seu servidor, se o seu SMTP se chamar "smtp.servermail.com.br", você irá executar:
# genkey --days 3650 smtp.servermail.com.br
Configurando o Virtual Mail User
O
Virtual Mail User será o responsável por criar a Maildir dos usuários, estaremos colocando ele em
/home para facilitar a administração, é aqui que será arquivado os e-mails dos usuários. Siga os passos abaixo:
# mkdir /home/vmail
# chmod 770 /home/vmail
# useradd -r -u 101 -g mail -d /home/vmail -s /sbin/nologin -c "Virtual mailbox" vmail
# chown vmail:mail /home/vmail
Com SELinux no estado
enforcing, haverá problemas na entrega de e-mails, tente rodar o comando:
# chcon -R -u user_u -r object_r -t user_home_t /home/vmail
Caso não funcione, verifique as sugestões do
setroubleshoot, geralmente resolvo os problemas de SELinux consultando ela.
Configurando Postfix Admin
Execute:
# service httpd restart
Primeiro criamos o banco para o Postfix Admin fazer o resto do trabalho. Estou levando em consideração que o MySQL já está instalado e funcionando.
Execute os comandos abaixo.
Entre no prompt do MySQL:
# mysql -u root -p
Criando a base de dados Postfix:
mysql>
CREATE DATABASE postfix;
Criando o usuário Postfix (troque sua_senha_aqui por algo melhor):
mysql>
CREATE USER postfix@localhost IDENTIFIED BY 'sua_senha_aqui';
Editando as permissões do banco Postfix para o usuário postfix:
mysql>
GRANT ALL PRIVILEGES ON postfix . * TO postfix@localhost;
Agora vamos à configuração do Postfix Admin. Não esqueça de colocar sua senha na configuração.
Cole o conteúdo abaixo ou altere o que for necessário no arquivo de configuração:
# cd /var/www/html/postfixadmin
# vim config.inc.php
<?php
/**
* Contains configuration options that override the default config file
*/
/*********************************************
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* You have to set $CONF['configured'] = true; before the
* application will run!
* Doing this implies you have changed this file as required.
* i.e. configuring database etc; specifying setup.php password etc.
*/
$CONF['configured'] = true;
// In order to setup Postfixadmin, you MUST specify a hashed password here.
// To create the hash, visit setup.php in a browser and type a password into the field,
// on submission it will be echoed out to you as a hashed value.
$CONF['setup_password'] = 'changeme';
$CONF['postfix_admin_url'] = '';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'sua_senha_aqui';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'postmaster@seu_dominio_aqui.com.br';
$CONF['encrypt'] = 'md5crypt';
//$CONF['dovecotpw'] = "/usr/sbin/dovecotpw";
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['min_password_length'] = 6;
$CONF['page_size'] = '20';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['aliases'] = '50';
$CONF['mailboxes'] = '50';
$CONF['maxquota'] = '100';
$CONF['quota'] = 'YES';
$CONF['quota_multiplier'] = '1024000';
$CONF['transport'] = 'YES';
$CONF['transport_options'] = array (
'virtual', // for virtual accounts
'local', // for system accounts
'relay' // for backup mx
);
$CONF['transport_default'] = 'virtual';
$CONF['vacation'] = 'YES';
$CONF['vacation_domain'] = 'autoreply.seu_dominio_aqui.com.br';
$CONF['vacation_control'] ='YES';
$CONF['vacation_control_admin'] = 'YES';
$CONF['special_alias_control'] = 'YES';
$CONF['user_footer_link'] = "http: //algumacoisa.seu_dominio_aqui.com.br/main";
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Return to seu_dominio_aqui.com.br';
$CONF['footer_link'] = 'http: //seu_dominio_aqui.com.br';
$CONF['create_mailbox_subdirs']=array('Drafts','Spam','Sent','Trash');
$CONF['create_mailbox_subdirs_host']='localhost';
$CONF['create_mailbox_subdirs_prefix']='';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';
// $CONF['create_mailbox_subdirs_hostoptions']=array('notls');
$CONF['create_mailbox_subdirs_hostoptions']=array('novalidate-cert','norsh');
//
// END OF CONFIG FILE
//
Reinicie o
Apache e acesse a URL do Postfix Admin para rodar o "setup.php":
# service httpd restart
E acesse pelo navegador:
http://seudominio.com.br/postfixadmin/setup.php
Ou:
http://127.0.0.1/postfixadmin/setup.php
Se tudo ocorreu bem, copie o
Setup Password e crie a entrada:
$CONF['setup_password'] = ' cole o setup password aqui ';
Acima de:
$CONF['postfix_admin_url'] = '';
Crie o administrador do Postfix na página do setup.
* Atenção 1: É obrigatório que o administrador tenha um e-mail válido de qualquer domínio, hotmail.com, gmail.com, etc, etc.
* Atenção 2: Não deixe de configurar o setup_password como descrito acima.
Para criar um domínio no Postfix Admin, é necessário que seu domínio exista em algum DNS. Se for o caso, configure o BIND para o seu domínio e no
/etc/resolv.conf coloque nameserver 127.0.0.1.
Um jeito rápido de configurar o BIND, é seguindo os passos abaixo.
Instale o BIND:
# yum install bind bind-libs bind-utils -y
Abra o arquivo de configuração de zonas:
# vim /etc/named.rfc1912.zones
Insira o conteúdo abaixo:
zone "seu_dominio.com.br" IN {
type master;
file " seu_dominio.com.br";
allow-update { none; };
};
E crie o arquivo "seu_dominio.com.br" em
/var/named/, não esqueça de alterar o dono:
# chown root:named /var/named/seu_dominio.com.br
Dentro deste arquivo, insira o conteúdo:
$TTL 86400
@ IN SOA ns1.seu_dominio.com.br. root. seu_dominio.com.br. (
04 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
seu_dominio.com.br. IN NS ns1. seu_dominio.com.br.
seu_dominio.com.br. IN NS ns2. seu_dominio.com.br.
seu_dominio.com.br. IN MX 10 mail.seu_dominio.com.br.
ns1 IN A 10.0.0.178
ns2 IN A 10.0.0.179
mail IN A 10.0.0.178
Se tiver um host em Ipv6, é só seguir o exemplo abaixo, repare que são 4 A.
mail IN A AAA 2001:12ff::10
Troque os IPs e o nome do seu domínio. Não irei entrar em detalhes já que podemos encontrar vários tutoriais sobre o BIND na Internet. Faça o login na interface do Postfix Admin e crie um novo domínio e usuário de e-mail. Verifique se as limitações estão OK para você, como o número de
aliases, contas e tamanho máximo das contas.
http://127.0.0.1/postfixadmin
Postfix
Finalmente, começaremos a configurar o Postfix!
Irei fazer alguns comentários durante a configuração e vou ser honesto agora, não usei a configuração descrita para o
Amavis, como não estaria disponível para estar cuidando do filtro de spam, achei melhor sugerir uma solução paga, pois o fluxo de spam também depende muito da educação dos usuários (eles sempre acabam usando o e-mail corporativo para cadastros em sites), irei usar futuramente o Amavis em outro cliente.
Se quiser copie e cole, ou altere conforme a sua necessidade.
Configurações principais do Postfix:
# vim /etc/postfix/main.cf
# postfix config file
# uncomment for debugging if needed
#soft_bounce=yes
# postfix main
mail_owner = postfix
setgid_group = postdrop
delay_warning_time = 4
# postfix paths
html_directory = no
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
queue_directory = /var/spool/postfix
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.2.2/samples
readme_directory = /usr/share/doc/postfix-2.2.2/README_FILES
# network settings
inet_interfaces = all
mydomain = yourdomain.com
myhostname = host.yourdomain.com
mynetworks = $config_directory/mynetworks
mydestination = $myhostname, localhost.$mydomain, localhost
relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf
# mail delivery
recipient_delimiter = +
# mappings
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
transport_maps = hash:/etc/postfix/transport
#local_recipient_maps =
# virtual setup
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf,regexp:/etc/postfix/virtual_regexp
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_minimum_uid = 101
virtual_uid_maps = static:101
virtual_gid_maps = static:12 #Número do grupo mail, se for diferente de 12 troque.
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
# debugging
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id sleep 5
# authentication
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
# tls config
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache
# Change mail.example.com.* to your host name
smtpd_tls_key_file = /etc/pki/tls/private/mail.seudominio.com.br.key
smtpd_tls_cert_file = /etc/pki/tls/certs/ mail.seudominio.com.br.crt
# smtpd_tls_CAfile = /etc/pki/tls/root.crt
# rules restrictions
smtpd_client_restrictions =
smtpd_helo_restrictions =
smtpd_sender_restrictions =
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain
# Se quiser checagem via black list é só descomentar as linhas abaixo
#,reject_rbl_client zen.spamhaus.org
#,reject_rbl_client bl.spamcop.net
#,reject_rbl_client dnsbl.sorbs.net
smtpd_helo_required = yes
unknown_local_recipient_reject_code = 550
disable_vrfy_command = yes
smtpd_data_restrictions = reject_unauth_pipelining
Agora vamos para o "master.cf", caso queira que o seu server ouça na porta 587 (recomendação do CGI.br), siga os meus comentários, é só inserir essas linhas no final do arquivo.
# vim /etc/postfix/master.cf
# Aqui começa a configuração de submission - porta 587 mail message submission
# Essas linhas já existiam no master.cf original, é só descomentar
# Caso não exista adicione elas descomentadas abaixo de smtp inet n - n - - smtpd
#submission inet n - n - - smtpd
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#smtps inet n - n - - smtpd
# -o smtpd_tls_wrappermode=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#
# Configuração Dovecot LDA
# Coloque do jeito que está aqui, ou não funciona
dovecotunix-nn--pipe
flags=DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -d ${recipient}
#
# Configuração Vacation mail
# Coloque do jeito que está aqui, ou não funciona
vacation unix - n n - - pipe
flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -
${sender} -- ${recipient}