You are reading Usando o Postfix como MTA para domÃnios virtuais. You can leave a comment or trackback this post.
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
| « Apr | ||||||
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
Posted on August 10th, 2007 by ice.
Categories: Gentoo.
Neste artigo irei relatar minha experiência em migrar do qmail para o Postfix, então vamos começar falando sobre as razões que me levaram a fazer isso:
Muitas pessoas aqui poderiam dizer que o “qmail ja tem essa funcionalidade”, porém o foco do artigo é descrever PORQUE mudei para o Postfix, e não comparar esses dois MTAs, certamente qmail tem ótimos pontos que eu poderia esquecer, então vamos continuar.
Agora irei mostrar como instalar um sistema que gerencia muitos dominios virtuais, usuários virtuais que não requerem uma conta shell, pode autenticar clientes via web, imap, smtp e pop3 clientes, com toda a informação centralizada num único banco de dados, usando ssl como camada de transporte, e por último, instalaremos um webmail e um gerenciador web (postfixadmin)
Clique no link abaixo para visualizar o tutorial completo (Este texto é uma versão em português do meu texto Using Postfix as MTA for Virtual Hosting Domains
Antes de começarmos a instalação, seria melhor checar a sua USE flag, e se você tem outro MTA instalado no sistema. Se você deseja ter 2 ou mais MTAs instalados, você precisará da USE flag mailwrapper que irá gerenciar isto para você, ou então deve desinstalar o outro MTA que você ja tem, como sendmail ou ssmtp.
A USE flag recomendada é
USE=”apache2 authdaemond imap libwww maildir mailwrapper mysql sasl ssl vhosts”
A Base Postfix
Antes de tudo, vamos instalar o Postfix
emerge postfix
(como eu disse, esse artigo [e provavelmente este blog] é baseado no Gentoo, então você pode checar qual o pacote da sua distribuição para realizar a instalação e então efetuar a configuração)
Após o Postfix ser instalado será necessário configurar (ponto positivo, apenas um arquivo), você poderia escrever a configuração final aqui, mas eu acho que é melhor fazer passo-a-passo e enteder o que esta acontecendo para futuramente resolver algum problema ou se desejar realizar alguma alteração.
vi /etc/postfix/main.cf
myhostname = $host.domain.name
mydomain = $domain.name
inet_interfaces = all
mydestination = $myhostname, localhost
mynetworks = my.ip.net.work/24, 127.0.0.0/8
home_mailbox = .maildir/
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
smtpd_banner = $host.domain.name ESMTP $mail_name
Próximo passo é mudar o nosso smtp para ele mostrar mais erros, não esqueça que isso pode aumentar o tamanho dos seus arquivos de log mail.* rapidamente, então após o MTA estiver rodando perfeitamente, eu sugiro que você desabilite essa opção.
vi /etc/postfix/master.cf
(Apenas adicione o “-v” depois do smtpd na linha seguinte)
smtp inet n - n - - smtpd -v
Agora precisamos configurar o apelidos (aliases) para o sistema, se alguma pessoa é responsável por cada serviço no servidor você pode criar uma alias para cada, ou apenas mudar o alias do usuário root igual nós neste tutorial:
vi /etc/mail/aliases
root: seu@email
Então o passo final para colocar a base do Postfix rodando é gerar o arquivo de apelidos e iniciar o serviço:
/usr/bin/newaliases
/etc/init.d/postfix start (esta sendo usado o init.d na inicialização, pode variar na sua distribuição)
obs: É uma boa idéia testar se o Postfix esta entregando os e-mails para as caixas locais usando algum cliente de e-mail para console como mutt ou outro.
Courier-imap
Instalar ambos serviços
emerge courier-imap courier-authlib
Mude o C, ST, L, CN e email de acordo com o seu servidor para que sejam gerados os certificados corretamente.
vi /etc/courier-imap/pop3d.cnf
vi /etc/courier-imap/nano -w imapd.cnf
mkpop3dcert
mkimapdcert
(Se você tiver algum problema com o protocolo usado quando conectar usando um cliente de mail neste servidor, tente esta mudança)
vi /etc/courier-imap/imapd-ssl
TLS_PROTOCOL=TLS1
Inicializando os serviços do Curl
/etc/init.d/courier-imapd start
/etc/init.d/courier-imapd-ssl start
/etc/init.d/courier-pop3d start
/etc/init.d/courier-pop3d-ssl start
Verifique se todas as conexões estão funcionando para enviar e receber e-mail com seu cliente preferido, a autenticação não vai funcionar em nenhum dos serviços ja que ainda não foi configurada, mas você deve checar se as conexões em si funcionam ou não.
Cyrus-sasl
Instalar o cyrus-sasl. Sasl será o responsável por passar sua variáveis de autenticação pro courier-auth, que irá checá-las no mysql para autenticar os usuários de SMTP, para este tutorial não iremos tentar verificar se o SASL está funcionando até que o MySQL esteja configurado e o Postfix também.
emerge cyrus-sasl
Inicializando o sasl
vi /etc/sasl2/smtpd.conf
mech_list: PLAIN LOGIN
pwcheck_method: saslauthd
vi /etc/conf.d/saslauthd
SASLAUTHD_OPTS=”${SASLAUTH_MECH} -a rimap -r”
SASLAUTHD_OPTS=”${SASLAUTHD_OPTS} -O localhost”
Inicialize o serviço cyrus-sasl
/etc/init.d/saslauthd start
Certificados SSL Certs para o Postfix e Apache
Agora ireoms gerar os certificados para o Postfix e para o Apache.
vi /etc/ssl/openssl.cnf
countryName_default
stateOrProvinceName_default
localityName_default
0.organizationName_default
commonName_default
emailAddress_default.
(Se as variáveis não estiverem presentes, apenas adicionem num local apropriado)
cd /etc/ssl/misc
./CA.pl -newreq-nodes
./CA.pl -newca
./CA.pl -sign
cp newcert.pem /etc/postfix
cp newkey.pem /etc/postfix
cp demoCA/cacert.pem /etc/postfix
(Agora a mesma coisa pro Apache)
openssl req -new > new.cert.csr
openssl rsa -in privkey.pem -out new.cert.key
openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 365
(Apenas deixe os certificados no lugar, colocaremos no lugar certo na hora de configurar o Apache)
Adicionando suporte a SSL e SASL para o Postfix
Agora edite a configuração do Postfix para suas novas funcionalidades, adicione os parâmetros abaixo no final do arquivos para que sejam encontrados facilmente.
vi /etc/postfix/main.cf
smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/newkey.pem
smtpd_tls_cert_file = /etc/postfix/newcert.pem
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtpd_recipient_restrictions =
#reject_non_fqdn_recipient
#reject_non_fqdn_sender
reject_unknown_recipient_domain
permit_mynetworks
permit_sasl_authenticated
#check_policy_service inet:127.0.0.1:2501, needed for sqlgrey and optional
reject_unauth_destination
permit
# checagens anti-spam opcionais
#smtpd_helo_restrictions = reject_unknown_helo_hostname
#smtpd_sender_restrictions = reject_unknown_sender_domain
#smtpd_data_restrictions = reject_unauth_pipelining
(smtpd_tls_auth_only é comentado para facilitar o nosso teste no sistema, você pode habilitar isso depois)
postfix reload
Agora, verificaremos se tanto TLS quanto SASL estão com o suporte habilitado no Postfix usando o telnet (provido no pacote net-misc/netkit-telnetd), então execute o comando e cheque se eles estão:
telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 host.domain.name ESMTP Postfix
EHLO host.domain.name
250-host.domain.name
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN^]
telnet> quit
Verifique se as linhas acima AUTH e STARTTLS aparecem na saÃda acima.
O usuário vmail
Antes de configurarmos o nosso ambiente de virtual hosting, vamos criar um usuário funcional que irá guardar as caixas de e-mail do sistema
Adicionando o usuário
adduser -d /home/vmail -s /bin/false -m vmail
Banco de Dados MySQL
(Aqui supomos que você tem o mysql configurado e rodando, porque não é o objetivo desde artigo cobrir isto)
Por favor, pegue o arquivo postfix_database.sql antes de continuar o tutorial
mysql -uroot_user -proot_password < postfix_database.sql
(por favor, não esqueça de alterar a senha padrão dos usuários que irão gerenciar o banco de dados (usuário postfixadmin) na linha três e o que o postfix irá usar para acessar o banco (user: postfix) na linha 6.
O seu novo banco de dados tem as seguintes tabelas agora:
(você não precisa adicionar/alterar nada no banco ainda, postfixadmin fará isso por você).
* admin - informação sobre os admins do postfixadmin.
* alias - guarda os apelidos de e-mails do postfix e seus destinatários.
* domain - informação sobre os domÃnios virtuais que foram adicionados ao postfix.
* domain_admins - informação sobre os admins de cada domÃnios.
* log - log das transações realizadas pelo postfixadmin.
* mailbox - guarda as informações de cada caixa de e-mail do postfix.
* vacation - usada para gerenciar a auto-respota quando o usuário sai de férias.
Certificados do Apache
(Igual na seção do mysql, aqui supomos que o apache e o php estão configurados e rodando, porque não é o objetivo desde tutorial cobrir isto)
Agora vamos instalar no Apache os certificados que geramos anteriormente. As diretivas do Apache-SSL que você precisa usar são:
* SSLCertificateFile /etc/ssl/misc/newcert.pem
* SSLCertificateKeyFile /etc/ssl/misc/newkey.pem
Instalando os Certificados do Apache
cp /etc/ssl/misc/newcert.pem /etc/apache2/ssl/
cp /etc/ssl/misc/newkey.pem /etc/apache2/ssl/
cd /etc/apache2/vhosts.d
(Cheque se você tem um modelo de vhost configurado com ssl. Senão copie o vhost padrão)
cp 00_default_vhost.conf ssl-vhost.conf
vi ssl-vhost.conf
NameVirtualHost dominio.com.br:443
<VirtualHost dominio.com.br:443>
ServerName dominio.com.br
ServerAdmin voce@dominio.com.br
DocumentRoot “/var/www/localhost/htdocs/phpmyadmin”;
<Directory “/var/www/localhost/htdocs/phpmyadmin”>
…
</Directory>
SSLCertificateFile /etc/apache2/ssl/newcert.pem
SSLCertificateKeyFile /etc/apache2/ssl/newkey.pem
SSLEngine on
…
</VirtualHost>
vi /etc/conf.d/apache2
(Adicione -D SSL Ã APACHE2_OPTS)
/etc/init.d/apache2 restart
Postfixadmin
O postfixadmin é mascarado por keyword, então precisamos desmascarar fazendo:
echo “www-apps/postfixadmin ~x86″ >> /etc/portage/portage.keywords (talvez seja ~amd64 dependendo da sua arquitetura)
Uma vez feito isso, o que precisamos é fazer o emerge
emerge postfixadmin
e instalar em um vhost (localhost é usado como exemplo)
webapp-config -I -h localhost -d /postfixadmin postfixadmin 2.1.0
edite o arquivo de configuração:
vi /var/www/localhost/htdocs/postfixadmin/config.inc.php
$CONF['database_type'] = ‘mysql’;
$CONF['database_host'] = ‘localhost’;
$CONF['database_user'] = ‘postfixadmin’;
$CONF['database_password'] = ‘$DBPOST_PASS’;
$CONF['database_name'] = ‘postfix’;
$CONF['database_prefix'] = ”;
…
$CONF['domain_path'] = ‘YES’;
$CONF['domain_in_mailbox'] = ‘NO’;
Squirrelmail
Aqui será praticamente a mesma coisa que o postfix, então seremos rápidos (esse tutorial não termina!? ;))
emerge squirrelmail
webapp-config -I -h localhost -d /webmail squirrelmail 1.5.1-r6
cd /var/www/localhost/htdocs/mail/config
perl ./conf.pl
(Altere as opções Organization, Server e Folder para as suas necessidades. Agora você deve ser capaz de logar no squirrelmail, denovo - com seu e-mail completo)
postfix reload
rc-update add courier-authlib default
rc-update add courier-imapd default
rc-update add courier-pop3d default
rc-update add postfix default
rc-update add saslauthd default
Configurando Autenticação MySQL para os vhosts
Nosso postfix esta rodando, nossos métodos de autenticação estão feitos, nosso banco esta criado (sim, sem dados AINDA
), então vamos configurar os métodos de transporte para dizer ao postfix que deve obter os dados no nosso banco de dados e o courier-sasl também.
vi /etc/courier/authlib/authdaemonrc
authmodulelist=”authmysql authpam”
vi /etc/courier/authlib/authmysqlrc
#DEFAULT_DOMAIN dominio.com.br
MYSQL_CRYPT_PWFIELD password
MYSQL_DATABASE postfix
MYSQL_GID_FIELD ‘$VMAIL_GID’ # id do grupo vmail
MYSQL_HOME_FIELD ‘/home/vmail’
MYSQL_LOGIN_FIELD username
MYSQL_MAILDIR_FIELD maildir
MYSQL_NAME_FIELD name
MYSQL_OPT 0
MYSQL_PASSWORD $DBPOST_PASS # a senha configurada em postfix_database.sql para o usuário postfix.
# Descomente abaixo se você quer ativar suporte a cotas
MYSQL_QUOTA_FIELD quota
MYSQL_SERVER localhost
MYSQL_UID_FIELD ‘$VMAIL_UID’ # id do usuário vmail
MYSQL_USERNAME postfix
MYSQL_USER_TABLE mailbox
#MYSQL_WHERE_CLAUSE server=’dominio.com.br’
/etc/init.d/courier-authlib restart
/etc/init.d/saslauthd restart
Vamos criar os arquivos de transporte (isto é chato, eu sei)
Altere $DBPOST_PASS para a senha do usuário postfix criado no mysql
vi /etc/postfix/mysql_relay_domains_maps.cf
# você só deve criar este arquivo se você planeja ser o servidor backup mx para vários domÃnios
user = postfix
password = $DBPOST_PASS
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain=’%s’ AND backupmx = ‘1′ AND active = ‘1′
vi /etc/postfix/mysql_virtual_alias_maps.cf
user = postfix
password = $DBPOST_PASS
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address=’%s’ AND active = ‘1′
vi /etc/postfix/mysql_virtual_domains_maps.cf
user = postfix
password = $DBPOST_PASS
hosts = localhost
dbname = postfix
query = SELECT description FROM domain WHERE domain=’%s’ AND active = ‘1′
vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
# você só precisa deste método se for habilitar quotas para usuários
user = postfix
password = $DBPOST_PASS
hosts = localhost
dbname = postfix
query = SELECT quota FROM mailbox WHERE username=’%s’ AND active = ‘1′
vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = postfix
password = $DBPOST_PASS
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username=’%s’ AND active = ‘1′
vi /etc/postfix/mime_header_checks.regexp
/^\s*Content-(Disposition|Type).*name\s*=\s*\”?(.+\.(ad[ep]|asd|ba[st]|c[ho]m|cmd|cpl|crt|dbx|dll|exe|hlp|hta|in[fs]|isp|js|jse|lnk|md[etw]|ms[cipt]|nws|ocx|ops|pcd|pi|pif|prf|reg|scf|scr|sct|sh[bms]|uue|vb|vb[esx]|vxd|wab|ws[cfh]))\”?\s*$/ REJECT Files attached to emails that contain or end in \”\$3\” are prohibited on this server as they may contain viruses. The file named \”\$2\” was rejected.
É uma boa hora para alterar as permissões dos arquivos de transporte por razões de segurança fazendo:
chmod 640 /etc/postfix/mysql_*.cf
chgrp postfix /etc/postfix/mysql_*.cf
vi /etc/postfix/main.cf (Última vez, eu prometo ;))
#
# Métodos de transporte
#
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:$VMAIL_GID
virtual_mailbox_base = /home/vmail/
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 112400000
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = $VMAIL_UID
virtual_transport = virtual
virtual_uid_maps = static:$VMAIL_UID
Reinicie o postfix para ele ler as tabelas e usar os métodos de transporte.
postfix reload
Uffa, enfim terminamos.. Eu refiz este tutorial no meu servidor e tudo saiu bem (após alguma pesquisa como integrar tudo perfeitamente) e espero que as coisas saim bem para você também, e após ler este tutorial você possa entender o processo de instalação do postfix e realizar alteração que você desejar, não apenas “copiar e colar” comandos.
Agora que terminei este artigo o próximo passo é escrever outro como combater virus e spam no servidor de e-mail e escrever um tutorial sobre o script que eu escrevi (que é beta ainda) que tenta automatizar o processo descrito acima em um servidor gento (Você não gostaria de realizar este mesmo procedimento 10 ou 100 vezes). O script é bem útil, mas preciso melhor as checagens de error durante a instalação e eu realmente queria fazer algo parecido com um reinicio do ponto que parou no caso de falhas, então é isso e espero que tenham gostado do primeiro artigo realmente grande aqui.
Baseado no artigo: Virtual Mailhosting System with Postfix Guide
3 comments.
Pingback on August 13th, 2007.
[...] ice tech blog " Usando o Postfix como MTA para domínios virtuais [...]
Comment on April 15th, 2008.
parabéns amigo… tuto muito bem explicado, mas pra mim deu uns erros doido, nao sei se é por eu usar um parecido, pois o q usei q de outra pessoa, mas gostaria de saber se vc já criou o script para automatizar a instalação… pois passar horas e horas baixando e compilando programas tá me deixando doido hehehe. Grande abraço e parabéns novamente.
Comment on April 16th, 2008.
ola… vc poderia me enviar o script para Gentoo? Agradeço desde já
Comments can contain some xhtml. Names and emails are required (emails aren't displayed), url's are optional.