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.