Email : Protocolos de transferência Qmail: Arquitetura |
O sistema qmail consiste de alguns programas executáveis, arquivos de configuração e variáveis de ambiente UNIX. Todos estes estão relacionados uns com os outros para fornecer um serviço de email. A figura 9 mostra um diagrama de blocos das partes do qmail.
Os processos O pacote qmail necessita que cinco programas fiquem em execução em segundo plano todo o tempo. Esses programas centrais permitem ao qmail realizar a varredura das filas de email a procura de novas mensagens e manda-las para o destino próprio. Os programas de utilidade Alem dos cinco processos, existem outros utilitários do qmail que podem ser usados por seus processos ou por usuários locais para manipular e transmitir mensagens. Dentro os mais utilizados pelos usuários, é possível citar os criadores de caixa postal (maildirmake). Os arquivos de controle O próximo
bloco no diagrama são os arquivos de controle. Este arquivos
são o modo de armazenamento das configurações do
servidor. Diferente de outros pacotes de programas de email que usam
um arquivo de configuração monolítica, o qmail
usa muitos arquivos individualizados de controle, cada um definindo
uma parte do quebra cabeça. Todos os
arquivos de configuração estão localizados em um
diretório comum: /var/qmail/control/. Todos usuários tem
acesso de leitura para os arquivos deste diretório, mas somente
o administrador tem capacidade de modificar os valores destes arquivos. Os arquivo
de controle tem um valor padrão definido no sistema qmail. Se
um arquivo de controle não está presente, seu valor será
predefinido pelo qmail. Se um arquivo de controle está presente,
seus dados sobrepõe os valores padrão. Enquanto alguns
arquivos de controle podem conter um valor somente, outros são
permitidos conter uma lista de múltiplas variáveis. Dois exemplos
disso são os arquivo "virtualdomains" e "rcpthosts".
O arquivo de controle "virtualdomains" permite ao administrador
do qmail a definir os domínios aos quais o servidor qmail pode
processar a mensagem. Cada domínio virtual é definido
em uma única linha neste arquivo. O arquivo "rcpthosts"
instrui ao sistema qmail os domínios nos quais as mensagens serão
recebidas. Embora os dois sejam semelhantes e freqüentemente utilizados
juntos, estão em arquivo separados. Este é o projeto típico
do sistema qmail. Um aspecto confuso dos arquivos de controle é que, mesmo se seus valores forem fixados por entradas no arquivo de controle, eles podem ser também sobrepostos por variáveis de ambiente UNIX. As variáveis de ambiente Além
dos arquivos de controle, os programas do qmail tem capacidade para
usar as variáveis de ambiente UNIX para controlar seu comportamento.
A maioria dos valores de arquivos de controle podem ser sobrepostos
por estas variáveis. Se estas variáveis não forem
fixadas, o valor do arquivo de controle é utilizado. O processo de distribuição de emails O pacote qmail é composto de alguns programas executáveis que interagem para transferir as mensagens. A figura 10 mostra um diagrama de blocos dos programas centrais utilizados pelo qmail.
Como mostrado na figura acima, existem nove programas principais utilizados pelo qmail. Suas funcionalidades são: qmail-smtp Este programa
é responsável por receber as mensagens de email de servidores
remotos e passa-los para o programa qmail-queue para processamento.
O programa qmail-smtp recebe a mensagem utilizando o protocolo SMTP
e deve estar preparado para receber mensagens da rede a qualquer hora.
Apesar disso, este não é executado como um programa contínuo
em segundo plano. Este se utiliza de um programa de auxilio de rede
para monitorar tentativas de conexões IP. O programa inetd é
um programa UNIX comum utilizado pelo Linux e FreeBSD para monitorar
estas conexões. Quando uma tentativa de conexão é
detectada, o inetd automaticamente inicia o programa qmail-smtp e passa
o controle para conexão IP para este. Também podemos utilizar
o programa tcpserver para realizar esta tarefa. qmail-inject Este programa
é utilizado para aceitar mensagens geradas localmente e para
repassa-las para o programa qmail-queue. Muitas vezes, as mensagem são
passadas para o qmail-inject pelos MUAs do sistema UNIX, com mail, pine
e elm. qmail-send Assim que
uma mensagem for colocada com sucesso na fila do qmail, o programa qmail-send
é usado para processa-la. O programa qmail-send examina o status
de cada mensagem na fila. Mensagens que falharam em sua ultima tentativa
de envio são identificadas, e é determinado se estas possuem
status de erro temporário ou permanente quanto ao envio. Mensagens
com status de erro temporário de envio são tentadas novamente.
Mensagens com status de erro permanente são passadas para o programa
qmail-clean para remoção. Mensagens que ainda não
foram enviadas são mandadas ao envio. qmail-clean Este programa
é usado para remover mensagens não enviadas, da fila de
emails, que aparentemente falharam. O qmail usa um sistema multiestado
de identificação de mensagens na fila de emails. Cada
mensagem atravessa alguns estados enquanto é processada. Se em
algum momento, o servidor travar, o programa qmail-send poderá
detectar o ultimo estado bem sucedido da mensagem e continua-la processando.
Se o programa qmail-send é incapaz de processa-la devido a erros
no servidor ou porque a mensagem não pode ser entregue, o programa
qmail-clean é chamado para remover a mensagem da fila de emails. qmail-rspawn Este programa
é chamado pelo qmail-send quando a mensagem é destinada
a um usuário em um servidor de email remoto. O qmail-rspawn tenta
agendar a mensagem para entrega pelo programa qmail-remote, invocando
assincronamente este ultimo. qmail-remote O trabalho
do qmail-remote é entregar mensagens de email para usuários
remotos através do protocolo SMTP. As mensagens são passadas
para este programa através do qmail-rspawn descrito na seção
anterior. O programa qmail-remote só pode se conectar com somente
um servidor remoto quando é invocado. Apesar disso, este programa
pode entregar mensagens de email para múltiplos receptores no
mesmo servidor remoto ao mesmo tempo. É responsabilidade do qmail-rspawn
chamar o programa qmail-remote múltiplas vezes, dependendo dos
servidores de email de destino. Durante o processamento, o qmail-remote varre o corpo da mensagem de email para determinar se esta está no formato SMTP correto. Um único ponto no início de qualquer linha é trocado por dois pontos de acordo com as convenções normais de SMTP (Conforme explicado anteriormente, o ponto sinaliza o final da mensagem e caso isto não fosse corrigido, estaríamos introduzindo um erro na comunicação). Alem disso, todas as linhas em uma mensagem SMTP devem terminar com uma quebra de linha (CR e LF). Qualquer quebras de linhas no estilo UNIX (LF) são adicionadas de CR para ficar de acordo com o formato SMTP. qmail-lspawn Este programa é similar ao qmail-rspawn e é chamado pelo qmail-send. qmail-lspawn é responsável por agendar a entrega de mensagens quando esta for determinada para ser entregue a um usuário no servidor de email local. qmail-local Este programa é usado para entregar mensagens para o servidor de email local. O qmail-local possui algoritmos de detecção de laços na entrega de mensagens. qmail-queue O programa qmail-queue manipula as mensagens recebidas pelo qmail-inject e qmail-smtp e as move para a fila de emails para entrega. Enquanto o qmail-queue processa as mensagens, varre os endereços de recepção e envio. Caixas
Postais Existem
basicamente dois tipos de caixas postais para armazenamento de mensagem
de usuários do sistema. A primeira, chamada Mailbox (Mbox) é
o padrão UNIX de caixa postal, na qual múltiplas mensagem
são armazenadas em um único arquivo texto e as mensagens
são separadas por um linha "From" que não faz
parte do cabeçalho original da mensagem. Outro sistema é chamada de Maildir, que é basicamente composto de um diretório com três subdiretórios: new , cur e tmp. Cada mensagem é gravada em um único arquivo, e colocada nos diretórios de acordo com as seguintes regras: o diretório new é utilizado para mensagens novas e não lidas, o cur é para mensagens já lidas e o tmp para mensagens que estão sendo entregues. Uma das vantagens é que este tipo de caixa postal pode ser utilizado simultaneamente por vários agentes de email, e inclusive por NFS (Network file system), sem que haja perigo de perda de dados. Além disso, não existe risco de perdemos todas as mensagens caso uma delas fique corrupta. Dentro
das filas de mensagens O programa
qmail utiliza um método único de agrupamento em filas
das mensagens recebidas para entrega. Ao invés de criar um único
diretório de email para manipular as mensagens, conforme fazem
seus concorrentes, o qmail usa um sistema de diretórios para
indicar o estado atual das mensagens durante os processos de armazenamento
e entrega. Uma funcionalidade do qmail é sua avançada capacidade em recuperar mensagens após travamentos no servidor. Estrutura
de filas de mensagens A fila
de mensagens padrão esta localizada no diretório "/var/qmail/queue".
Abaixo deste, existem vários subdirectórios que guardam
varias partes diferentes de cada mensagem, utilizados para cada parte
do processo de fila. Cada mensagem é salva como um arquivo separado,
com seu nome igual a valor do inode (numero de identificação
do sistema de arquivo UNIX). Cada arquivo que contem cada parte da mensagem
terá o mesmo nome. A tabela abaixo mostra os diretórios.
As etapas que um mensagem atravessa até ser entregue são as seguintes: Etapa 1
- Inserção da Mensagem Etapa 2
- Armazenamento da Mensagem Etapa 3
- Extração dos Cabeçalhos Etapa 4
- Colocação na Fila e Pré-processamento Etapa 5
- Entrega da Mensagem Limpeza das Mensagens É
possível que apesar de todas estas etapas, alguma mensagem fique
encalhada, devido a travamentos, no meio do processo. Se depois de 36
horas uma mensagem continua travada, o qmail tenta apaga-la dos diretórios
intd, mess e pid, nesta ordem. |
||||||||||||||||||||||
Trabalho desenvolvido por Alan Rubin - Redes I - 2001/02 - Prof. Otto C.M.B.D. |