mail command: o filtro de conteúdo no postfix funciona?

2

Eu uso o Postfix na minha máquina (linux).

Quando envio um email para um usuário local com telnet localhost 25 na linha de comando, meu email é analisado por um filtro de conteúdo (por exemplo: spamassassin) = > não tem problema.

Mas quando eu envio um e-mail para o mesmo usuário local com comando de correio (ou comando sendmail ou mail php), meu e-mail é enviado mas não analisado pelo filtro de conteúdo = > então por quê?

Por que meu e-mail não é analisado por um filtro de conteúdo quando eu uso o comando mail?

A configuração do meu postfix é muito básica:

postconf -n:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
html_directory = /usr/share/doc/postfix/html
inet_interfaces = all
mailbox_size_limit = 0
mydestination = localhost.localdomain, localhost, localhost.localdomain, localhost
myhostname = localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
recipient_delimiter = +
relayhost =
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)

postconf -M:

smtp       inet  n       -       n       -       -       smtpd -o content_filter=spamassassin
pickup     fifo  n       -       -       60      1       pickup
cleanup    unix  n       -       -       -       0       cleanup
qmgr       fifo  n       -       n       300     1       qmgr
tlsmgr     unix  -       -       -       1000?   1       tlsmgr
rewrite    unix  -       -       -       -       -       trivial-rewrite
bounce     unix  -       -       -       -       0       bounce
defer      unix  -       -       -       -       0       bounce
trace      unix  -       -       -       -       0       bounce
verify     unix  -       -       -       -       1       verify
flush      unix  n       -       -       1000?   0       flush
proxymap   unix  -       -       n       -       -       proxymap
proxywrite unix  -       -       n       -       1       proxymap
smtp       unix  -       -       -       -       -       smtp
relay      unix  -       -       -       -       -       smtp
showq      unix  n       -       -       -       -       showq
error      unix  -       -       -       -       -       error
retry      unix  -       -       -       -       -       error
discard    unix  -       -       -       -       -       discard
local      unix  -       n       n       -       -       local
virtual    unix  -       n       n       -       -       virtual
lmtp       unix  -       -       -       -       -       lmtp
anvil      unix  -       -       -       -       1       anvil
scache     unix  -       -       -       -       1       scache
maildrop   unix  -       n       n       -       -       pipe flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
uucp       unix  -       n       n       -       -       pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail     unix  -       n       n       -       -       pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp      unix  -       n       n       -       -       pipe flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n       n       -       2       pipe flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman    unix  -       n       n       -       -       pipe flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
spamassassin unix -      n       n       -       -       pipe user=mail argv=/usr/bin/spamc -u ${user} -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Repito o meu problema: quando eu uso o telnet localhost 25 para enviar um e-mail para um usuário local (guest), o spamassassin analisa o e-mail e o syslog é exibido:

Feb  4 15:05:42 localhost postfix/smtpd[3919]: connect from localhost[::1]
Feb  4 15:05:50 localhost postfix/smtpd[3919]: EBC2460DBF: client=localhost[::1]
Feb  4 15:05:59 localhost postfix/cleanup[3922]: EBC2460DBF: message-id=<20150204140550.EBC2460DBF@localhost>
Feb  4 15:05:59 localhost postfix/qmgr[3883]: EBC2460DBF: from=<[email protected]>, size=342, nrcpt=1 (queue active)
Feb  4 15:05:59 localhost spamd[18634]: spamd: connection from localhost [127.0.0.1] at port 48540
Feb  4 15:05:59 localhost spamd[18634]: spamd: processing message <20150204140550.EBC2460DBF@localhost> for guest:122
Feb  4 15:06:08 localhost spamd[18634]: spamd: clean message (0.2/5.0) for guest:122 in 9.1 seconds, 296 bytes.
Feb  4 15:06:08 localhost spamd[18634]: spamd: result: . 0 - ALL_TRUSTED,MISSING_HEADERS scantime=9.1,size=296,user=guest,uid=122,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=48540,mid=<20150204140550.EBC2460DBF@localhost>,autolearn=ham
Feb  4 15:06:08 localhost spamd[18632]: prefork: child states: II
Feb  4 15:06:08 localhost postfix/pickup[3881]: 6844560FDB: uid=8 from=<[email protected]>
Feb  4 15:06:08 localhost postfix/pipe[3923]: EBC2460DBF: to=<[email protected]>, orig_to=<guest>, relay=spamassassin, delay=22, delays=12/0.01/0/9.2, dsn=2.0.0, status=sent (delivered via spamassassin service)
Feb  4 15:06:08 localhost postfix/qmgr[3883]: EBC2460DBF: removed
Feb  4 15:06:08 localhost postfix/cleanup[3922]: 6844560FDB: message-id=<20150204140550.EBC2460DBF@localhost>
Feb  4 15:06:08 localhost postfix/qmgr[3883]: 6844560FDB: from=<[email protected]>, size=656, nrcpt=1 (queue active)
Feb  4 15:06:08 localhost postfix/local[3928]: 6844560FDB: to=<[email protected]>, relay=local, delay=0.18, delays=0.12/0.01/0/0.05, dsn=2.0.0, status=sent (delivered to mailbox)
Feb  4 15:06:08 localhost postfix/qmgr[3883]: 6844560FDB: removed

= > não tem problema.

Mas se eu usar apenas o comando mail:

echo "test" | mail -s "test" guest 

, o e-mail é enviado, mas o spamassassin não analisou o e-mail porque o syslog exibe isso:

Feb  4 15:09:36 localhost postfix/pickup[3881]: B6C1960DC0: uid=1000 from=<guest>
Feb  4 15:09:36 localhost postfix/cleanup[3956]: B6C1960DC0: message-id=<20150204140936.B6C1960DC0@localhost>
Feb  4 15:09:36 localhost postfix/qmgr[3883]: B6C1960DC0: from=<[email protected]>, size=339, nrcpt=1 (queue active)
Feb  4 15:09:36 localhost postfix/local[3957]: B6C1960DC0: to=<[email protected]>, orig_to=<guest>, relay=local, delay=0.18, delays=0.12/0/0/0.07, dsn=2.0.0, status=sent (delivered to mailbox)
Feb  4 15:09:36 localhost postfix/qmgr[3883]: B6C1960DC0: removed

Uma ideia?

Obrigado, cordialmente.

    
por totoaussi 04.02.2015 / 13:42

1 resposta

2

Para o filtro de conteúdo após a fila, o postfix possui dois métodos de implementação, o filtro de conteúdo simples e avançado. Você pode ler a explicação dos dois métodos na sua documentação oficial .

Da sua pergunta, podemos aprender que você usa o método de filtro de conteúdo simples. O sinal é a saída de postconf -M (ou o conteúdo de master.cf ). Ele usa o método pipe para passar e-mail para o assassino de spam via comando

/usr/bin/spamc -u ${user} -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Os documentos oficiais do Postfix acima também informam a principal limitação do filtro de conteúdo simples

The first example is simple to set up, but has major limitations that will be addressed in a second example. Postfix receives unfiltered mail from the network with the smtpd(8) server, and delivers unfiltered mail to a content filter with the Postfix pipe(8) delivery agent. The content filter injects filtered mail back into Postfix with the Postfix sendmail(1) command, so that Postfix can deliver it to the final destination.

This means that mail submitted via the Postfix sendmail(1) command cannot be content filtered.

Então, o comportamento que você vê foi normal.

Solução: Como posso usar content_filter para email enviado por meio do comando mail?

Você pode considerar mudar sua configuração para usar o método avançado de filtro de conteúdo. Este tópico na lista de discussão de spam de spam informa algumas alternativas para isso: amavisd ou spampd

    
por 04.02.2015 / 15:36