Sendmail para filtrar o cabeçalho personalizado

0

temos um servidor de e-mail que retransmite e-mails que possuem apenas domínios internos (digamos @ osp.com, @ asp.com) para o mundo externo através da configuração a seguir na configuração mailertable do sendmail. Qualquer email para outro domínio é rejeitado. O requisito atual é retransmitir email se o cabeçalho personalizado específico para ex: "X-Test" existir nos cabeçalhos de email e se for enviado de qualquer outro domínio de email (que é atualmente negado).

Considerei o uso de conjuntos de regras, o mais próximo que obtive é o link abaixo, mas não é útil, não estou pedindo uma solução, mas buscando direções. Eu entendi até agora como as regras / conjuntos de regras são escritas (bit um complexo embora no sendmail).

osp.net           smtp:ms.osp.net
asp.net           smtp:ms.osp.net
.                 procmail:/etc/mail/reject-mail.proc

Link relacionado: link

    
por Srinivas Pithani 28.11.2018 / 10:57

2 respostas

0

"permitir somente se definido" é muito mais complicado que o link "negar se set "example; o" deny if set "simplesmente rejeita a mensagem quando o cabeçalho tem um valor particular. O "permitir somente se definido" deve marcar mensagens apropriadas, conforme permitido, mas também em outro lugar negar tudo outras mensagens. Outra complicação para o "permitir somente se definido" é o possibilidade de mensagens do sistema (por exemplo, as do cron) que também podem precisar para ser permitido, caso em que uma negação geral não será suficiente. Ainda Outra preocupação é se seus sistemas permitem o relé remoto; se sim e se o conjunto de regras é criado incorretamente você poderia transformar seus servidores em aberto retransmissões para quem define o campo de cabeçalho em questão. Isso poderia ser ruim, e a menos que você tire o cabeçalho do teste em algum lugar, será visível para qualquer pessoa que possa ler mensagens do seu sistema.

Um método seria verificar no final dos cabeçalhos se X-Test foi foi visto; se não, rejeite a mensagem. Isso falhará nas mensagens do sistema que não tem o cabeçalho definido, mas não deve transformar o sistema em um relé aberto como vários outros conjuntos de regras ainda devem ser aplicados a detemine direitos de transmissão. Assim, em sendmail.mc , adicione algo como:

LOCAL_RULESETS
Kstorage macro
HX-Test: $>CheckTestHeader

SCheckTestHeader
R$*                     $: $(storage {xtestsetp} $@ OK $) $1

Scheck_eoh
R$*                     $: < $&{xtestsetp} >
R$*                     $: $(storage {xtestsetp} $) $1
R< $+ >                 $@ OK
R$*                     $#error $: 553 Missing Header

e reconstrua sendmail.cf , reinicie sendmail , envie mensagens de teste com e sem o cabeçalho de teste.

Essas execuções de "muitos espaços" devem ser substituídas por uma ou mais guias personagens, como Sendmail é um daqueles softwares infelizes que manda o uso de espaço em branco significativo (louco, eu sei, mas aqui estamos nós).

Para mais informações sobre este exemplo, consulte a seção 5.1.4.6 no Sendmail op.pdf manual, do qual o acima é mais ou menos cribbed.

Note também que o acima só deve ser usado no servidor de correio de saída configurações, uma vez que rejeitará as mensagens recebidas que não o cabeçalho necessário.

    
por 28.11.2018 / 19:39
0

@thrig agradece mais uma vez pelas suas sugestões. Eu tenho que entender como as regras estão sendo escritas e, portanto, tomei esse tempo. Eu modifiquei o conjunto de regras dado (já que eu preciso permitir o cabeçalho ao invés de parar), então as linhas seguintes são adicionadas ao sendmail.mc e eu obtenho o resultado desejado. Ainda estou para testar isso em nossa fazenda pré-prod mas isso me deu algumas dicas sobre como ir para a frente.

Eu criei um pequeno script python que me ajuda a criar os cabeçalhos que preciso e enviá-los. O conjunto de regras abaixo Permite o cabeçalho "X-Test", que é minha exigência, pois meu mailertable rejeita qualquer outro e-mail baseado nos domínios listados anteriormente. Appreite se você comentar com quaisquer falhas.

LOCAL_RULESETS Macro Kstorage Teste HX: $ > CheckTestHeader

SCheckTestHeader R $ * $: $ (armazenamento {xtestsetp} $ @ OK $) $ 1 R < $ + > $ @ OK

R $ * $ # error $: 553 Cabeçalho ausente - > [Isto é para testes]

    
por 19.12.2018 / 18:10