
A ideia primaria do Postfix era produzir um substituto para o Sendmail, que fosse rapido, facil de administrar e seguro. Trata-se de um projeto Open Source bancado pela IBM, criado e mantido por Wietse Venema.
Uma instalacao padrao do Postfix pode substituir facilmente o famigerado Sendmail sem alteracoes significativas no sistema, e transparentemente para o usuario final. As bases de usuarios e bases de correio sao as mesmas (por default).
Os arquivos de configuracao sao simples e objetivos, preparados para que as variaves e opcoes de configuracoes sejam bastante intuitivas e faceis de entender.
E, a melhor parte de tudo, sem a "agradavel" surpresa do "Bug do Mes" que o nosso amigo mais antigo sempre nos trazia.
Autor e colaboradores
O autor deste software eh Wietse Venema, Ph.D. em Fisica pela Groningen University na Holanda. Ha diversos colaboradores que enviam "patches" e outras contribuicoes para a lista de discussao. Em especial, Viktor Duchovni e Ralf Hildebrandt se destacam nas contribuicoes para o desenvolvimento do Postfix.
Licenciamento
Um dos pontos que talvez mais contribua para a nao-adocao do Postfix como servidor de email padrao eh a licenca um tanto quanto confusa que a IBM usa - "IBM PUBLIC LICENSE VERSION 1.0 - SECURE MAILER"
Trata-se de uma versao modificada da licenca BSD. Para se protegerem de possiveis processos (como a palhacada da SCO; afinal, a IBM tem grana), a IBM adicionou clausulas quanto a distribuicao em forma binaria e "patcheada" do Postfix. Ha clausulas que dizem que quem distribui versoes pre-compiladas ou patcheadas (como o Debian, por exemplo, que aplica patches no Makefile e algumas partes do codigo) se torna automaticamente um "parceiro legal" da IBM no caso de um eventual processo. No caso do Postfix ser uma parte independente ou adicional do sistema, essas clausulas nao se aplicam.
Um exemplo bastante direto disso eh a nao-inclusao do Postfix no OpenBSD. Uma vez que ha patches no Makefile e adicao de alguns scripts de inicializacao proprios do OpenBSD para compilacao nos "ports", eles preferem nao inclui-lo.
Como funciona
Basicamente, a arquitetura interna do sistema funciona sem um conceito muito rigido sobre processos "pai-filho", mas com a ideia de processos cooperativos. Basicamente, as tarefas que o Postfix roda sao independentes, e proveem servicos umas as outras (por exemplo, ha uma tarefa que prove reescrita/traducao de enderecos para todos os outros processos do Postfix).
Ha um processo principal (o "master"), que nao faz nada a nao ser administrar os outros daemons do Postfix: carregar o "smtpd" quando ha necessidade de atender a porta SMTP, manter o "trivial-rewrite" rodando para fazer a manipulacao dos enderecos de correio, chamar o "qmgr" para gerenciar a fila de emails ainda nao entregues, chamar o "pickup" que pega novas mensagens e as joga na fila para entrega, etc.
O "master" tambem se encarrega de manter uma especie de cache dos daemons que ja foram iniciados, reutilizando processos ou removendo-os depois de um tempo especifico em ociosidade. Isso diminui bastante o tempo e esforco despendido na maneira mais tradicional, chamando o processo e removendo-o logo que este acabe sua tarefa. Ha sempre um tempo que leva pra carrega um processo e todas as suas bibliotecas do disco, alocar memoria, etc. Da maneira como o "master" gerencia isso, esse tempo eh praticamente nulo, uma vez que o processo ja esta no ar; ao mesmo tempo, o "master" mantem o sistema sob controle, nao deixando processos inuteis ocupando recursos da maquina.
O "master" eh o unico processo que tem privilegios de root, uma vez que apenas o root tem poderes para mudar de usuario (pra chamar um agente de entrega que roda como o usuario XYZ, por exemplo), ou para ouvir a porta 25 (na maioria dos sistemas, portas abaixo de 1024 sao privilegiadas, e apenas o root pode ouvi-las).
Eh interessante notar que o processo "master" nao tem contato direto com nenhum outro processo ou com o mundo exterior; seu unico objetivo eh descartar privilegios e chamar o processo necessario, ja em um ambiente desprivilegiado.
Permissoes / Usuarios / Seguranca
Todos os subprocessos internos do Postfix rodam sobre as permissoes do usuario "postfix" e grupo "postdrop" (pode ser modificado no arquivo de configuracao /etc/postfix/main.cf).
O grupo "postdrop" existe para fazer a separacao de privilegios e permitir que outros processos alem dos internos do Postfix possam injetar emails na fila. O diretorio /var/spool/postfix/maildrop permite que o grupo "postdrop" escreva la (mas nao permite que ele leia, garantindo a privacidade dos emails), e o programa que injeta os emails la (/usr/sbin/postdrop) possui flags setgid para o grupo "postdrop". Eh interessante notar que Postfix se recusa a funcionar se o usuario privilegiado "postfix" fizer parte do grupo "postdrop".
Um outro ponto a favor da seguranca com Postfix eh a facilidade de colocar partes dele (ou o Postfix inteiro) dentro de um ambiente chroot. Basta mudar um flag no arquivo de configuracao, e o processo ja sera iniciado fechado dentro do diretorio de spool. (Nota - "chroot" seria como "enjaular" um processo dentro de um diretorio, impedindo que ele acesse quaisquer arquivos fora dele)
Note tambem que, a despeito de todas as permissoes, os subprocessos do Postfix nao confiam nos dados que recebem ou na estrutura das mensagens na fila; isso quer dizer que ha uma verificacao da integridade/correcao da mensagem e das informacoes internas que o Postfix usa antes de manusear a mensagem. Isso torna o sistema mais estavel e previne de forma bastante efetiva contra crashes e buffer overflows por arquivos corrompidos no disco ou submetidos por usuarios maliciosos.
Seguem abaixo as permissoes do diretorio de spool e tambem do injetor de emails:
drwx------ 18 postfix root 4096 Jul 4 2003 active/ drwx------ 18 postfix root 4096 Jul 19 2003 bounce/ drwx------ 2 postfix root 4096 Jul 3 2003 corrupt/ drwx------ 18 postfix root 4096 Aug 13 2003 defer/ drwx------ 18 postfix root 4096 Aug 13 2003 deferred/ drwx------ 6 postfix root 4096 Nov 11 05:57 flush/ drwx------ 2 postfix root 4096 Jul 3 2003 hold/ drwx------ 18 postfix root 4096 Apr 6 08:23 incoming/ drwx-wx--- 2 postfix postdrop 200704 Apr 6 08:23 maildrop/ drwxr-xr-x 2 root root 4096 Nov 21 16:09 pid/ drwx------ 2 postfix root 4096 Apr 6 17:02 private/ drwx--x--- 2 postfix postdrop 4096 Apr 6 17:02 public/ drwx------ 2 postfix root 4096 Jul 4 2003 saved/ -rwxr-sr-x 1 root postdrop 723708 Sep 22 2003 /usr/sbin/postdrop
PDF de como configurar um Postfixhttp://www.mediafire.com/view/?5ad969o4unubh08