BOMBOLOM.COM

(correio) Servidor de Mail SuSE - Postfix + Amavis + Cyrus

Introdução

Neste documento descreve-se, passo a apasso a instalação e manutenção de um servidor de mail Postfix utilizando o Amavis como mecânismo para detecção de virus e o Cyrus como servidor IMAP utilizando o SuSE 10.0.

Muitas das operações devem ser feitas como root, mas há outras que podem, e devem, ser feitas como um utilizador normal, neste documento utiliza-se o utilizador sysadm, naturalmente que se pode usar qualquer outro utilizador sem ser o sysadm. Eu costumo utilizar este utilizador em servidores onde não tenho uma conta pessoal.

Clique em "Ler mais" para ver o resto deste documento.

Configuração do Postfix

O software que vamos utilizar é:

Existem várias modalidades de autenticação dos utilizadores junto do servidor. Neste documento ilustram-se o método para utilização autenticação em plain text, esta autenticação faz-se contra as contas do próprio sistema e obriga a que cada caixa postal tenha um utilizador criado no sistema.

Eu utilizo este método quando o servidor de mail também é utilizado como servidor de ficheiros onde também se faz a autenticação recorrendo aos serviços do sistema. Há muitas ferramentas para gerir os utilizadores do sistema, no SuSE podemos utilizar o próprio YaST.

Notar que podemos, em configurações mais complexas, autenticar-nos contra um servidor de LDAP, unificando-se desta forma toda a autenticação num só serviço ou então usar as funcinalidades do Cyrus para nos autenticarmos contra o ficheiro /etc/sasldb2, ou ainda armazenar a informação de autenticação numa base de dados.

Instalação

Verificar se temos instalados os pacotes necessários e instalar com o YaST:

NOTAS:

Configuração inicial do postfix

Utilizar o Yast para fazer as configurações básicas:

Escolher a opção: Network Services --> Mail Transfer Agent (no YaST)

  1. General Settings:
    Connection type
    Permanent
    (x) Enable virus scanning (AMaViS)
    Escolher esta opção
  2. Outgoing mail server:
    Outgoing mail server
    Deixar em branco se não se utilizar um relay externo ou então preencher os campos necessários.
    Masquerading
    Por príncipio não vai ser necessário
    Authentication
    Só se se utilizar um relay externo que exija autenticação.
  3. Incoming Mail
    Accept remote SMTP connections
    Escolher apenas se recebermos mail directamente para o nosso domínio;
    Open Port in Firewall [Firewall Details]
    Abrir a porta na firewall e escolher apenas as interfaces internas se não recebermos mail directamente para o domínio, se recebermos deveremos escolher tb a interface externa.
    Forward root's mail to
    sysadm (utilizador já criado para tarefas administrativas);
    Delivery Mode
    To Cyrus IMAP Server
    [Aliases...][Virtual domains...]
    não se configura nada.

Escolher Finish.

É também necessário acrescentar o utilizador "postfix" ao grupo "mail".

Iniciar serviços

Iniciar os serviços que estão ainda inactivos:

# rcspamd start
# rcclamd start
# rcfreshclam start
# rcsaslauthd start

Update das assinaturas do anti-virus

Fazer o download das definições do anti-virus. Como root:

# freshclam

Se aparecer a seguinte mensagem:

WARNING: Your ClamAV installation is OUTDATED!
WARNING: Local version: 0.86.2 Recommended version: 0.87.1
DON'T PANIC! Read http://www.clamav.net/faq.html

Ignorar, quando fizermos o online update, faz-se também o update do ClamAV, se estiver disponível um update. Por vezes a SuSE leva algum tempo a fazer updates ao motor do anti-virus, notar que isto é diferente das assinaturas dos virus e geralmente não é crítico.

Registo dos serviços

Registar para inicio a quando do boot dos serviços necessários:

# chkconfig postfix on
# chkconfig amavis on
# chkconfig clamd on
# chkconfig freshclam on
# chkconfig spamd on
# chkconfig saslauthd on

Update do sistema

Fazer o update online do sistema. Se se fizer update da kernel, realizar um reboot a seguir:

# yast online_update

NOTAS:

Password do user cyrus

Mudar a password do utilizador "cyrus":

# passwd cyrus

Config do amavis

Editar o ficheiro "amavisd.conf":

Mudar as linhas:

$mydomain = 'DOMINIO QUE A MÁQUINA SERVE';
$max_servers = 10
$QUARANTINEDIR = '/arquivo/virusmails';

Procurar ClamAV e tirar o comentário a:

['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "127.0.0.1:3310"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

Criar e mudar as permissões de /arquivo/virusmails:

# cd /arquivo
# mkdir virusmails
# chown vscan:vscan virusmails
# chmod o-rwx virusmails

Re-iniciar o Amavis:

# rcamavis restart

Pode-se verificar se a configuração está boa consultando o log:

/var/log/mail

Configuração do Cyrus

Fundamentalmente o que vamos fazer é editar as directorias onde se guardam os mails (serviço POP3 está ligado por omissão).

Primeiro fazer backup do ficheiro:

# cp /etc/imapd.conf /etc/imapd.conf.org

Editar o ficheiro /etc/imapd.conf:

configdirectory: /arquivo/mail/config
partition-default: /arquivo/mail/spool
sievedir: /arquivo/mail/sieve
admins: cyrus
allowanonymouslogin: no
autocreatequota: -1
reject8bit: no
quotawarn: 90
timeout: 30
poptimeout: 10
dracinterval: 0
drachost: localhost
sasl_pwcheck_method: saslauthd
allowplaintext: 1
allowplainwithouttls: 1
lmtp_overquota_perm_failure: no
lmtp_downcase_rcpt: yes

NOTA IMPORTANTE

Criar as directorias seguintes:

# mkdir -p /arquivo/mail
# cd /arquivo/mail
# mkdir config spool sieve
# cd /arquivo
# chmod -R o-rwx mail
# chown -R cyrus:mail mail

Copiar o conteúdo das directorias originais:

# cd /var/lib/imap
# tar -cf - . | ( cd /arquivo/mail/config; tar -xvf - )
# cd /var/lib/sieve
# tar -cf - . | ( cd /arquivo/mail/sieve; tar -xvf - )

Reiniciar o cyrus:

# rccyrus restart

Ajustes na configuração do Postfix:

Editar o ficheiro /etc/postfix/main.cf e acrescentar a linha:

local_recipient_maps =
mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
content_filter=smtp:[127.0.0.1]:10024

Podem-se saber para que serve cada linha da configuração consultando:

$ man 5 postconf

No mesmo ficheiro mudar o tamanho máximo das mensagens para 10MB:

message_size_limit = 10240000

O postfix, por omissão vem configurado para utilização doméstica, é necessário ajustar alguns parâmetros extra de modo a garantir o bom funcionamento do sistema quando sujeito a cargas grandes. Em /etc/postfix/main.cf acrescentar a linha:

default_process_limit = 200

E em /etc/postfix/master.cf garantir que o número máximo de processos é utilizado:

smtp inet n - n - - smtpd -o [etc ...]

Por omissão apenas são utilizados 2 processos.

A menos que se queira receber correio directamente da Internet não é necessário fazer mais modificações a estas configurações.

Recomeçar o postfix:

# rcpostfix restart

Configurar o postfix para fazer o relay autenticado

Para utilizarmos relays autenticados é necessário utilizar a seguinte configuração em /etc/postfix/main.cf:

relayhost = <nome do servidor relay>
smtp_sasl_mechanism_filter = login
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
broken_sasl_auth_clients = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_use_tls = yes
smtp_discard_ehlo_keywords = 8bitmime

Notar que nem todas as configurações são necessárias. Neste caso tinha um servidor que exigia que utilizá-se o método de autenticação LOGIN, encriptado por TLS. Além disso tratava-se de um servidor exchange que erradamente anunciava puder tratar mensagens codificadas com 8bit mime, mas que na realidade apenas aceita 7bit! (Netcabo, naturalmente.) Assim foi necessário forçar o servidor a ignorar a indicação 8bitmime.

Depois de terem sido feitas estas alterações é necessário criar o ficheiro /etc/postfix/sasl_passwd, este ficheiro contém a informação de autenticação junto do servidor relay. Deve obedecer à seguinte sintaxe:

<nome do servidor relay> <username>:<password>

Uma vez criado o ficheiro deve-se correr o comando postconf:

# postmap hash:/etc/postfix/sasl_passwd

Finalmente, basta recarregar as configurações do servidor postfix:

# rcpostfix reload

Consola do Cyrus

Verificar se conseguimos entrar na consola do cyrus:

$ cyradm --user cyrus localhost

Notar que no SuSE 10.0 tenho um comportamento que ainda não consegui entender completamente, é-me pedida duas vezes a password do utilizador Cyrus. Se alguém descobrir o porquê disso por favor avisem-me.

Para sair da consola do cyrus faça Ctrl-D.

Editar a tabela de aliases:

O mais importante é passar as mensagens do utilizador "virusalert" para um user com mailbox válida se não o fez já a quando da configuração inicial do postfix com o yast, pode por exemplo, editar /etc/aliases e inscrever simplesmente:

root: sysadm

Como o mail de virusalert é redireccionado para root, o utilizador sysadm vai receber o conteúdo de ambas as contas. Depois de editar o ficheiro fazer:

# newaliases

Testar o transporte de mail local

Só pode fazer este teste depois de criar o utilizador de mail, veja primeiro a secção "Gestão de Utilizadores".

Para isso criar um user e enviar-lhe um mail:

# mail sysadm@localhost

Pode-se observer em /var/log/mail a actividade:

D4FFB899: uid=1001 from=<sysadm>
D4FFB899: message-id=<43B17731.mailHGX1U2CVL@example.com>
D4FFB899: from=<sysadm@example.com>, size=471, nrcpt=1 (queue active)
D4FFB899: to=<sysadm@localhost.example.com>,
orig_to=<sysadm@localhost>,
relay=/var/lib/imap/socket/lmtp[/var/lib/imap/socket/lmtp],
delay=0,
status=sent (250 2.1.5 Ok)
D4FFB899: removed

Pode-se acessar à directoria do utilizador e verificar as próprias mensagens:

# cd /arquivo/mail/spool/user/sysadm
# ll
-rw------- 1 cyrus mail 673 Dec 27 15:16 1.
-rw------- 1 cyrus mail 2556 Dec 27 15:17 cyrus.cache
-rw------- 1 cyrus mail 152 Dec 27 14:32 cyrus.header
-rw------- 1 cyrus mail 256 Dec 27 15:17 cyrus.index

O ficheiro "1." contém a mensagem enviada.

Testar a detecção de Virus

Fazer:

# cd /usr/share/doc/packages/amavisd-new/test-messages
# sendmail -i sysadm@localhost < sample-virus-simple.txt
# sendmail -i sysadm@localhost < sample-virus-nested.txt
# sendmail -i sysadm@localhost < sample-nonspam.txt
# sendmail -i sysadm@localhost < sample-spam-GTUBE-junk.txt
# sendmail -i sysadm@localhost < sample-spam-GTUBE-nojunk.txt
# sendmail -i sysadm@localhost < sample-42-mail-bomb.txt

O log do mail (/var/log/mail) deve mostrar mensagens do género:

671178A3: uid=0 from=<root>
671178A3: message-id=<20051227175600.671178A3@example.com>
671178A3: from=<root@example.com>, size=430, nrcpt=1 (queue active)
7D6CB8A4: client=localhost[127.0.0.1]
7D6CB8A4: message-id=<VAEDESvajLP17D@ceara2>
7D6CB8A4: from=<virusalert@example.com>, size=1615, nrcpt=1 (queue active)
/smtpd[23163]: disconnect from localhost[127.0.0.1]
Blocked INFECTED (Eicar-Test-Signature), <> ->
etc...

Conclusão

Falta agora configurar a obtenção de mails a partir de servidores externos. Na secção seguinte trata-se desse assunto.

Gestão de utilizadores

Acrescentar um utilizador

Para acrescentar um utilizador ao sistema há dois passos a executar: (i) criar o utilizador utilizando as ferramentas do sistema; (ii) criar a mailbox do utilizador utilizando a consola do Cyrus.

Adicionar um utilizador ao sistema utilizando o YaST. (Esta parte é simples o suficiente, pelo que não a descrevo);

Uma vez criado o utilizador é necessário entrar na consola do Cyrus como indicado anteriormente. Uma vez lá dentro fazer:

localhost> createmailbox user.teste001
localhost> <Ctrl-D>

Verificar se o utilizador foi gerado correctamente

Pode-se verificar a criação do utilizador de várias formas, se usarmos autenticação plain text, deve-se verificar o fim do ficheiro ?/etc/passwd?:

# tail /etc/passwd
ma_03$:x:19418:100::/dev/null:/bin/false
vscan:x:65:103:Vscan account:/var/spool/amavis:/bin/false
cyrus:x:96:12:User for cyrus-imapd:/usr/lib/cyrus:/bin/bash
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
ldap:x:76:70:User for OpenLDAP:/var/lib/ldap:/bin/bash
anonimo:x:19419:100::/dev/null:/bin/false
named:x:44:44:Name server daemon:/var/lib/named:/bin/false
teste001:x:19420:100::/dev/null:/bin/false

A ultima linha, indica que o utilizador "teste001" foi criado com sucesso. Este é o utilizador do sistema.

Notar que se alterou a "home directory" deste utilizador para /dev/null e a sua shel para /bin/false. Isto faz-se normalmente, quando o utilizador não necessita de ter acesso a uma shell no sistema, por exemplo se esse utilizador for apenas utilizador de mail ou se tiver uma conta Samba no sistema.

Agora deve-se verificar se a caixa de correio respectiva foi criada correctamente. Para isso deve-se entrar na consola de administração de mail:

$ cyradm --user cyrus localhost
IMAP Password: XXXXXXXXXXX
localhost>

Dentro da consola só temos de verificar se existe a caixa postal do respectivo utilizador:

localhost> lm user.t*
user.teste001 (\HasNoChildren)

Se aparecer qualquer coisa como o que se mostra na linha anterior, o utilizador foi criado correctamente e podemos proceder ao teste da caixa postal, utilizando o protocolo POP3 ou IMAP. Por exemplo usando o POP3:

$ telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK example.com Cyrus POP3 v2.2.12 server ready <993402082.1128961260@example.com>
USER teste001
+OK Name is a valid mailbox
PASS as9789#$7dd
+OK Mailbox locked and ready
LIST
+OK scan listing follows
.
QUIT

As mensagens indicam que o sistema POP3 funcionou correctamente.

Naturalmente que muitas vezes podemos testar directamente nas máquinas do utilizadores o funcionamento do sistema.

Mudar as passwords

Basta usar directamente as ferramentas do sistema para mudar a password, por exemplo:

# passwd <nome do utilizador>

Configuração das máquinas dos utilizadores

Basta configurar com os seguintes dados:

Protocolo: IMAP ou POP;

Nome de utilizador: O nome de sistema utilizado para criar o utilizador;

Obter mails de um servidor externo

Para descarregar os emails do servidor externo, é necessário utilizar o software "fetchmail" e editar a sua configuração em "/etc/fetchmailrc".

Se tivermos três contas de correio num servidor externo, o ficheiro de configuração é da forma:

poll "example.com" protocol POP3
user "cvitae@example.com" there with password "XXXX" is "maria" here
user "info@example.com" there with password "XXXX" is "bruno" here
user "reservas@example.com" there with password "XXXX" is "comercial" here;

Notas:

Uma vez alterado o ficheiro de configuração do fecthmail é necessário recomeçar o serviço, para tal fazer como root:

# rcfetchmail restart

Para verificar se há algum problema com a obtenção dos mails do servidor central fazer:

# rcfetchmail stop
# fetchmail -f /etc/fetchmailrc

Esta sequência de comandos inicia o fetchmail sem entrar em "modo de serviço" pelo que podemos ver o output directamente. Também se pode ver o que está a acontecer nos ficheiros de log, o nome do ficheiro de log onde são registados os acontecimentos relativos ao fetchmail variam de sistema para sistema, no SuSE temos:

Para recomeçar o serviço fazer:

# rcfetchmail start

Manutenção do servidor de SMTP

Num sistema bem configurado o servidor de SMTP (Simple Mail Transfer Protocol) tem pouca ou nenhuma manutenção associada, podem, no entanto, surgir situações em que a acção do administrador de sistemas é necessária.

Tarefas de rotina

Verificação dos parâmetros gerais do sistema

Deve-se verificar rotineiramente o bom funcionamento do sistema. Deve-se começar por verificar a carga do sistema com o comanto top:

$ top
top - 12:23:35 up 2 days, 17:44, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 43 total, 2 running, 41 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0% us, 0.0% sy, 0.0% ni, 100.0% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 452140k total, 329640k used, 122500k free, 125780k buffers
Swap: 524152k total, 0k used, 524152k free, 135996k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 16 0 2636 532 1316 S 0.0 0.1 0:05.40 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0

Para um sistema com 50 utilizadores o load average deve ser baixo, ou seja menor que 1.00. Verificar também se existem processos zombie, que a existirem indicam problemas graves a nível de sistema. A seguir deve-se verificar a utilização de memória, especialmente swap. Se a utilização de swap se aproxima do tamanho total (neste caso 512MB) então há qualquer coisa de errado com o sistema. Neste caso temos de analizar os logs e determinar quais os processos que estão a utilizar toda a memória. Para isso utiliza-se o comando ps -eF.

A verificação da utilização do disco faz-se com o comando df -h:

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 11G 7.5G 2.6G 75% /
tmpfs 1013M 32K 1013M 1% /dev/shm
/dev/sda1 134M 43M 91M 32% /boot
/dev/sda7 17G 16G 882M 95% /backup
/dev/sda6 1.1G 36M 993M 4% /tmp
/dev/sda3 5.1G 2.3G 2.9G 45% /var
/dev/hda2 142G 101G 42G 71% /arquivo

Verificar sempre a utilização das partições /var e /tmp se estas encherem podemos vir a ter problemas. Neste caso também temos de nos preocupar com a directoria /arquivo dado que é onde armazenamos os nossos mails.

Verificação das listas de saída de mail

O comando a utilizar para verificar as listas de saída de mail é:

$ mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
27D5129DA22 10796 Mon Aug 8 08:03:22 eliane.radnai@example.com
(host smtp.example.com.br[200.217.169.82] said: 450 <reserva@example.com.br>: Recipient address rejected: User unknown in local recipient table (in reply to RCPT TO command))
reserva@example.com.br

-- 10 Kbytes in 1 Requests.

O servidor de SMTP tenta enviar as mensagens várias vezes (se não obtiver um erro fatal ao enviar a mensagem) assim muitas vezes temos a nossa largura de banda ocupada pelo servidor de mail que tenta enviar mensagens impossíveis de serem recebidas pelos outros servidores de mail. Um exemplo clássico é o do utilizador que envia um attachment com 500MB. Estas mensagens devem ser apagadas da lista de saída. Para tal devemos fazer o seguinte:

Login como root:

$ su -
Password:
[root@sl01 root]#

Usar o comando mailq como indicado para obter o código da mensagem, no caso da listagem anterior é 27D5129DA22 e usar o comando seguinte para apagar a mensagem:

# postsuper -d 27D5129DA22

Códigos de erro do SMTP

Os códigos de SMTP são:

Estes códigos bem como o funcionamento do protocolo SMTP são definidos pelo RFC 2821 disponível em: http://www.rfc-editor.org.

Como obter mais informação

Os manuais de todos os comandos utilizados podem (e devem) ser consultados fazendo man <nome do comando> como um utilizador normal e claro, há sempre o google.com.

24.07.2006 | Ler mais | Comentários | Tags , , , , , ,

Voltar à Página principal | Made with PyBlosxom