R$* $#error $: 553 헤더 누락 --> [테스트용입니다.]

R$* $#error $: 553 헤더 누락 --> [테스트용입니다.]

우리는 sendmail의 mailertable 구성에서 다음 구성을 통해 내부 도메인(예: @osp.com, @asp.com)만 있는 메일을 외부 세계로 릴레이하는 메일 서버를 가지고 있습니다. 다른 도메인으로 전송된 모든 이메일은 거부됩니다. 현재 요구 사항은 "X-Test"와 같은 특정 사용자 정의 헤더가 이메일 헤더에 있고 다른 이메일 도메인(현재 거부됨)에서 전송된 경우 이메일을 릴레이하는 것입니다.

규칙 세트를 사용하려고 생각했는데 가장 가까운 링크는 아래 링크였지만 작동하지 않았고 해결책을 찾는 것이 아니라 방향을 찾고 있습니다. 지금까지 나는 규칙/규칙 세트가 작성되는 방법을 이해했습니다(sendmail에서는 약간 복잡하지만).

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

관련된 링크들: http://bradthemad.org/tech/notes/sendmail_header_filter.php

답변1

"설정된 경우에만 허용"은 연결된 "설정된 경우 거부" 예제보다 훨씬 더 복잡합니다. "설정된 경우 거부"는 헤더에 특정 값이 있는 경우 메시지를 거부합니다. "설정된 경우에만 허용"은 해당 메시지를 허용된 것으로 표시해야 하지만 다른 모든 메시지도 거부해야 합니다. "설정된 경우에만 허용"의 또 다른 복잡한 문제는 시스템 메시지(예: cron의 메시지)도 허용해야 할 수 있다는 것입니다. 이 경우 포괄적 거부로는 충분하지 않습니다. 또 다른 질문은 시스템이 원격 중계를 허용하는지 여부입니다. 그렇다면 규칙 세트가 올바르게 설계되지 않은 경우 문제의 헤더 필드를 설정하는 모든 사람을 위해 서버를 개방형 중계로 전환할 수 있습니다. 테스트 헤더를 어딘가에서 제거하지 않으면 시스템에서 메시지를 읽을 수 있는 모든 사람에게 표시되므로 이는 좋지 않을 수 있습니다.

한 가지 접근 방식은 헤더 끝에서 헤더 X-Test가 표시되었는지 확인하고, 그렇지 않은 경우 메시지를 거부하는 것입니다. 헤더 세트가 없으면 시스템 메시지가 실패하지만 시스템을 개방형 릴레이로 전환해서는 안 됩니다. 릴레이 권한을 결정하려면 다양한 다른 규칙 세트가 계속 적용되어야 하기 때문입니다. 따라서 sendmail.mc다음을 추가하세요.

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

테스트 헤더 유무에 관계없이 다시 작성하고 sendmail.cf, 다시 시작하고 , 테스트 메시지를 보냅니다.sendmail

Sendmail은 많은 공백을 강제하는 불행한 소프트웨어 중 하나이기 때문에 "많은 공백"을 실행하는 프로그램은 하나 이상의 탭으로 대체되어야 합니다.

이 예에 대한 자세한 내용은 op.pdfSendmail 매뉴얼의 섹션 5.1.4.6을 참조하십시오. 위의 내용은 다소 표절되었습니다.

또한 위의 내용은 필수 헤더가 없는 수신 메일을 거부하므로 보내는 메일 서버 구성에서만 작동합니다.

답변2

@thrig 귀하의 조언에 다시 한번 감사드립니다. 규칙이 어떻게 작성되었는지 이해해야 했기 때문에 시간이 걸렸습니다. 중지하는 대신 헤더를 허용해야 하므로 주어진 규칙 세트를 수정하여 sendmail.mc에 다음 행을 추가하여 원하는 결과를 얻었습니다. 아직 사전 제작 팜에서 이를 테스트하지는 않았지만 앞으로 나아갈 방법에 대한 통찰력을 얻을 수 있습니다.

나는 필요한 헤더를 생성하고 보내는 데 도움이 되는 작은 Python 스크립트를 만들었습니다. 아래 규칙 세트는 내 메일링 테이블이 이전에 나열된 도메인을 기반으로 하는 다른 이메일을 거부하기 때문에 내 요구 사항인 "X-Test" 헤더를 허용합니다. 피드백에 부족한 점이 있으면 감사의 마음을 표현해 주세요.

LOCAL_RULESETS Kstorage 매크로 HX-Test: $>CheckTestHeader

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

R$* $#error $: 553 헤더 누락 --> [테스트용입니다.]

관련 정보