Neste post iremos aprender configurar um servidor de e-mail completo, veremos cada passo detalhadamente.
Este post surgiu devido durante muito tempo eu ter tentado criar um servidor de e-mail, e não encontrar material em português com tanta facilidade, então com essa dificuldade toda eu resolvi junta vários tutoriais em um único post.
Espero que gostem, e qualquer dúvida é só enviar um e-mail para linux@dheykson.com.br.
Mãos a obra.
1. Instalando o Postfix
Este serviço é responsável pelo serviço conhecido como SMTP.
$ sudo apt-get install -y postfix postfix-mysql
Aparecerá alguns questionamento, basta apenas selecionar as opçãoes.
- OK
- Site Internet
- linux@dheykson.com.br ( coloque aqui seu e-mail do domínio para qual você está criando seu servidor ).
$ sudo cp -p /usr/share/postfix/main.cf.debian /etc/postfix/main.cf
Estamos copiando um arquivo padrão de configuração do postfix, arquivo chamado main.cf.
2. Pacotes de Autenticação POP3/IMAP
Estes pacotes são para estabelecer conexão segura entre o cliente pop3/imap e o servidor de e-mails.
$ sudo apt-get install -y courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl
3. Pacotes de Autenticação SMTP
Já estes pacotes serão utilizados para autenticar usuários para envio de e-mails não deixando que um spammer fique enviando e-mail a partir do nosso servidor.
$ sudo apt-get install -y libsasl2-modules libsasl2-modules-sql openssl sasl2-bin libpam-mysql
4. Criando o Banco de Dados para o Postfix
4.1. Baixo o arquivo .sql abaixo para criarmos a database e as tabelas.
wget http://www.dheykson.com.br/downloads/Postfix.sql
OBS.: Não esquecer de editar o arquivo com o comando “ vim “ e trocar a senha ( SENHA ).
4.2 Vamos instalar o Mysql-server
$ sudo apt-get install -y mysql-server
4.3 Vamor importar para o myslq, o banco responsável pelos mapas do postfix.
$ mysql -uroot -p < Postfix.sql
OBS.: Digite a senha cadastrada na instalação do mysql.
5. Configurando os mapas do Postfix
Uma vez que as tabelas foram criadas, configura o postfix para realizar
o mapeamento editando cada um dos arquivos, e não esquecendo de alterar as
credenciais de acesso ao banco de dados.
$ sudo vi /etc/postfix/mysql_virtual_alias_maps.cf
user = postfix
password = SENHA(cadastrada no arquivo Postfix.sql)
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
$ sudo vi /etc/postfix/mysql_virtual_domains_maps.cf
user = postfix
password = SENHA(cadastrada no arquivo Postfix.sql)
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = ‘0′ and active = ‘1′
$ sudo vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = postfix
password = SENHA(cadastrada no arquivo Postfix.sql)
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
additional_conditions = and active = ‘1′
$ sudo vi /etc/postfix
/mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = SENHA(cadastrada no arquivo Postfix.sql)
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = ‘1′
$ sudo vi /etc/postfix/mysql_relay_domains_maps.cf
user = postfix
password = SENHA(cadastrada no arquivo Postfix.sql)
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = ‘1′
Alterar permissão dos mapas para somente root alterar e o postfix poder ler,
visto que temos credenciais de acesso ao banco nos arquivos.
$ sudo chgrp postfix /etc/postfix/mysql_*.cf
$ sudo chmod 640 /etc/postfix/mysql_*.cf
Criar usuário vmail para armazenar os e-mails de todos os vhosts, não necessitando assim uma conta no sistema para cada usuário
$ sudo groupadd -g 5000 vmail
$ sudo useradd -m -g vmail -u 5000 -d /home/vmail -s /bin/bash vmail
6. Configura o Postfix para Utilizar os Mapa
Uma vez que temos o banco de dados criados, os arquivos que fazem o mapeamento, temos que configurar no Postfix para o mesmo utilizar cada um dos mapeamentos para determinada tarefa, como segue:
$ sudo vi /etc/postfix/main.cf
# Virtual Mailbox Domain Settings
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit = 51200000
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_transport = virtual
# 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, the your maildir has overdrawn your diskspace quota,
please free up some of spaces of your mailbox try again.
virtual_overquota_bounce = yes
# TLS parameters
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
#The host name where your MX for virtual domains will point to
myhostname = mail.domain.com
mydestination = #Remains blank since we are going to host virtual domains
relayhost = #Remains blank unless you are going to use your ISP’s SMTP server mail sending out mails.
In which case it would be set to the host name of the ISP’s SMTP server
#Deixe esses parâmetros com seus valores padrão
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mynetworks = /32 127.0.0.1/32
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, permit
# modify the existing smtpd_sender_restrictions
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_pipelining, permit
# then add these
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
OBS.: Modificar para os IP’s que vão enviar e-mail o parametro , e também o mail.domain.com.
8. Autenticação de IMAP
Configuramos este arquivo para o IMAP realizar a conexão ao banco de dados para validar cada tentativa de conexão dos usuários.
Alteração para usar o módulo mysql no courier authdaemon
$ sudo vi /etc/courier/authdaemonrc
authmodulelist=”authmysql authpam”
$ sudo vi /etc/courier/authmysqlrc
————————————————————
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME postfix
MYSQL_PASSWORD SENHA(cadastrada no arquivo Postfix.sql)
MYSQL_PORT 0
MYSQL_OPT 0
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD ’5000′
MYSQL_GID_FIELD ’5000′
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD ’/home/vmail’
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD concat(quota,’S’)
OBS.: Trocar USUARIO e SENHA, no qual você configurou no dump.sql lá em cima.
Reinicie os serviços e cheque os logs:
$ sudo /etc/init.d/courier-authdaemon restart
$ sudo /etc/init.d/courier-imap restart
$ sudo /etc/init.d/courier-imap-ssl restart
$ sudo /etc/init.d/courier-pop restart
$ sudo /etc/init.d/courier-pop-ssl restart
$ sudo tail -f /var/log/mail.info
9. Autenticação de SMTP
Antes de mais nada para habilitar o saslauthd fazemos:
$ sudo vi /etc/default/saslauthd
START=yes
e verifique neste arquivo se os mecanismos estão configurados como:
MECHANISMS=”pam”
e altere a opção OPTIONS:
OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”
e então habilite o servico:
$ sudo /etc/init.d/saslauthd start
Configuramos o Postfix para o mesmo somente aceitar envio de e-mails de usuários autenticados via sasl
Cria o arquivo que diz para o Postfix como será a checagem da senha, no caso, via saslauthd
$ sudo vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
log_level: 5
Configura o módulo ’smtp’ no pam para que o sasl use este método para autenticar através do mesmo.
$ sudo vi /etc/pam.d/smtp
auth required pam_mysql.so user=postfix passwd=SENHA(cadastrada no arquivo Postfix.sql) host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=postfix passwd=SENHA(cadastrada no arquivo Postfix.sql) host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
Como estamos utilizando nosso smtp em uma jail, temos que realizar as seguintes alterações:
Crie o grupo sasl e adicione o usuário postfix ao mesmo adicionando esta linha no arquivo /etc/group
$ sudo vi /etc/group
sasl:x:45:postfix
Crie os arquivos/diretórios que ficarão dentro da jail para o postfix autenticar no sasl
$ sudo mkdir -p /var/spool/postfix/var/run/
$ sudo mv /var/run/saslauthd /var/spool/postfix/var/run/saslauthd
$ sudo ln -ns /var/spool/postfix/var/run/saslauthd /var/run/saslauthd
$ sudo cp /etc/sasldb2 /var/spool/postfix/etc/
$ sudo chgrp sasl /var/spool/postfix/etc/sasldb2
$ sudo chmod g+w /var/spool/postfix/etc/sasldb2
Reinicie os serviço e cheque o log
$ sudo /etc/init.d/courier-authdaemon restart
$ sudo /etc/init.d/saslauthd restart
$ sudo /etc/init.d/postfix restart
$ sudo tail -f /var/log/mail.info
10 Instalar o Postfixadmin
Baixe o postfixadmin na sua última versão.
$ sudo apt-get install -y apache2 php5 php5-imap php5-mysql
$sudo a2enmod php5
$sudo /etc/init.d/apache2 restart
$ wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin_2.3rc5.tar.gz
Descompacte o arquivo e copie para dentro do seu webroot
$ tar xvzf postfixadmin_2.3rc5.tar.gz
$ sudo mv postfixadmin-2.3rc5/ /var/www/postfixadmin/
Altere o arquivo de configuração para configurar o sistema de deixá-lo pronto para o setup
$ sudo vi /var/www/postfixadmin/config.inc.php
$CONF['configured'] = true;
$CONF['database_type'] = ‘mysqli’;
$CONF['database_host'] = ‘localhost’;
$CONF['database_user'] = ‘postfix’;
$CONF['database_password'] = ‘ SENHA(cadastrada no arquivo Postfix.sql) ‘;
$CONF['database_name'] = ‘postfix’;
$CONF['domain_path'] = ‘YES’;
$CONF['domain_in_mailbox'] = ‘NO’;
Acesse o setup.php em http://seudominio.com.br/postfixadmin/setup.php
Você vai criar uma senha para o setup quando em clicar em gerar a senha, ele vai lhe dar um hash:
$CONF['setup_password'] = ‘09f7acdd93b6c11b:0c68a098ba0940acec16cf36f784f7551e019852′;
Copie ele e substitua a variável abaixo no arquivo config.inc.php
$CONF['setup_password'] = ‘changeme’
Novamente acesse o setup.php em http://seudominio.com.br/postfixadmin/setup.php, informe a senha de setup que acabou de cadastrar, um e-mail válido e uma senha, este e-mail e a senha será seus dados de acesso, pois cadastrá-los, basta acessar http://seudominio.com.br/postfixadmin/ e logar.
11 Instalando o RoundCube
Agora vamos baixar e instalar o roundcube, seu webmail.
wget http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/0.3.1/roundcubemail-0.3.1.tar.gz
tar zxvf roundcubemail-0.3.1.tar.gz
mv roundcubemail-0.3.1 /var/www/webmail
chmod 777 /var/www/webmail/temp
chmod 777 /var/www/webmail/logs
Agora vamos criar o banco para o RoundCube, não esqueça de trocar a SENHA do arquivo abaixo.
wget http://www.dheykson.com.br/downloads/Roundcube.sql
Agora vamos importar o banco para o mysql.
$ sudo mysql -u root -p < Roundcube.sql
Agora vamos configurar o roundcube, copie os arquivo db.inc.php.dist e main.inc.php.distpara db.inc.php e main.inc.php
$ cp /var/www/webmail/config/db.inc.php.dist /var/www/webmail/config/db.inc.php
$ cp /var/www/webmail/config/main.inc.php.dist /var/www/webmail/config/main.inc.php
Em db.inc.php modifique as variáveis:
$rcmail_config ['db_dsnw'] = ‘mysql://roundcube:SENHA(utilizada no arquivo Roudcube.sql)@localhost/roundcubemail’;
$rcmail_config ['mail_domain'] = ‘SEU_DOMINIO’;
PRONTO, seu servidor de e-mail está configurado.
Qualquer erro por favor me envie um e-mail que lhe respondo.
Abraços até a próxima, sugestões de post envie para linux@dheykson.com.br.