Zum Inhalt springen
Postfix Antispam Konfiguration

Postfix Antispam Konfiguration

Postfix

main.cf
smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_recipient_restrictions =
  permit_sasl_authenticated,
  permit_mynetworks,
  reject_invalid_hostname,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unauth_destination,
  reject_unauth_pipelining,
  reject_unknown_sender_domain,
  reject_unknown_reverse_client_hostname,
  reject_unknown_helo_hostname,
  reject_unknown_recipient_domain,
  check_client_access hash:/etc/postfix/access_client_whitelist,
  check_policy_service inet:127.0.0.1:12525

Die Verbindung zu 127.0.0.1:12525 ist policyd-weight. Konfiguration siehe unten. In der /etc/postfix/access_client_whitelist stehen die Mailserver, bei denen nie policyd-weight befragt werden soll. Beispiel:

/etc/postfix/access_client_whitelist
mail.gmx.de   OK
mail.gmx.net  OK
.web.de       OK

Die Datei muss mit postmap konvertiert werden.

policyd-weight

/etc/policyd-weight.conf
# ----------------------------------------------------------------
#  policyd-weight configuration (defaults) Version 0.1.14 beta-17
# ----------------------------------------------------------------

$DEBUG                             =  0;      # 1 or 0 - don"t comment

$REJECTMSG                         =  "550 Mail appeared to be SPAM or forged. Ask your Mail/DNS-Administrator to correct HELO and DNS MX settings or to get removed from DNSBLs";

$REJECTLEVEL                       =  9;      # Mails with scores which exceed this
                                              # REJECTLEVEL will be rejected

$DEFER_STRING                      =  "IN_SPAMCOP= BOGUS_MX=";
                                              # A space separated case-sensitive list of
                                              # strings on which if found in the $RET
                                              # logging-string policyd-weight changes
                                              # its action to $DEFER_ACTION in case
                                              # of rejects.
                                              # USE WITH CAUTION!
                                              # DEFAULT: "IN_SPAMCOP= BOGUS_MX="

$DEFER_ACTION                      =  "450";  # Possible values: DEFER_IF_PERMIT,
                                              # DEFER_IF_REJECT,
                                              # 4xx response codes. See also access(5)
                                              # DEFAULT: 450

$DEFER_LEVEL                       =  5;      # DEFER mail only up to this level
                                              # scores greater than DEFER_LEVEL will be
                                              # rejected
                                              # DEFAULT: 5

$DNSERRMSG                         =  "450 No DNS entries for your MTA, HELO and Domain. Contact YOUR administrator";

$dnsbl_checks_only                 =  0;      # 1: ON, 0: OFF (default)
                                              # If ON request that ALL clients are only
                                              # checked against RBLs

@dnsbl_checks_only_regexps         =  (
  # qr/[^.]*(exch|smtp|mx|mail).*
  # qr/yahoo.com$/
);
                                              # specify a comma-separated list of regexps
                                              # for client hostnames which shall only
                                              # be RBL checked. This does not work for
                                              # postfix" "unknown" clients.
                                              # The usage of this should not be the norm
                                              # and is a tool for people which like to
                                              # shoot in their own foot.
                                              # DEFAULT: empty

$LOG_BAD_RBL_ONLY                  =  1;      # 1: ON (default), 0: OFF
                                              # When set to ON it logs only RBLs which
                                              # affect scoring (positive or negative)

## DNSBL settings
@dnsbl_score                       =  (
  # HOST,                             HIT SCORE,  MISS SCORE,  LOG NAME
  'zen.spamhaus.org',                 3.00,       0.0,         'SPAMHAUS_ZEN',
  'dnsbl.njabl.org',                  3.00,       0.0,         'NJABL_DNSBL',
  'bl.spamcop.net',                   3.00,       0.0,         'SPAMCOP_BL',
  'ix.dnsbl.manitu.net',              3.00,       0.0,         'MANITU_IX',
  't1.dnsbl.net.au',                  3.00,       0.0,         'NET_AU',
  'dnsbl.sorbs.net',                  1.50,       0.0,         'SORBS_DNSBL',
  'dnsbl.dronebl.org',                3.00,       0.0,         'DRONEBL_DNSBL',
  'spamrbl.imp.ch',                   3.00,       0.0,         'IMP_SPAMRBL',
  'relays.bl.kundenserver.de',        3.00,       0.0,         'KUNDENSERVER_RELAYS',
  'dnsbl.kempt.net',                  3.00,       0.0,         'KEMPT_DNSBL',
  'dnsbl-1.uceprotect.net',           3.00,       0.0,         'UCEPROTECT_LEVEL_1',
  'dnsbl-2.uceprotect.net',           2.00,       0.0,         'UCEPROTECT_LEVEL_2',
  'combined.abuse.ch',                3.00,       0.0,         'ABUSE_CH_COMBINED',
  'cbl.abuseeat.org',                 3.00,       0.0,         'ABUSEEAT_CBL',
  'hostkarma.junkemailfilter.com',    3.00,       0.0,         'JUNKEMAILFILTER',
  'bl.mailspike.net',                 3.00,       0.0,         'MAILSPIKE_BL',
  'bl.spameatingmonkey.net',          3.00,       0.0,         'SPAMEATINGMONKEY',
  'psbl.surriel.com',                 3.00,       0.0,         'SURRIEL_PSBL'
);

$MAXDNSBLHITS                     =  3;       # If Client IP is listed in MORE
                                              # DNSBLS than this var, it gets
                                              # REJECTed immediately

$MAXDNSBLSCORE                    =  12;      # alternatively, if the score of
                                              # DNSBLs is ABOVE this
                                              # level, reject immediately

$MAXDNSBLMSG                      =  "550 Your MTA is listed in too many DNSBLs";

## RHSBL settings
@rhsbl_score                      =  (
  'multi.surbl.org',                  3.0,        0,           'SURBL',
  'rhsbl.sorbs.net',                  3.0,        0,           'SORBS_RHSBL',
  'dbl.spamhaus.org',                 0.1,        0,           'SPAMHAUS_DBL'
);

$BL_ERROR_SKIP                    =  4;       # skip a RBL if this RBL had this many continuous errors

$BL_SKIP_RELEASE                  =  12;      # skip a RBL for that many times

## cache stuff
$LOCKPATH                         =  "/var/run/policyd-weight/";
                                              # must be a directory (add
                                              # trailing slash)

$SPATH                            =  $LOCKPATH."/polw.sock";
                                              # socket path for the cache daemon.

$MAXIDLECACHE                     =  60;      # how many seconds the cache may be idle
                                              # before starting maintenance routines
                                              # NOTE: standard maintenance jobs happen
                                              # regardless of this setting.

$MAINTENANCE_LEVEL                =  5;       # after this number of requests do following
                                              # maintenance jobs:
                                              # checking for config changes

# negative (i.e. SPAM) result cache settings ##################################

$CACHESIZE                        =  2000;    # set to 0 to disable caching for spam results.
                                              # To this level the cache will be cleaned.

$CACHEMAXSIZE                     =  4000;    # at this number of entries cleanup takes place

$CACHEREJECTMSG                   =  "550 temporarily blocked because of previous errors";

$NTTL                             =  1;       # after NTTL retries the cache entry is deleted

$NTIME                            =  30;      # client MUST NOT retry within this seconds in order
                                              # to decrease TTL counter

# positve (i.e. HAM) result cache settings ###################################

$POSCACHESIZE                     =  1000;    # set to 0 to disable caching of HAM. To this number
                                              # of entries the cache will be cleaned

$POSCACHEMAXSIZE                  =  2000;    # at this number of entries cleanup takes place

$POSCACHEMSG                      =  "using cached result";

$PTTL                             =  60;      # after PTTL requests the HAM entry must
                                              # succeed one time the RBL checks again

$PTIME                            =  "3h";    # after $PTIME in HAM Cache the client
                                              # must pass one time the RBL checks again.
                                              # Values must be nonfractal. Accepted
                                              # time-units: s, m, h, d

$TEMP_PTIME                       =  "1d";    # The client must pass this time the RBL
                                              # checks in order to be listed as hard-HAM
                                              # After this time the client will pass
                                              # immediately for PTTL within PTIME

## DNS settings
$DNS_RETRIES                      =  2;       # Retries for ONE DNS-Lookup

$DNS_RETRY_IVAL                   =  2;       # Retry-interval for ONE DNS-Lookup

$MAXDNSERR                        =  3;       # max error count for unresponded queries
                                              # in a complete policy query

$MAXDNSERRMSG                     =  "passed - too many local DNS-errors";

$PUDP                             =  0;       # persistent udp connection for DNS queries.
                                              # broken in Net::DNS version 0.51. Works with
                                              # Net::DNS 0.53; DEFAULT: off

$USE_NET_DNS                      =  0;       # Force the usage of Net::DNS for RBL lookups.
                                              # Normally policyd-weight tries to use a faster
                                              # RBL lookup routine instead of Net::DNS

$NS                               =  "";      # A list of space separated NS IPs
                                              # This overrides resolv.conf settings
                                              # Example: $NS = "1.2.3.4 1.2.3.5";
                                              # DEFAULT: empty

$IPC_TIMEOUT                      =  2;       # timeout for receiving from cache instance

$TRY_BALANCE                      =  0;       # If set to 1 policyd-weight closes connections
                                              # to smtpd clients in order to avoid too many
                                              # established connections to one policyd-weight
                                              # child

# scores for checks, WARNING: they may manipulate eachother
# or be factors for other scores.
#                HIT score,  MISS Score
@client_ip_eq_helo_score          =  (  1.7,   -1   );
@helo_score                       =  (  1.7,   -2   );
@helo_from_mx_eq_ip_score         =  (  1.7,   -3.1 );
@helo_numeric_score               =  (  2.7,    0   );
@from_match_regex_verified_helo   =  (  1,     -2   );
@from_match_regex_unverified_helo =  (  1.6,   -1.5 );
@from_match_regex_failed_helo     =  (  2.5,    0   );
@helo_seems_dialup                =  (  1.7,    0   );
@failed_helo_seems_dialup         =  (  2.2,    0   );
@helo_ip_in_client_subnet         =  (  0,      0   );
@helo_ip_in_cl16_subnet           =  (  0,      0   );
@client_seems_dialup_score        =  (  4,      0   );
@from_multiparted                 =  (  1.09,   0   );
@from_anon                        =  (  1.17,   0   );
@bogus_mx_score                   =  (  2.1,    0   );
@random_sender_score              =  (  0.25,   0   );
@rhsbl_penalty_score              =  (  3.1,    0   );
@enforce_dyndns_score             =  (  3,      0   );

$VERBOSE                          =  0;

$ADD_X_HEADER                     =  1;       # Switch on or off an additional
                                              # X-policyd-weight: header
                                              # DEFAULT: on

$DEFAULT_RESPONSE                 =  "DUNNO default";
                                              # Fallback response in case
                                              # the weighted check didn"t
                                              # return any response (should never
                                              # appear).

#
# Syslogging options for verbose mode and for fatal errors.
# NOTE: comment out the $syslog_socktype line if syslogging does not
# work on your system.
#
$syslog_socktype                  =  "unix";  # inet, unix, stream, console
$syslog_facility                  =  "mail";
$syslog_options                   =  "pid";
$syslog_priority                  =  "info";
$syslog_ident                     =  "postfix/policyd-weight";

#
# Process Options
#
$USER                             =  "polw";  # User must be a username, no UID

$GROUP                            =  "";      # specify GROUP if necessary
                                              # DEFAULT: empty, will be initialized as
                                              # $USER

$MAX_PROC                         =  50;      # Upper limit if child processes
$MIN_PROC                         =  3;       # keep that minimum processes alive

$TCP_PORT                         =  12525;   # The TCP port on which policyd-weight
                                              # listens for policy requests from postfix

$BIND_ADDRESS                     =  "127.0.0.1";
                                              # IP-Address on which policyd-weight will
                                              # listen for requests.
                                              # You may only list ONE IP here, if you want
                                              # to listen on all IPs you need to say "all"
                                              # here. Default is "127.0.0.1".
                                              # You need to restart policyd-weight if you
                                              # change this.

$SOMAXCONN                        =   1024;   # Maximum of client connections
                                              # policyd-weight accepts
                                              # Default: 1024

$CHILDIDLE                        =  240;     # how many seconds a child may be idle before
                                              # it dies.

$PIDFILE                          =  "/var/run/policyd-weight.pid";
Zuletzt aktualisiert am