fastforward é um conjunto de programas que permitem ao qmail, utilizar-se de arquivos de aliases/forwards (/etc/aliases) e arquivos de tabela de domínios virtuais criados especificamente para o programa sendmail.
fastforward [ -nNpPdD ] cdb
Encaminha cada mensagem recebida, seguindo instruções contidas em cdb, criado previamente por setforward.
fastforward é geralmente utilizado dentro do arquivo de alias ~alias/.qmail-default, mas pode ser utilizado também em outros arquivos padrão dot-qmail.
Arquivos do tipo ~alias/.qmail-recipiente tem precedência sobre ~alias/.qmail-default.
Se não existir instruções de forward para o destinatário do e-mail no arquivo cdb, fastforward rejeita a mensagem e a devolve ao seu remetente.
Nota de segurança:
Se cdb incluir instruções para uma lista de e-mails controlada por outro usuário, este usuário ganhará algumas permissões de fastforward para executar tarefas com as permissões do usuário original. Isso permite que este usuário force o acesso a arquivos que somente o usuário original teria.
Opção | Descrição |
|---|---|
-n | Não faz forward da mensagem, apenas imprime instruções que serão seguidas no momento da entrega. |
-N | Encaminha a mensagem conforme instruções contidas em cdb (Padrão). |
-p | Se fastforward não localizar instruções para o recipiente da mensagem em cdb, sai com código de erro 0 (zero), fazendo com que as próxima instruções do arquivo .qmail-default sejam executadas normalmente. Se fastforward localizar instruções para o recipiente da mensagem em cdb, encaminha a mensagem e sai com código de erro 99, fazendo com que as próximas instruções do arquivo .qmail-default sejam ignoradas. |
-P | Se fastforward localizar instruções para o recipiente da mensagem em cdb, encaminha a mensagem e sai com código de erro 0 (zero), caso contrário, rejeita e mensagem e devolve ao seu rementente (Padrão). |
-d | Utiliza $DEFAULT@$HOST como endereço de recipiente ou $EXT@$HOST se $DEFAULT não estiver setado. |
-D | Utiliza $RECIPIENT como endereço de recipiente (Padrão). |
Lê uma tabela de aliases a partir do arquivo /etc/aliases, e converte em uma base de dados cdb (/etc/aliases.cdb) para ser utilizada pelo programa fastforward; newaliases é um clone do programa newaliases do sendmail.
Por segurança, newliases converte a tabela de aliases para /etc/aliases.tmp e somente depois move /etc/aliases.tmp para /etc/aliases.cdb.
Caso ocorra um problema na gravação do arquivo /etc/aliases.tmp, newaliases não tenta mover /etc/aliases.tmp para /etc/aliases.cdb, preservando o conteúdo anterior do arquivo inalterado e sem prejudicar entregas que estão acontecendo no momento.
newaliases sempre cria o arquivo /etc/aliases.cdb com permissão de leitura para todos os usuários do sistema.
newaliases não tenta proteger /etc/aliases.cdb contra atualizações simultâneas.
Formato do arquivo /etc/aliases
Aliases e forwards podem conter a forma:
root: sysadm
sysadm: telles, kernel
sysop: Just for fun <just@for.fun>
# comentários são ignorados
kernel: kerne
# executando programas e scripts
script: “| ./script.sh”
Aonde novas mensagens para o usuário root serão encaminhadas para sysadm que por sua vez serão encaminhadas para os usuários telles e kernel, aonde kernel é um alias para kerne e novas mensagens para o usuário sysop serão encaminhadas para o e-mail just@for.fun.
Quando newaliases encontrar um endereço de recipiente que não possui um nome de domínio (@dominio.com.br) seguido de um “|” (barra vertical), processa o conteúdo logo após a barra vertical como sendo um programa a ser executado. fastforward executará ./script.sh quando receber uma mensagem para script.
Qualquer endereço de recipiente que não possua “@dominio.com.br” utilizará os mecanimos defaulhost, defaultdomain e plusdomain.
Instruções de encaminhamentos podem ser separadas em várias linhas, desde que a próxima linha inicie com um espaço em branco, tab ou esteja vazia.
Ex:
hostmaster:
telles,
nobody
Comentários pode ser separados em várias linhas, desde que a próxima linha inicie com um espaço em branco, tab ou esteja vazia.
Ex:
# comentários
em varias
linhas são permitidos.
Notas de compatibilidade:
newaliases não suporta entrega em arquivo, utilize o mecanismo de entrega dot-qmail (formato mbox).
Se existir várias entradas de encaminhamentos para o mesmo alias em /etc/aliases, sendmail solta uma mensagem de erro na tela; fastforward utilizará silenciosamente a primeira instrução.
sendmail processa aspas “”(aspas) e “\” (contra-barras) em /etc/aliases, violando as RFC's 821 e 822; newaliases não processa tais caracteres.
sendmail não suporta aliases por host, sendo assim, processa user@host.com.br da mesma forma que user, se host.com.br for local.
Grupos de endereços não são permitidos.
Várias versões do sendmail fazem coisas estranhas quando encontram aliases circulares; nestes casos, fastforward entrega a mensagem apenas uma vez.
Endereços de e-mail podem legitimamente iniciar com “/” (barra) ou “|” (pipe - barra vertical). newaliases processa qualquer instrução que contenha o símbolo “@” e não esteja entre “” (aspas) como um recipiente de e-mail. Aparentemente, sendmail tem vários problemas com estes endereços e com comandos que contenham o simbolo “@” (arroba).
newaliases não permite a utilização de “|” (barra vertical) antes de aspas duplas.
sendmail requer que a “,” (vírgula) esteja na primeira linha de um encaminhamento separado em várias linhas de instruções.
sendmail não permite linhas em branco no meio de uma continuação de encaminhamentos separados em múltiplas linhas.
sendmail não permite comentários divididos em múltiplas linhas.
Arquivos de Include
Se um endereço de recipiente possuir a forma “:include:usuários”, significa que todos os usuários contidos no arquivo usuários devem receber uma cópia da mensagem. Atualmente, fastforward lê o arquivo usuários.bin que deve ser criado utilizando-se o programa newinclude.
Perceba que o arquivo usuários é lido por fastforward e não pelo programa newaliases, desta forma, o administrador não precisa executar newaliases a cada modificação feita em usuários.
Notas de compatibilidade:
Se o arquivo de include usuários não puder ser lido ou não existir, sendmail ignora esta entrada; fastforward somente adia a entrega da mensagem, fazendo-a retornar à fila de e-mails.
sendmail não permite espaços em branco no texto da instrução “:include: nome-após-espaço”, newaliases permite.
versões do sendmail anteriores a V8, não retiram as aspas (“quote”) de arquivos “:include:”.
Alias Owners
Se existir um alias owner-lista, aonde lista aponta para vários usuários ou outros aliases, fastforward altera o sender (Return-Path:) de cada mensagem por owner-lista, antes de encaminhar a mensagem para os destinatários contidos em lista.
Ex:
humor: telles, kerne, hugo, cleri
owner-humor: telles
Desta forma, novas mensagens para humor serão entregues para telles, kerne, hugo e cleri, e caso algum destes usuários não exista ou ocorra um erro na entrega da mensagem, este erro retornará para o usuário telles listado como owner (dono) da lista humor.
Nota de compatibilidade:
Quando um alias inclui um endereço de recipiente e outros aliases, aonde o mesmo endereço de recipiente também está listado dentro de um dos aliases, fastforward enviará a mesma mensagem 2 (duas) vezes, cada uma com um endereço de sender diferente. sendmail envia a mensagem apenas uma vez, e o sender a ser utilizado vai depender muito das fases da lua.
Ex:
owner-humor: telles
humor: telles, kerne, hugo, cleri
friends: kerne, humor
newinclude arquivo-de-lista
Lê entradas do tipo “:include: arquivo-de-lista” no estilo sendmail e converte em um formato binário (arquivo-de-lista.bin) para ser utilizado por fastforward.
newinclude primeiro escreve no arquivo arquivo-de-lista.tmp e então move o arquivo para arquivo-de-lista.bin.
Caso ocorra um problema na gravação de arquivo-de-lista.tmp, newinclude não tenta mover arquivo-de-lista.tmp para arquivo-de-lista.bin, preservando o conteúdo anterior do arquivo arquivo-de-lista.bin (caso exista) inalterado.
newinclude sempre cria arquivo-de-lista.bin com permissão de leitura para todos os usuários do sistema.
arquivo-de-lista pode conter várias linhas, cada linha pode conter vários endereços de e-mail separados por “,” (vírgula) e ainda outras instruções do tipo “:include:arquivo-de-lista”.
Qualquer linha que iniciar com um “#” (comentário) será ignorada.
Nota de compatibilidade:
sendmail lê arquivo-de-lista diretamente, fastforward necessita do arquivo em formato binário (arquivo-de-lista.bin). A estratégia utilizada por sendmail pode causar um disastre se o arquivo estiver sendo escrito no disco ao mesmo tempo que sendmail estiver lendo-o; o arquivo pode ser truncado e ainda incluir “sugeiras” no meio dos endereços de e-mail da lista; se o sistema travar neste momento, o arquivo será preenchido com todo tipo de lixo.
newinclude não suporta entrega de mensagens em arquivo ou atravéz de programas em arquivos “:include:”. Utilize o mecanismo dot-qmail.
Versões do sendmail anteriores a V8 não permitem comentários em arquivos “:include:”.
Lê uma base de dados (cdb) de encaminhamentos via STDIN e imprime em STDOUT todas as instruções de encaminhamentos em um formato aceito por setforward.
Ex:
$ /var/qmail/bin/printforward < /etc/aliases.cdb
mailer-daemon@:
, &postmaster@myqmail.box
;
postmaster@:
, &root@myqmail.box
;
root@:
, &telles@myqmail.box
;
humor@:
, &cleri@myqmail.box
, &hugo@myqmail.box
, &kerne@myqmail.box
, &telles@myqmail.box
;
humor@: ?owner-humor@myqmail.box;
owner-humor@:
, &telles@myqmail.box
;
Lê uma lista de e-mails no formato binário via STDIN e imprime todas as instruções de encaminhamento em STDOUT em um formato aceito por setmaillist.
Ex:
$ /var/qmail/bin/printmaillist < lista.bin
&rodrigo@nosp.am
&root@local.net
setforward cdb tmp
Lê uma tabela de instruções de encaminhamentos da entrada padrão (STDIN) e converte em uma base de dados de encaminhamentos, que pode ser utilizada por fastforward.
Por segurança, setforward escreve a base de dados no arquivo tmp e só depois move tmp para cdb.
Caso ocorra um problema na gravação do arquivo tmp, setforward não tenta mover tmp para cdb, preservando o conteúdo anterior do arquivo inalterado.
A base de dados cdb é portável entre computadores diferentes, tornando possível a utilização da mesma base por computadores distintos.
As instruções de redirecionamentos devem conter um alvo, seguido de “:” (dois pontos), uma série de comandos e finalizar com “;” (ponto-e-vírgula):
alvo: comando1, comando2, comando3, ...;
Cada comando, pode ser um ou vários endereços de recipiente separados por “,” (vírgula), um endereço de owner, uma lista de endereços externos ou um programa.
Ex:
sysadm@host.com: telles@space.net, sysadm@nosp.am;
Aonde, e-mails para sysadm@host.com serão encaminhados para telles@space.net e sysadm@nosp.am.
setforward ignora linhas que iniciam com “#” (comentários), finais de linha (permitindo dividir instruções de forwards em mais de uma linha), espaços em branco e tabs (pode-se utilizar de contra-barras para escapar espaços em branco, tabs, vírgulas, caracteres especiais, etc).
Quando fastforward recebe uma mensagem contendo o destinatário user@host.dom, verifica primeiro a existência do alvo user@host.dom, depois @host.dom e por fim user@. Obedecerá as regras de encaminhamento do primeiro alvo que encontrar.
Todos os comandos para um alvo devem ser listados em uma única instrução; com exceção de endereços de owner.
Se um comando iniciar com um “&”, setforward processa o resto do comando como sendo um endereço de recipiente.
Ex:
root@nosp.am: &ni@nosp.am;
setforward encaminhará cada nova mensagem com destino a root@nosp.am para ni@nosp.am. O endereço de recipiente deve ter a forma user@dominio.com e não pode ultrapassar 800 bytes (800 caracteres).
Endereços de owner
Se um comando iniciar com o sinal “?” (interrogação), setforward processa o resto do comando como sendo um endereço de owner:
suporte@nosp.am: ?owner-suporte@nosp.am;
fastforward utilizará o endereço owner-suporte@nosp.am como sender (Return-Path:) de todos os e-mails encaminhados a partir de suporte@nosp.am.
Normalmente, se uma mensagem é encaminhada para um recipiente com problemas, a mensagem volta com erro para o endereço utilizado como sender.
Listas externas de e-mails
Se um comando iniciar com um “.” (ponto) ou com uma “/” (barra), fastforward processa o resto do comando como sendo o nome de um arquivo binário contendo uma lista de e-mails gerada pelo programa setmaillist.
Ex:
suporte@nosp.am: /etc/lists/suporte.bin;
fastforward irá ler o conteúdo do arquivo /etc/lists/suporte.bin e seguir as instruções de encaminhamento contidas neste arquivo. O arquivo precisa ser acessível por qualquer usuário e por fastforward.
Programas
Se um comando iniciar com um “|” (pipe – barra vertical) ou um “!” (sinal de exclamação), fastforward processa o resto do comando como sendo o nome de um programa a ser executado.
Ex:
root-cmd@: | /bin/monitor;
Se utilizado “|”, fastforward encaminhará a mensagem para o programa monitor quando receber uma mensagem para root-cmd.
Se utilizado “!”, fastforward age da mesma forma, exceto que enviará também as variáveis de ambiente $UFLINE, $RPLINE e $DTLINE ao programa monitor.
Duplicidades
Quando setforward está montando a lista de recipientes para cada e-mail, ele segue a lista de recipientes que será utilizada para os encaminhamentos; se detectar duplicidades de instruções de encaminhamento, ignora a segunda ocorrência da instrução e continua o processamento.
Ex:
everybody@nosp.am: programmers@nosp.am, testers@nosp.am;
programmers@nosp.am: root@nosp.am, devel@nosp.am;
testers@nosp.am: root@nosp.am, fred@nosp.am;
Mensagens para everybody@nosp.am serão encaminhadas para root@nosp.am apenas uma vez. setforward se encarrega de evitar loops internos.
Exceção: Se o alvo possuir um endereço de owner, comandos para este alvo serão considerados de forma diferente.
Ex:
everybody@nosp.am: programmers@nosp.am, testers@nosp.am;
programmers@nosp.am: root@nosp.am, devel@nosp.am;
testers@nosp.am: root@nosp.am, fred@nosp.am;
testers-owner@nosp.am: root@nosp.am
Mensagens para everybody@nosp.am serão encaminhadas para root@nosp.am 2 (duas) vezes; uma vez atravéz de programmers@nosp.am e outra vez atravéz de testers@nosp.am. Isto ocorre por causa da existência de testers-owner@nosp.am, que torna root@nosp.am especial. setforward elimina endereços duplicados para aliases regulares, mas não para listas de e-mails, indicada acima pela existência de testers-owner.
setmaillist arquivo.bin arquivo.tmp
Lê uma lista de e-mails via STDIN, escreve em formato binário em arquivo.tmp e move arquivo.tmp para arquivo.bin.
Caso ocorra um problema na gravação de arquivo.tmp, setmaillist imprime uma mensagem de erro em STDOUT e não tenta mover arquivo.tmp para arquivo.bin, preservando o conteúdo anterior do arquivo arquivo.bin (caso exista) inalterado.
arquivo.bin e arquivo.tmp devem obrigatoriamente estar localizados no mesmo sistema de arquivos.
O arquivo binário gerado por setmaillist é portável entre computadores diferentes, tornando possível a utilização do mesmo arquivo por computadores distintos.
setmaillist sempre cria arquivo.bin com permissão de leitura para todos os usuários do sistema.
Formato de entrada
Se uma linha iniciar com um “.” (ponto) ou com uma “/” (barra), setmaillist processa o resto da linha como sendo um arquivo de include.
Se uma linha iniciar com um “&”, letras ou números , setmaillist processa o resto da linha como sendo um endereço de recipiente.
Cada endereço de recipiente deve ter a forma user@dominio.com e não pode ultrapassar 800 bytes (800 caracteres).
setmaillist ignora linhas em branco, linhas que iniciam com um “#” (comentário), espaços e tabs no final de linhas.
Ex:
admin@nosp.am
&abuse@localhost.net
/etc/mail/amigos.bin
postmaster@local.net