나에게 이메일을 보내지 않고 어떻게 procmail 규칙을 테스트할 수 있나요?

나에게 이메일을 보내지 않고 어떻게 procmail 규칙을 테스트할 수 있나요?

특정 국가로부터 스팸을 많이 받고 있습니다. 소스에는 모두 동일한 패턴이 있습니다. 나는 이 모든 이메일을 자동으로 내 스팸 폴더로 이동시키는 procmail 규칙을 작성하고 싶습니다.

스팸의 출처는 다음과 같습니다(개인 정보 보호를 위해 "[편집됨]"을 추가했습니다).

Return-Path: <>
X-Original-To: [REDACTED]
Delivered-To: [REDACTED]
Received: from [REDACTED] ([REDACTED] [REDACTED])
    by [REDACTED] (Postfix) with ESMTPS id 2AC8E731E799DC
    for <[REDACTED]>; Sat,  9 Jul 2022 20:16:41 +0000 (UTC)
Received: from [REDACTED].org ([REDACTED].ru [REDACTED])
    by [REDACTED] (Postfix) with ESMTP id 6F1865ECD8
    for <[REDACTED]>; Sat,  9 Jul 2022 20:16:40 +0000 (UTC)
[...]

내가 원하는 것은 "Received" 헤더를 보고 .ru TLD의 모든 것을 스팸으로 보내는 것입니다.

내 시도는 다음과 같습니다

:0 H
* ^Received:*\.ru
.Spam/

그러나 저는 procmail 규칙을 작성하는 것이 처음입니다. 새 규칙이 올바른지 확인하기 위해 어떻게 테스트할 수 있나요?

답변1

procmail표준 입력에서 메일 메시지를 허용하므로 파이프로 연결되는 모든 항목에서 작동합니다. 이상적으로는 파이프로 연결되는 내용이 메일 전송 에이전트에서 보내는 내용과 동일해야 합니다. 또한 올바른 콘텐츠에 새 규칙을 포함하기 전에 사용자 정의 규칙 파일을 사용하여 테스트하십시오 .procmailrc.

# rm output
# cat testmessage
From [email protected]
To: [email protected]
Subject: foo

test
# cat testrules
:0 H
* ^
output
# procmail testrules < testmessage
# cat output
From [email protected]
To: [email protected]
Subject: foo

test

#

답변2

Procmail에는 -m어디에도 메시지를 전달하지 않고 규칙 파일을 테스트할 수 있는 옵션이 있습니다. $DEFAULT일치하는 규칙이 없으면 받은 편지함으로 메일 보내기가 꺼집니다. 이 옵션을 사용하려면 실행하려는 규칙 파일의 파일 이름을 전달해야 하며 VERBOSE=yes명령줄에서와 마찬가지로 변수를 설정할 수 있습니다.

procmail -m test.rc VERBOSE=yes <test.msg

어쩌면 아직도 볼 수 있을지도 몰라https://www.iki.fi/era/mail/procmail-debug.html (오래되었지만 여전히 모호하게 관련되어 있음).

특정 규칙의 경우 오탐이 발생하기 쉽습니다. 정규식 엔진은 부분 일치를 허용하므로 규칙이 실행됩니다.

Received: from postfix.rules.example.com ...

하위 문자열과 일치하기 때문입니다 .ru. 다음 뒤에 단어 경계를 요구하면 이를 어느 정도 방지할 수 있습니다 ru.

:0
* ^Received:.*\.ru\>
.Spam/

또한 "모든 텍스트"에 대한 정규식은 임의의 한 문자와 일치하고 .*이전 표현식을 가능한 한 많이 반복하지만 0번의 반복도 허용한다는 의미입니다. (따라서 귀하의 시도는 0개 이상의 콜론이 뒤에 오는 것을 허용 하지만, 그 뒤에 리터럴 텍스트가 오는 경우에만 가능합니다 .).*Received.ru

더 강화할 수도 있지만 Received:헤더는 표준화가 잘 안 된 것으로 악명 높습니다. 많은 서버는 Received:콜론 뒤의 첫 번째 부분이 fromHELONAME(RDNS [IP])을 의미하는 헤더를 생성하는 Postfix 또는 Sendmail을 실행합니다. 여기서 IP는 실제 IP 주소이고 RDNS는 역방향 DNS 조회의 결과입니다(비어 있을 수 있음). HELONAME은 HELO또는 명령을 사용하여 SMTP 트랜잭션을 시작할 때 원격 클라이언트가 스스로 부여하는 이름입니다 EHLO(클라이언트는 여기에 원하는 것을 입력할 수 있습니다. 일부는 스팸 필터에 좋은 명백한 위조 항목을 입력합니다!)... 그러나 동시에 , 다른 많은 서버는 다양한 형식을 사용하는 다양한 소프트웨어를 실행하거나 로컬 관리자가 자체적으로 구성하도록 권장합니다(어, Exim). 각 Received:메시지 상단 근처의 헤더는 가장 가까운 서버에서 온 것이므로 완전히 구성된 정보를 쉽게 포함할 수 있는 멀리 있는 서버보다 예측 가능성과 신뢰성이 더 높습니다.

그럼에도 불구하고 이는 궁극적으로 다소 불만족스럽습니다. SMTP 전송 중에 원치 않는 메시지를 차단하도록 ISP를 설득할 수 있다면 더 효율적일 것입니다(편지함을 사용할 수 없는 것처럼 배달 시도를 효과적으로 차단). 일부 제공업체는 사용자에게 러시아어 메시지를 차단할 수 있는 SpamAssassin과 같은 액세스를 제공하므로(정확도는 그리 좋지 않고 메커니즘이 러시아어와 세르비아어 등을 잘 구별하지 못하지만) 차단하거나 허용해야 합니다. 거의 모두 키릴 문자임), 일부는 알려진 스패머가 연결할 수 없도록 IP 수준에서 트래픽을 차단합니다. 그러나 파괴자에 대한 최후의 방어선으로서 Procmail은 없는 것보다 확실히 낫습니다.

관련 정보