Extendendo o Amavisd New

16
Extendendo o Amavisd-New YAPC::Brasil 2009, Rio de Janeiro, RJ Friday, October 30, 2009

description

Apresentação feita no YAPC::Brasil 2009, falando sobre como é poderoso e simples extender as funcinalidades do Amavisd-New, utilizando a sua linguagem padrão de desenvolvimento: Perl.

Transcript of Extendendo o Amavisd New

Page 1: Extendendo o Amavisd New

Extendendoo Amavisd-New

YAPC::Brasil 2009, Rio de Janeiro, RJ

Friday, October 30, 2009

Page 2: Extendendo o Amavisd New

Quem?

Otávio Fernandes;

[email protected] / [email protected]

http://blog.emresumo.com

Líder, São Paulo Perl Mongers;

Friday, October 30, 2009

Page 3: Extendendo o Amavisd New

Minha História com Perl

Final de 2006;

Na época, as minhas principais linguagens eram: C, C++ e Shell Script;

Estava construindo um appliance de Anti-Spam... logo Amavisd-New;

Friday, October 30, 2009

Page 4: Extendendo o Amavisd New

Amavisd-New

A necessidade de entender como este software funciona, foi o que me levou a estudar e amar o Perl;

Perl, não existe melhor linguagem para o tratamento de email;

Friday, October 30, 2009

Page 5: Extendendo o Amavisd New

O que ele é?

Interface entre o MTA e anti-spam/anti-vírus;

Mail part decoder/unpacker;

Quarentenas (SQL/Local/Forward);

Log e Reporting para o SQL;

Friday, October 30, 2009

Page 6: Extendendo o Amavisd New

Quais as vantagens?MUITAS features;

Extensível;

Respeita os padrões (SMTP, MIME, DSN, etc);

Tolerante a falhas:

Verifica o estado de cada operação;

Se houver erro, o email permanece com o MTA;

Friday, October 30, 2009

Page 7: Extendendo o Amavisd New

Performance

Não é tão rápido quando se ele fosse escrito em C;

Porem, permite escalar;

Trabalha com daemons (conforme o setup, você usa mais instâncias);

200ms * N;

Friday, October 30, 2009

Page 8: Extendendo o Amavisd New

Performance Real:1938 msgs/min

Friday, October 30, 2009

Page 9: Extendendo o Amavisd New

Arquitetura do Amavisd / Postfix

Friday, October 30, 2009

Page 10: Extendendo o Amavisd New

Afinal, como extender?

Todos os arquivos de configuração são scripts Perl;

include_config_files("/usr/local/etc/amavis_custom.pm") if ( -e "/usr/local/etc/.pm" );

package Amavis::Custom;

Friday, October 30, 2009

Page 11: Extendendo o Amavisd New

Métodos

new;

checks;

before_send;

after_send;

mail_done;

Friday, October 30, 2009

Page 12: Extendendo o Amavisd New

Exemplo

Friday, October 30, 2009

Page 13: Extendendo o Amavisd New

if ($must_exec_action) { do_log( $cll, "CUSTOM: must_exec_action %d", $must_exec_action );

# redirecting to another recipient $r->recip_addr_modified( $mail_rules->{mailRedirectTo} ) if ( $mail_rules->{mailRedirectTo} );

# rejecting mail for sender if ( $mail_rules->{mailReject} =~ /(true|1)/i ) { do_log( $cll, "CUSTOM: reject this mail for '%s'", ( $mail_rules->{description} ) ? $mail_rules->{description} : 'no_description' ); for my $r ( @{ $msginfo->per_recip_data } ) { $r->add_contents_category( CC_BANNED, 0 ) if !$r->bypass_banned_checks; $r->banning_reason_short( ( $mail_rules->{description} ) ? $mail_rules->{description} : 'no_descption' ); $r->banned_parts( ['MAIL'] ); } $msginfo->add_contents_category( CC_BANNED, 0 ); }}

Friday, October 30, 2009

Page 14: Extendendo o Amavisd New

Testes?

TDD;

Unit Tests;

Testes de Aceitação com Fixtures;

Friday, October 30, 2009

Page 15: Extendendo o Amavisd New

Perguntas?

Friday, October 30, 2009

Page 16: Extendendo o Amavisd New

Obrigado :-)

Friday, October 30, 2009