Postfix
É necessário desativar o Sendmail, mesmo que você nunca o tenha instalado procure pelos arquivos citados.
Para desativar o Sendmail renomeie os seguintes arquivos da seguinte forma:
# mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
# mv /usr/sbin/newaliases /usr/sbin/newaliases.OFF
# mv /usr/sbin/mailq /usr/sbin/mailq.OFF
Mude as permissões dos arquivos:
# chmod 755 /usr/sbin/sendmail.OFF
# chmod 755 /usr/sbin/newaliases.OFF
# chmod 755 /usr/sbin/mailq.OFF
O Postfix é composto por dois arquivos principais de configuração o master.cf e o main.cf.
O arquivo master.cf, encontrado em /etc/postfix/master.cf é o responsável por controlar o funcionamento do processo master, que por sua vez é o módulo responsável por controlar todos os outros módulos, seja abrir a porta 25 para o módulo smtpd, seja chamar o qmgr para processar a fila de e-mails. O servidor residente master é o supervisor que mantêm um olho no bem estar do sistema do correio. Este é tipicamente iniciado junto com a inicialização do sistema operacional com o comando postfix start, e mantêm-se funcionando até que o sistema seja parado. O servidor master é responsável por iniciar processos do servidor Postfix, receber e entregar as mensagens, e por reiniciar os servidores que terminam prematuramente por causa de algum problema. Também é responsável para reforçar os limites da contagem do processo do servidor como especificado no arquivo de configuração de master.cf.
O arquivo de configuração main.cf (/etc/postfix/main.cf) especifica um subconjunto muito pequeno de todos os parâmetros (mais de 280 opcões) que controlam a operação do sistema de correio do Postfix. Os parâmetros especificados não explicitamente são deixados em seus valores padrão.
O formato geral do arquivo main.cf é como segue:
Cada linha lógica está no formato "parâmetro = valor". Espaços em branco em torno do "=" são ignorados.
As linhas vazias e linhas somente com espaços em branco são ignoradas, como são as linhas cujo o primeiro caracter é um ` # ' que são linhas de comentário.
Um valor de parâmetro pode consultar outros parâmetros.
As expressões "$$name", "${name}" ou "$(name)" são substituídos recursivamente pelo valor do parâmetro nomeado.
A expressão "${name?value }" expande ao "valor" quando "$$name" não esta vazia. Este formato é suportado na versão 2.2 do Postfix e nas anteriores.
A expressão "${name:value }" expande ao "valor" quando "$$name" está vazia. Este formato é suportado na versão 2.2 do Postfix e nas anteriores.
Quando o mesmo parâmetro é definido múltiplas vezes, somente a última instância será relembrada.
A ordem de definições dos parâmetros de main.cf não importa.
Exemplo de configuração do Postfix para ser um servidor de relay enviando pelo servidor de um provedor externo.
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
smtpd_banner = $myhostname ESMTP $ mydomain
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
#Diretorio de fila
queue_directory = /var/spool/postfix
#Diretorio de armazenamento de emails
mail_spool_directory = /var/spool/mail
#Diretorio de Comandos
command_directory = /usr/sbin
#Diretorio do daemon Postfix
daemon_directory = /usr/lib/postfix
#Usuario do Postfix
mail_owner = postfix
#Hostname do servidor
myhostname = xserver.minhaempresa.com.br
#Dominio do servidor
#mydomain = minhaempresa.com.br
# Tamanho maximo da caixa de mensagem (100MB)
mailbox_size_limit = 102400000
#Tamanho maximo da mensagem (2MB)
message_size_limit = 2048000
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
#Grupo do Postfix
setgid_group = postdrop
#Servidor do Provedor Hydranet
relayhost = [200.184.136.76]
Para testar a configuração em uma máquina cliente abra um terminal Telnet acessando a porta 25.
$ telnet 192.168.100.3 25
HELO minhaempresa.com.br # digite para identificar-se ao servidor
MAIL FROM: <sistemas@minhaempresa.com.br> # indicação para quem irá enviar o email
RCPT TO: <superuser@minhaempresa.com.br> # indicação de quem esta enviando
DATA # informando que irá digitar o corpo do email
End data with <CR><LF>.<CR><LF>
# mensagem de instrução de como sair
Esta e uma mensagem de teste! # corpo da mensagem (body)
. # use "." para encerrar o corpo do email
Ok: queued as DBE2652004D
# confirmação de entrada na fila
Veja no log se a mensagem foi enviada. Utilize o seguinte comando:
# tail -f /var/log/mail.info
Se a mensagem foi enviada então o servidor esta funcionando corretamente caso negativo verifique os logs para obter mais informações sobre o que aconteceu.
1.1 Mailbox ou Maildir
Entrega por Mailbox:
Por padrão o mailbox por usuário é um arquivo no diretório de spool de mensagens do UNIX ou (/var/mail/user/ ou /var/spool/mail/user). A localização pode ser especificada com o parâmetro de configuração mail_spool_directory. Especifique um nome terminando em "/" para compatibilidade com a entrega Maildir do Qmail. Alternativamente, a Mailbox por usuário pode ser um arquivo no diretório home do usuário com um nome especificado através do parâmetro da configuração do home_mailbox. Especifique um nome relativo do caminho.
A entrega por Mailbox pode ser delegada aos transportes alternativos da mensagem especificados no arquivo master.cf. Os parâmetros de configuração mailbox_transport_maps e mailbox_transport especificam um transporte opcional de mensagem que deve ser usado para todos os receptores locais, não obstante se estão encontrados na base de dados do passwd do UNIX. Os parâmetros do fallback_transport_maps e do fallback_transport especificam um transporte opcional da mensagem para os receptores que não são encontrados nas base de dados aliases ou passwd do UNIX.
Entrega por Maildir:
Maildir é uma organização específica de um-arquivo-por-mensagem que foi introduzida com o sistema do Qmail por Daniel Bernstein. Para o Postfix trabalhar entregando no formato maildir-style especifique por exemplo no arquivo main.cf: home_mailbox = Maildir/.
Um caminho relativo que terminar em "/" passa fazer a entrega como maildir. O valor do home_mailbox é adicionado ao caminho do diretório home do usuário. O formato do maildir é suportado também com entrega através dos pseudônimos ou através dos arquivos .forward. Especificam /file/name/ como o destino. O "/" gira sobre a entrega do maildir. Não é necessário criar o diretório Maildir quando a entrega é para um usuáiro local, ou seja, não virtual. O Postfix criará este diretório quando chegar uma mensagem para o usuário no seu diretório home ficando uma estrutura como segue:
/home/user/Maildir/
/home/user/Maildir/cur
/home/user/Maildir/new
/home/user/Maildir/tmp
A mensagem entregue com sucesso fica armazenada no diretório new no formato IddeEntrega.domino.do.Postfix, por exemplo:
1138916114.V806Ib800aM308022.xserver.minhaempresa.com.br
A mensagem pode ser lida com o comando cat.
# cat /home/superuser/Maildir/new/\
1138916114.V806Ib800aM308022.xserver.minhaempresa.com.br
Cyrus IMAP
Para integrar o Postfix com o Cyrus IMAP temos que alterar os seguintes atributos no /etc/postfix/master.cf:
cyrus unix - n n - - pipe flags= user=cyrus argv=/usr/sbin/cyrdeliver -r ${sender} -m ${extension} ${user}
Comente as seguintes linhas caso existam:
#flags=R user=cyrus argv=/usr/lib/cyrus/deliver -e -m ${extension} ${user}
#flags=R user=cyrus argv=/usr/lib/cyrus/deliver -r ${sender} -m ${extension} ${user}
# Cyrus 2.1.5 (Amos Gouaux)
# cyrus unix - n n - - pipe
# user=cyrus argv=/usr/lib/cyrus/deliver -e -r ${sender} -m ${extension} ${user}
Descomente ou adicione a seguinte linha em /etc/postfix/main.cf:
mailbox_transport = cyrus
Reinicie o Postfix:
# /etc/init.d/postfix restart
Edite o arquivo /etc/imapd.conf e adicione, altere ou descomente as seguintes linhas:
configdirectory: /var/lib/cyrus
partition-default: /var/spool/cyrus/mail
admins: superuser cyrus
allowanonymouslogin: no
sieveusehomedir: false
sievedir: /var/spool/sieve
sasl_pwcheck_method: saslauthd
sasl_passwd_check: saslauthd
Mais arquivos de configuração
1. Adicione o usuário do Daemon (cyrus) ao grupo mail:
# adduser cyrus mail
2. Configure o SASL para autenticação. Edite o arquivo /etc/default/saslauthd alterando e descomentando as linhas deixando-as da seguinte maneira:
# This needs to be uncommented before saslauthd will be run automatically
START=yes
# You must specify the authentication mechanisms you wish to use.
# This defaults to "pam" for PAM support, but may also include
# "shadow" or "sasldb", like this:
# MECHANISMS="pam shadow"
MECHANISMS="sasldb"
3. Reinicie os serviços:
# /etc/init.d/inetd restart
# /etc/init.d/postfix restart
# /etc/init.d/saslauthd restart
# /etc/init.d/cyrus21 restart
Verifique nos arquivos de log as mensagens geradas para saber se existe algum erro.
# tail /var/log/syslog
# tail /var/log/messages
# tail /var/log/auth.log
# tail /var/log/mail.info
# tail /var/log/mail.err
4. Criando o arquivo sasldb com os usuários cyrus e superuser:
# saslpasswd2 -c superuser
5. Defina uma senha para os usuários cyrus e superuser
# passwd superuser
6. Testando Cyrus IMAP
# su superuser
# imtest -m login -p imap 192.168.100.3
Entre com a sua senha. Se você vir algo como:
S: C01 OK Completed
Please enter your password:
Se der uma mensagem positiva a configuração esta OK. Digite:
. logout
para sair.
7. Criando mailbox no Cyrus:
Para criar mailbox no Cyrus deve-se antes se conectar no servidor:
# cyradm --user superuser --auth login 192.168.100.3
Entre com a senha pré-definida anteriormente.
Você verá o cursor ficar definido como localhost.localdomain> o que indica que você esta conectado no servidor IMAP.
Digitando-se apenas help têm-se uma lista de comandos válidos.
Para verificar se existe alguma mailbox criada digite:
lm.
Também pode-se utilizar
lm user.*, lm user.%.
Para criar uma mailbox digite:
cm user.superuser
O usuário com o qual você acessou deve possuir permissão de criar usuário. Têm que estar definido como usuário administrador no arquivo imapd.conf, também visto anteriormente.
Para apagar uma mailbox digite:
dm user.superuser
O Cyrus IMAP armazena as mensagens no diretório /var/spool/cyrus/mail. E dentro deste diretório existe outros de "a" até "z", onde deve-se procurar a mailbox do usuário pela primeira letra do seu nome. Por exemplo a mailbox do usuário superuser esta gravada em /var/spool/cyrus/mail/a/user/superuser.
Pronto o Postfix, IMAP e o SASL estão configurados e funcionando corretamente.
OpenLDAP
Os schemas definem registros ou campos que a base de dados podem manipular. É algo similar as tabelas de banco de dados SQL, só que se chamam schemas. Alguns schemas já vêm ativados por padrão no OpenLDAP que servem para atividades gerais e básicas porém para necessidades mais especificas é necessário criar outro schema ou utilizar algum que satisfaça a necessidade especifica. Para a integração do Postfix utilizamos o schema disponibilizado com o Qmail porque o Postfix não disponibiliza um próprio.
Vá para o diretório /usr/src/.
# cd /usr/src
Baixe o código fonte do Qmail:
# wget http://cr.yp.to/software/qmail-1.03.tar.gz
Descompacte o arquivo de código fonte baixado:
# tar -xvzf qmail-1.03.tar.gz
Baixe o arquivo de patch do Qmail:
# wget http://www.nrg4u.com/qmail/qmail-ldap-1.03-20041201.patch.gz
Extraia o arquivo de patch baixado:
# gunzip qmail-ldap-1.03-20041201.patch.gz
Aplique o patch no código fonte:
# patch -d /usr/src/qmail-1.03 -p1 < qmail-ldap-1.03-20041201.patch
Mova o diretório de patch para o do código fonte:
# mv qmail-1.03 source-ldap-1.03-20041201
Copie o arquivo qmail.schema para o diretório de schemas do ldap /etc/ldap/schema.
# cp /usr/src/source-ldap-1.03-20041201/qmail.schema /etc/ldap/schema/
Edite o arquivo /etc/ldap/slapd.conf adicionando ou alterando conforme o seguinte:
Adicionando o qmail.schema:
Depois das outras linhas de include que já existem inclua uma para o schema do qmail, conforme mostrado abaixo:
# Schema and objectClass definitions
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/qmail.schema
Aqui a ordem das entradas faz diferença.
Indexando a base de dados:
Para fazer buscas mais eficientes na base de dados, podemos indexar a base com certos campos. Para isso inclua o seguinte no arquivo slapd.conf:
# Indexing options for database #1
index objectClass eq
index mail,mailAlternateAddress,uid eq,sub
index accountStatus,mailHost,deliveryMode eq
index default sub
Definindo o sufixo da base de dados:
Altere a seguinte linha para ficar parecido com o seguinte:
# The base of your directory in database #1
suffix "dc=minhaempresa,dc=com,dc=br"
Definindo o administrador da base de dados:
Logo depois da entrada do suffix adicionado acima adicione estas linhas para definir o administrador da base ldap.
rootdn "cn=superuser,dc=minhaempresa,dc=com,dc=br"
rootpw "{MD5}duRjaV84aRFe66iboPLP2w=="
A entrada em rootpw é a senha do administrador encriptada com o hash MD5. Para gerar esta saída utilize o seguinte comando:
# slappasswd -h {MD5} -s senhasecreta
Reinicie o servidor OpenLDAP:
# /etc/init.d/slapd restart
Populando a base de dados:
Agora temos que popular a base, isto é, criar alguma entrada no banco de dados. Crie um arquivo chamado initial.ldif com o conteúdo abaixo, pode cria-lo dentro do diretório /etc/ldap.
# People, minhaempresa.com.br
dn: ou=People,dc=minhaempresa,dc=com,dc=br
objectClass: top
objectClass: organizationalUnit
ou: People
description: Pessoas com contas de email na empresa.
# Groups, minhaempresa.com.br
dn: ou=Groups,dc=minhaempresa,dc=com,dc=br
objectClass: top
objectClass: organizationalUnit
ou: Groups
description: Todos os grupos da empresa.
Execute o seguinte comando:
# ldapadd -D "cn=superuser,dc=minhaempresa,dc=com,dc=br" -W -x -f initial.ldif
Entre com a senha quando solicitado e provavelmente dará uma mensagem positiva podendo continuar.
Para consultar as entradas na base execute:
# ldapsearch -x -b "dc=minhaempresa,dc=com,dc=br" '(objectclass=*)'
Criando usuários na base da dados:
Para criar um usuário de exemplo crie um outro arquivo chamado users.ldif contendo o seguinte conteúdo:
dn: uid=crochadejesus,ou=People,dc=minhaempresa,dc=com,dc=br
uid: crochadejesus
cn: crochadejesus
sn: crochadejesus
mailAlternateAddress: sistemas@minhaempresa.com.br
mail: sistemas@xserver.minhaempresa.com.br
mailHost: xserver.minhaempresa.com.br
userPassword: secretpassword
objectClass: qmailUser
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
description: Usuario
dn: uid=superuser,ou=People,dc=minhaempresa,dc=com,dc=br
uid: superuser
cn: superuser
sn: superuser
mailAlternateAddress: superuser@minhaempresa.com.br
mailAlternateAddress: postmaster@minhaempresa.com.br
mailAlternateAddress: root@minhaempresa.com.br
mail: superuser@xserver.minhaempresa.com.br
mailHost: xserver.minhaempresa.com.br
userPassword: secret
objectClass: qmailUser
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
description: Administrador do Cyrus
Adicione-o a base como anteriormente:
# ldapadd -D "cn=superuser,dc=minhaempresa,dc=com,dc=br" -W -x -f /etc/ldap/users.ldif
Integrando o Postfix com o LDAP:
Abra o arquivo /etc/postfix/main.cf acrescentando as seguintes linhas:
# Integracao com OpenLDAP
virtual_maps = ldap:ldapsource
ldapsource_server_host = localhost
ldapsource_domain = minhaempresa.com.br
ldapsource_search_base = dc=minhaempresa,dc=com,dc=br
ldapsource_query_filter = (&(mail=%s)(objectClass=qmailUser))
ldapsource_result_attribute = mail
ldapsource_bind = no
Integrando o Cyrus IMAP com o LDAP:
Crie a configuração para o saslauthd saber como se conectar no LDAP.
Crie um arquivo chamado saslauthd.conf dentro do diretório /etc/ com o seguinte conteúdo (/etc/saslauthd.conf):
ldap_servers: ldap://127.0.0.1/
ldap_version: 3
ldap_timeout: 10
ldap_time_limit: 10
ldap_cache_ttl: 30
ldap_cache_mem: 32768
ldap_scope: sub
ldap_base_dn: dc=minhaempresa,dc=com,dc=br
ldap_search_base: ou=People,dc=minhaempresa,dc=com,dc=br
ldap_auth_method: bind
ldap_filter: (uid=%u)
Agora configure o saslauthd para usar LDAP como autenticador modificando o arquivo /etc/default/saslauthd:
MECHANISMS="ldap"
PARAMS="-O /etc/saslauthd.conf"
Pode-se especificar mais de um modo de autenticação separando-os com espaço no parâmetro MECHANISMS por exemplo:
MECHANISMS="ldap pam"
A entrada PARAMS= indica o caminho do arquivo de configuração.
Reinicie o saslauthd:
# /etc/init.d/saslauthd restart
Edite o arquivo /etc/imapd.conf alterando as entradas para os seguintes valores:
sasl_mech_list: PLAIN
allowapop: no
allowplaintext: yes
sasl_minimum_layer: 0
sasl_pwcheck_method: saslauthd
Comente a linha:
#sasl_passwd_check: saslauthd
Reinicie o servidor cyrus:
# /etc/init.d/cyrus21 restart
Para testar use o comando abaixo:
# testsaslauthd -u crochadejesus -p secretpassword
Se vir uma mensagem de 0: OK "Success." quer dizer que esta tudo certo com a configuração e o Cyrus SASL esta buscando as informações de usuário na base LDAP.
Pronto! Esta preparada a base para o workgroup.