The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Mail::Decency::Policy

SYNOPSIS

    use Mail::Decency::Policy;
    
    # run in server mode
    my $policy = Mail::DecencyPolicy->new( {
        config => '/etc/decency/policy.yml'
    } );
    $policy->run;
    
    # run in maintenance mode
    $policy->maintenance;
    
    # print statistics
    $policy->print_stats;

DESCRIPTION

Policy server for Postfix or other MTAs. Could be combined with Mail::Decency::ContentFilter. Besides the existing Modules it is easy extendable for custom needs.

POSTFIX

To implement this in postfix, add a "check_policy_service" directive in one of the restriction classes:

    smtpd_recipient_restrictions =
        # ...
        check_policy_service inet:127.0.0.1:15000
        # ...

If you want to place this anywhere before the smtpd_recipient_restrictions, you probaly have to enable "smtpd_delay_reject" (depending on the modules you use, but to be save..)

    smtpd_delay_reject = yes

CONFIG

The configuration can be provided via YAML file or as HashRef.

Example:

    ---
    
    include:
        - database.yml
        - cache.yml
        - logging.yml
    
    weight_threshold: -100
    force_check_local: 1
    
    default_reject_message: "use decency"
    no_reject_detail: 0
    
    disable_prepend: 0
    forward_scoring: 1
    forward_sign_key: sign.key
    
    enable_stats: 1
    
    
    server:
        host: 127.0.0.1
        port: 15000
        instances: 3
    
    
    policy:
        - CWL: policy/cwl.yml
        - DNSBL: policy/dnsbl.yml
        - CBL: policy/cbl.yml
        - SPF: policy/spf.yml
        - Association: policy/association.yml
        - GeoWeight: policy/geo-weight.yml
        - Honeypot: policy/honeypot.yml
        - Greylist: policy/greylist.yml
        - Throttle: policy/throttle.yml
    

DATABASE

SQL CREATE statements (SQLite) for the stats role:

    -- TABLE: stats_contentfilter_performance (SQLITE):
    CREATE TABLE STATS_CONTENTFILTER_PERFORMANCE (calls varchar(10), runtime real, period varchar(10), type varchar(32), start integer, module varchar(32), id INTEGER PRIMARY KEY);
    
    CREATE UNIQUE INDEX STATS_CONTENTFILTER_PERFORMANCE_MODULE_PERIOD_START_TYPE ON STATS_CONTENTFILTER_PERFORMANCE (module, period, start, type);
    
    -- TABLE: stats_contentfilter_response (SQLITE):
    CREATE TABLE STATS_CONTENTFILTER_RESPONSE (period varchar(10), type varchar(32), start integer, module varchar(32), id INTEGER PRIMARY KEY);
    
    CREATE UNIQUE INDEX STATS_CONTENTFILTER_RESPONSE_MODULE_PERIOD_START_TYPE ON STATS_CONTENTFILTER_RESPONSE (module, period, start, type);

CLASS ATTRIBUTES

See Mail::Decency::Policy::Core

weight_threshold : Int

Threshold of spam score before reject ( actual score <= threeshold == spam )

session_data : Mail::Decency::Core::SessionItem::Policy

Instance of Mail::Decency::Core::SessionItem::Policy

pass_localhost : Bool

Wheter passing everything from localhost or not

Default: 1

default_reject_message : Str

Default reject message string (after the SMTP REJECT command .. "REJECT message")

Default: use decency

no_reject_detail : Bool

Wheter pass detailed information of why a particular REJECT has been thrown to the sender or not (not=always the default message)/

Default: 0

forward_scoring : Bool

Wheter forward scoring informations after policies or not

Default: 0

disable_prepend : Bool

Wheter disabling the prepend of instance information fully (implies forward_scoring=0)

Default: 0

forward_sign_key : Str

Path to a file containing a private key for signing forwarded

forward_sign_key_priv : Crypt::OpenSSL::RSA

Instance of Crypt::OpenSSL::RSA representing the forward sign key

METHODS

init

Loads policy modules, inits caches, inits databases ..

get_handlers

Returns subref to handlers, called by Mail::Decency::Core::POEForking::Postfix

    # all handlers
    my $handlers_ref = $policy->get_handlers();
    
    # only the awl handler
    my $handlers_ref = $policy->get_handlers( qw/ AWL / );

start

Starts all POE servers without calling the POE::Kernel->run

run

Start and run the server via POE::Kernel->run

session_init $attributes_ref

Called at start of every handle cycle. Inits all handle/session-variables

session_cleanup

Clears all info from session cache, returns final response

add_spam_score $module, $weight, $details, $reject_message

Add weight and filter info to current instance.

Throws _FinalStateException if weighting indicates spam

  • $module

    The module which called the method.

  • $weight

    Positive or negative score.

  • $details

    Details for the MIME header

  • $reject_message

    If this scoring makes the rejection final, this is the rejection message

go_final_state $module, $state, $message

Throws Mail::Decency::Core::Exception exception if state is not DUNNO.

Adds message to list of response messages

add_response_message $message

Add message (not details) to response

SEE ALSO

AUTHOR

Ulrich Kautz <uk@fortrabbit.de>

COPYRIGHT

Copyright (c) 2010 the "AUTHOR" as listed above

LICENCSE

This library is free software and may be distributed under the same terms as perl itself.