spamassassin - filtrando letras cirílicas / russas UTF-8 específicas (codificado em base64)

0

Estou tendo problemas para configurar minhas regras pessoais de spamassassin . Meu problema: recebo muitos spams russos com letras cirílicas, muitos em UTF-8 . Por causa disso, procurar por um charset não é suficiente. Por isso, quero pesquisar algumas letras típicas da Rússia (por exemplo): (д|ж|з|и|й) .

Eu tentei o padrão /(д|ж|з|и|й)/i , bem como /(\xd0\xb4|\xd0\xb6|\xd0\xb7|\xd0\xb8|\xd0\xb9)/i (esses padrões de regex devem fazer o mesmo, certo?) em uma pesquisa Subject :

header CYRILLIC_LETTER_PRESENT Subject =~/(д|ж|з|и|й)/i

Resultado: o UTF-8 spam ainda está chegando. Analisei os emails que chegam. Todos eles têm uma estrutura semelhante. A parte (parte importante da) procura um exemplo de email de spam da seguinte forma

Subject: =?UTF-8?B?0KLQtdCx0LUg0L/QvtC90YDQsNCy0LjRgtGM0YHRjyEg0J/QvtC60LDQt9GL?=  =?UTF-8?B?0LLQsNGOINC+0YLQu9C40YfQvdGL0Lkg0LLQsNGA0LjQsNC90YIg0L/QvtC7?=  =?UTF-8?B?0YPRh9C10L3QuNGPINC00L7RhdC+0LTQsCEg0J/RgNC+0YHRgtC+0Lkg0Lgg?=  =?UTF-8?B?0YDQtdC30YPQu9GM0YLQsNGC0LjQstC90YvQueKAiyE=?=
MIME-Version: 1.0
Date: Wed, 8 Mar 2017 06:57:11 +0100
From: =?UTF-8?B?0KDQsNC00LjQuSDQn9C40YjRgg==?= <[email protected]>
Sender: [email protected]
Message-ID: <[email protected]>
X-Priority: 3
List-Unsubscribe: <http://ie8qrshyns.zarabotokfm8.ru/uns/tFRyGZzisv/58dhKEk2im53c/DBetz>
Content-Type: multipart/alternative;
boundary="291e4fd846a7aa548d279e9eb1f199e9_1"

--291e4fd846a7aa548d279e9eb1f199e9_1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64

....encoded....body....

--291e4fd846a7aa548d279e9eb1f199e9_1
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64

....2nd(?)....encoded....body....

--291e4fd846a7aa548d279e9eb1f199e9_1--

Eu pesquisei e encontrei apenas um tipo de informação útil: link

Portanto, esse subject usa RFC2047 : =?UTF-8?B?msg_subject?= =?UTF-8?B?msg_subject2?= [...] . Esta linha nos diz que o subject usa o conjunto de caracteres utf-8 e base64 (compare link ) .

Obviamente, spamassassin não está decodificando isso (corretamente). Eu não encontrei nenhuma possibilidade de fazer isso funcionar. Também encontrei este site: link

Mas isso não está me ajudando, como apenas descreve, como filtrar cadeias codificadas em base64, que são longas o suficiente. Como estou procurando por caracteres únicos, não posso usar essa abordagem.

Estou faltando alguma coisa? Obrigado pela sua ajuda!

edit: Eu também tentei a pesquisa rawbody , porque isso deve decodificar a codificação base64 como declarado no docs :

rawbody CYRILLIC_LETTER_PRESENT /(д|ж|з|и|й)/i

Também não funcionou para mim, embora também devesse procurar todo o corpo, e está cheio de letras cirílicas.

edit2: Tentei investigar o problema ainda mais. Se eu tentar testar o textcat com spamassassin -D textcat -t spamtest , ele me diz que " can't determine language uniquely enough ".

Além disso, recebo o seguinte resultado no final:

X-Spam-Flag: YES
X-Spam-Level: *******
X-Spam-Status: Yes, score=7.3 required=3.0 tests=HTML_FONT_LOW_CONTRAST,
        HTML_MESSAGE,LOCAL_CYRILLIC,RDNS_NONE,SPF_SOFTFAIL,T_DKIM_INVALID
        autolearn=no autolearn_force=no version=3.4.0

Então parece que funciona. Estava tudo bem. Minha regra, aqui chamada LOCAL_CYRILLIC , funciona como pretendido. MAS, o problema é que esse e-mail passou sem ser reconhecido como spam, já que a mesma regra estava presente no arquivo de configuração. Tentei encaminhar o mesmo e-mail novamente para mim e, então, a fonte de e-mail é assim:

X-Spam-Level: **
X-Spam-Status: No, score=2.7 required=3.0 tests=LOCAL_CYRILLIC,
    RCVD_IN_DNSWL_MED autolearn=no autolearn_force=no version=3.4.0

Portanto, parece haver uma diferença entre executar esse teste localmente em um arquivo e um email realmente recebido. Por quê? Eu sempre reinicio o spamassassin com systemctl restart spamassassin . Eu verifiquei com systemctl status spamassassin e tudo parece bem, spamd é reiniciado também, como deveria ser. Lá também posso encontrar as seguintes informações para o e-mail encaminhado:

spamd: clean message (2.7/3.0) for spamd:5555 in 6.0 seconds, 8371 bytes.
spamd: result: . 2 - LOCAL_CYRILLIC,RCVD_IN_DNSWL_MED scantime=6.0,size=8371,user=spamd,uid=5555,required_score=3.0,[...]
    
por nox 08.03.2017 / 08:49

1 resposta

0

Obviously, spamassassin is not decoding this (properly). I have not found any possibility to get this working

Funciona para mim com Ubuntu 14.04 , spamassassin 3.4 , Perl 5.18.2 , localidade: fr_FR.UTF-8 .

Regra em ~/.spamassassin/user_prefs :

header RUSSIAN_CHARS        Subject =~ /(д|ж|з|и|й)/i
describe RUSSIAN_CHARS      Russian characters in header
score    RUSSIAN_CHARS      10

Ao obter um arquivo de mensagens e substituir a linha Assunto por aquela em sua pergunta:

Subject: =?UTF-8?B?0KLQtdCx0LUg0L/QvtC90YDQsNCy0LjRgtGM0YHRjyEg0J/QvtC60LDQt9GL?=  =?UTF-8?B?0LLQsNGOINC+0YLQu9C40YfQvdGL0Lkg0LLQsNGA0LjQsNC90YIg0L/QvtC7?=  =?UTF-8?B?0YPRh9C10L3QuNGPINC00L7RhdC+0LTQsCEg0J/RgNC+0YHRgtC+0Lkg0Lgg?=  =?UTF-8?B?0YDQtdC30YPQu9GM0YLQsNGC0LjQstC90YvQueKAiyE=?=

Resultado:

$ spamc -R < mailtest
10.0/5.0
Spam detection software, running on the system  **redacted** ...

Content preview:  **redacted** [...]

Content analysis details:   (10.0 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
  10 RUSSIAN_CHARS          Russian characters in header
 0.0 DKIM_ADSP_CUSTOM_MED   No valid author signature, adsp_override is
                            CUSTOM_MED
 0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail provider
                            (**redacted**[at]gmail.com)
-0.0 NO_RELAYS              Informational: message was not relayed via SMTP

Também atinge rawbody RUSSIAN_CHARS /(д|ж|з|и|й)/i

    
por 08.03.2017 / 13:51