
의심스러운 첨부 파일이 포함된 모든 이메일을 전용 폴더로 보내는 다음 규칙이 있습니다.
# Emails with attachments
:0
* ^Content-Type: multipart/
{
:0 B
* ^Content-Type: application/(zip|x-zip-compressed)|\
^Content-Type:.*name=.*\.(zip|exe|rar|rtf|docm)|\
^Content-.*attachment.*name=.*\.(zip|exe|rar|rtf|docm)|\
^Content-.*application.octet-stream.*name=.*\.(zip|exe|rar|rtf|docm)
$L/.3_my._quarantine/
}
그러나 방금 zip 첨부 파일이 포함된 이메일이 빠져나간 것을 발견했는데 이유를 알 수 없습니다(my@email 및 myemail에는 제가 난독화한 이메일과 호스트가 포함되어 있습니다).
X-Priority: 3 (Normal)
From: [email protected]
To: "[email protected]"
<[email protected]>
Subject: Attached File
Date:Mon, 16 May 2016 17:16:47 +0530
Message-Id: <272843899191709486.0001.scannerTxNo.0051@scannerF04EF6.myemail.com>
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="53594271E1EBE7BBDAF4BBA9"
--53594271E1EBE7BBDAF4BBA9
Content-Type: application/x-compressed;
name="[email protected]_3602848_97891076672132.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="[email protected]_3602848_97891076672132.zip"
AFAICS가 ^Content-Type:.*name=.*\.(zip|exe|rar|rtf|docm)
일치해야 합니까? 따옴표 때문인가요?
답변1
당신이 링크한 게시물에는 실제로 접힌 게시물이 나와 있습니다.헤더올바르게 처리되지만 이 레시피는 헤더가 아닌 본문을 검사합니다.
MIME 구조를 올바르게 인식하지 못하는 것은 Procmail의 잘못된 기능입니다. 이는 최신 메일 필터에 중요한 추가 기능이 될 것입니다. 그러나 아쉽게도 Procmail 개발은 이미 2000년대 초반에 중단되었습니다(원래 개발자가 포기한 그 이전에도 이미 한 번).
조잡한 해결 방법으로 MIME 경계에서 MIME 다중 부분 메시지를 일시적으로 분할하고 각 부분을 별도의 Procmail 레서피에 공급할 수 있지만 이는 금세 부서지기 쉽고 복잡해집니다(이론적으로 MIME 메시지는 대부분의 경우 임의로 깊이 중첩될 수 있습니다). 실제적인 목적에서는 한두 수준 아래로 반복하기만 하면 됩니다. 그 이상의 것은 바운스 또는 이와 유사한 것일 수 있으며 조사 중인 메시지의 직접적인 기능은 아닙니다.
정규식에는 가능한 (현실적인!) 분할 지점이 몇 개만 있으므로 가능한 줄바꿈을 고려하여 리팩터링할 수 있습니다.
:0
* ^Content-type: multipart/
{
:0B
* ^Content-Type: application/(zip|x-zip-compressed)|\
^Content-Type:.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)|\
^Content-.*attachment.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)|\
^Content-.*application.octet-stream.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)
$L/.3_my._quarantine/
}
(($)[ ].*)*
몇 군데에서 추가된 내용을 확인할 수 있습니다 . 이는 개행 문자( ($)
) 뒤에 공백 문자(탭 또는 공백, [ ]
)가 뒤따르고 무엇이든 0회 이상 반복되는 경우를 설명합니다.
(여담이지만 채점을 사용하면 디버깅하기가 약간 더 쉬울 수 있습니다.
:0 B
* 1^1 ^Content-Type: application/(zip|x-zip-compressed)
* 1^1 ^Content-Type:.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)
* 1^1 ^Content-.*attachment.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)
* 1^1 ^Content-.*application.octet-stream.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)
...
VERBOSE=yes
이를 통해 이 복잡한 다중 정규식 레시피의 각 개별 정규식 결과를 로그 에서 볼 수 있습니다 .)
완전히 빈틈없는 방법이 필요한 경우 Python이나 Perl(또는 Ruby 등)로 간단한 스크립트를 작성하여 MIME 구조를 정규화할 수도 있습니다. 오래 전에 이와 같은 작업을 수행 하는 도구가 있었던 것으로 기억합니다 emil
. 하지만 문서화는커녕 제대로 확립되지도 않았습니다. (실제로 IIRC는 pre-MIME에 연결하도록 특별히 설계되었으며 sendmail
다른 용도로 사용하는 것이 거의 불가능했습니다.)