erweiterte gewichtete Prüfungen mittels policyd-weight

Bild: Symbolbild Postfix und SPAM Das zweite (wesentliche) Standbein bei unserer SPAM- und Schadcode-Prüfung von eMails kann der Policy-Dämon policyd-weight von Robert Felber. Postfix leitet alle Client-Angaben bei der Einlieferung an den Policy-Daemon während des SMTP-Dialogs weiter, der dann eine Plausibilitätsprüfung vornimmt. Fälscht ein SPAMer den HELO Namen bzw. die Absenderangaben beim MAIL FROM, so wird dies ebenso bei der gewichteten Prüfung negativ bewertet, die das Vorhandensein, der Client-IP-Adresse auf einer oder mehreren RBLs.

Policyd-weight nimmt vereinfacht und zusammengefasst folgende Prüfungen vor:

  1. Passt der Hostname der beim HELO übertragen wurde, zu IP-Adresse und verweist seinerseits die IP-Adresse bei einer DNS reverse-Abfrage auf diesen Hostnamen.
  2. Steht die IP-Adresse des einliefernden Hosts auf mehreren Sperrlisten? Dabei unterscheidet der Policy-Daemon zwischen einzelnen RBLs und vergibt entsprechend negative Punkte, sofern die IP-Adresse gelistet ist aber auch positive Punkte, wenn die IP-Adresse eben nicht gelistet ist.

Wird bei der Prüfung durch das komplexe Regelwerk festgestellt, dass Kombinationen aus den oben genannten Punkten zu negativ aufgefallen sind, dann wird die weitere Bearbeitung beendet und die Annahme der eMail mit einem 500er Fehler-Code final abgewiesen.

via yum

Die einfachste und schnellste Variante bei der Installation ist die aus dem Repository mailserver.guru. Hier reicht ein einfacher Aufruf von yum und alles wird automatisch installiert inkl. der Paketabhängigkeiten. Will man nicht diesen weg beschreiten, steht immer noch der manuelle Weg offen.

 # yum install policyd-weight 

Was das RPM alle mitbrachte zeigt ein Blick in die RPM-Datenbank.

 # rpm -qil policyd-weight
Name        : policyd-weight
Version     : 0.1.15
Release     : 2beta.el7.centos
Architecture: noarch
Install Date: Wed 05 Nov 2014 04:46:20 PM CET
Group       : System Environment/Daemons
Size        : 132070
License     : Robert Felber. All rights reserved.
Signature   : RSA/SHA1, Wed 05 Nov 2014 04:40:20 PM CET, Key ID 60ecfb9e8195aea0
Source RPM  : policyd-weight-0.1.15-2beta.el7.centos.src.rpm
Build Date  : Wed 05 Nov 2014 04:40:10 PM CET
Build Host  : vml000200.dmz.nausch.org
Relocations : (not relocatable)
Packager    : Django <django@nausch.org>
Vendor      : EDV Beratung Selling-IT - Robert Felber
URL         : http://www.policyd-weight.org/
Summary     : Policy Daemon for the Postfix MTA
Description :
policyd-weight is a Perl policy daemon for the Postfix MTA (2.1 and later)
intended to eliminate forged envelope senders and HELOs (i.e. in bogus mails).
It allows you to score DNSBLs (RBL/RHSBL), HELO, MAIL FROM and client IP
addresses before any queuing is done. It allows you to REJECT messages which
have a score higher than allowed, providing improved blocking of spam and
virus mails. policyd-weight caches the most frequent client/sender
combinations (SPAM as well as HAM) to reduce the number of DNS queries.

After the first three SMTP commands (HELO, MAIL FROM: and RCPT TO:) the
client's IP address, corresponding DNS records (A, MX and PTR) and multiple
DNSBLs can be checked, verified and scored. If the client tries to forge
headers or supplies non-existent DNS or bogus data the spam score will
increase, even more so if the client is listed in one or more DNSBLs. Such
mails can be rejected while in transfer, before the mail body is received by
your MTA. This is different from SpamAssassin or amavisd-new: for scoring or
filtering with these programs, mail needs to be accepted and queued, bandwidth
is used, CPU-time is wasted and mail cannot be rejected without creating a
bounce. Please have a look at the graphical working scheme.

Postfix' built-in checks can be too tough for poorly configured clients: one
hit, and the mail gets rejected. policyd-weight is designed to be fair (DynDNS
MX users get through if their MTA is setup properly, even if their ISP net is
DUL-listed), because its decision whether to reject or accept a mail is based
on multiple factors.

Of course you should still have SpamAssassin and Clamav running (especially
if you are responsible for a company's security and data). But these programs
will have a lot less to do and thus decrease the need for bandwidth and CPU
cycles. Also you might not need greylisting (which would make sense for users
that receive a lot of new spam, though), SPF, extraordinary whitelists or SQL
and other DBs anymore.
/etc/policyd-weight.conf
/usr/bin/policyd-weight
/usr/lib/systemd/system/policyd-weight.service

Als nächstes schreiten wir direkt zur Konfiguration; d.h. wie überspringen das Kapitel „manuelle Installation“.

manuell

Will oder kann man nicht auf das Repository mailserver.guru zurückgreifen, steht immer noch der Installation per Hand nichts im Wege.

Wir holen uns also als erstes das besagte Perl-Script in der aktuellen Version von der Projektseite.

 # wget http://www.policyd-weight.org/policyd-weight

Als nächstes passen wir die Dateirechte an, so dass das Script ausgeführte werden kann.

 # chmod u+rx policyd-weight

Zum Schluß verschieben wir das script noch an Ort und Stelle unter /usr/local/bin.

 # mv policyd-weight /usr/local/bin/

Das vom daemon benötigte Perl-Paket perl-Net-IP installieren wir noch mit Hilfe von yum.

Programmcheck

Als erstes überprüfen wir, ob sich das Perl-Script ausführen lässt. Hierzu fragen wir den Versionsstand des Scripts ab.

 # policyd-weight -v
 policyd-weight version: 0.1.15 beta-2, CacheVer: 5
 Perl version:           5.010001
 Net::DNS version:       0.65
 OS:                     Linux 2.6.32-220.17.1.el6.x86_64

Konfigurationsdatei erzeugen

Als nächstes erstellen wir uns die Default-Konfigurationsdatei.

 # policyd-weight defaults > /etc/policyd-weight.conf
 # vim /etc/policyd-weight.conf
/etc/policyd-weight.conf
# ----------------------------------------------------------------
#  policyd-weight configuration (defaults) Version 0.1.15 beta-2 
# ----------------------------------------------------------------
 
 
   $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  = 1;               # 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
    'pbl.spamhaus.org',       3.25,          0,        'DYN_PBL_SPAMHAUS',
    'sbl-xbl.spamhaus.org',   4.35,       -1.5,        'SBL_XBL_SPAMHAUS',
    'bl.spamcop.net',         3.75,       -1.5,        'SPAMCOP',
#    'dnsbl.njabl.org',        4.25,       -1.5,        'BL_NJABL',
    'ix.dnsbl.manitu.net',    4.35,          0,        'IX_MANITU'
    #'rbl.ipv6-world.net',     4.25,          0,        'IPv6_RBL'  #don't use, kept for testing failures!
);
 
   $MAXDNSBLHITS  = 2;  # If Client IP is listed in MORE
                        # DNSBLS than this var, it gets
                        # REJECTed immediately
 
   $MAXDNSBLSCORE = 8;  # 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',             4,        0,        'SURBL',
    'rhsbl.ahbl.org',              4,        0,        'AHBL',
#    'dsn.rfc-ignorant.org',        3.5,      0,        'DSN_RFCI',
#    'postmaster.rfc-ignorant.org', 0.1,      0,        'PM_RFCI',
#    'abuse.rfc-ignorant.org',      0.1,      0,        'ABUSE_RFCI'
);
 
   $BL_ERROR_SKIP     = 2;  # skip a RBL if this RBL had this many continuous
                            # errors
 
   $BL_SKIP_RELEASE   = 10; # skip a RBL for that many times
 
## cache stuff
   $LOCKPATH          = '/tmp/.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.5,       -1.25 );
   @helo_score                       = (1.5,       -2    );
   @helo_from_mx_eq_ip_score         = (1.5,       -3.1  );
   @helo_numeric_score               = (2.5,        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.5,        0    );
   @failed_helo_seems_dialup         = (2,          0    );
   @helo_ip_in_client_subnet         = (0,         -1.2  );
   @helo_ip_in_cl16_subnet           = (0,         -0.41 );
   @client_seems_dialup_score        = (3.75,       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";

Hat man Änderungen an der Konfigurationsdatei vorgenommen, so kann mit mit Hilfe des folgenden Aufrufs einen Syntaxcheck durchführen.

 # perl -c /etc/policyd-weight.conf
 /etc/policyd-weight.conf syntax OK

User polw anlegen

Für den Betrieb benötigen wir noch einen User polw, den wir mit

 # useradd -r -s /sbin/false polw

anlegen.

systemd Startscript anlegen

Zum Starten unseres Daemon legen wir uns noch ein Startscript an.

 # vim /usr/lib/systemd/system/policyd-weight.service
/usr/lib/systemd/system/policyd-weight.service
[Unit]
Description=policyd-weight is a Perl policy daemon for the Postfix MTA (2.1 and later) intended to eliminate forged envelope senders and HELOs (i.e. in bogus mails).
Before=postfix.service
After=syslog.target network.target
 
[Service]
Type=forking
EnvironmentFile=/etc/policyd-weight.conf
Restart=on-failure
ExecStart=/usr/local/bin/policyd-weight start
ExecReload=/usr/local/bin/policyd-weight reload
ExecStop=/usr/local/bin/policyd-weight stop
 
[Install]
WantedBy=multi-user.target

Ausnahmeregelungen für Absendeserver

Leider kommt es auch vor, dass vor allem große Provider hinter ihren MX ein cluster betreiben, die mit wechselnden IP-Adressen aus einem Pool aufschlagen. Damit können unter Umständen Probleme bei der Bewertung entstehen. Diese schalten wir dann bei Bedarf in der policyd_weight_client_whitelist frei.

 # vim /etc/postfix/policyd_weight_client_whitelist
/etc/postfix/policyd_weight_client_whitelist
# Django : 2012-02-03
# Datei zu Definition von Ausnahmeregeln für die gewichtete Überprüfung des Policyd-weight Daemon.
# Policyd-weight ist ein E-Mail-Filter für den Postfix Mail Transfer Agent der von Robert Felber 
# in Perl entwickelt wurde. Policyd-weight untersucht die Mail bei der Einlieferung anhand des 
# Envelope Sender, des Envelope To und der HELO-Daten, die während des SMTP-Handshakes übertragen 
# werden und vergibt für verschiedene Kriterien Punkte. Dabei werden zum Beispiel Realtime Blackhole 
# Listen abgefragt oder die DNS-Konfiguration des Absenders überprüft. Für jeden Regelverstoß gibt 
# es negative Punkte und ab einer bestimmten Wertung wird die Mail abgelehnt.
#
# Nach Änderungen an den policyd-weight Ausnahmeliste policyd_weight_client_whitelist ist die 
# zugehörige Datenbank-Datei mit Hilfe von "postmap /etc/postfix/policyd_weight_client_whitelist"
# zu erstellen und der Daemon von den Änderungen mit einem reload in Kenntnis zu setzen!
# "service policyd-weight reload"
#
# Django : 2008-10-08 
# 1und1.com (big pool, inserted by Django)
kundenserver.de         OK

Nach Änderungen an den policyd-weight Ausnahmeliste policyd_weight_client_whitelist ist die zugehörige Datenbank-Datei mit Hilfe von

 # postmap /etc/postfix/policyd_weight_client_whitelist

zu erstellen und der Daemon von den Änderungen mit einem reload in Kenntnis zu setzen!

 # service policyd-weight reload

Postfix Konfiguration

Bei der Grundkonfiguration unseres Postfix-SMTP-Servers hatten wir bereits im Abschnitt SMTP Recipient Restrictions die nötige Konfigurationszeile angelegt. Wir aktivieren also die zugehörigen beiden Optionen check_client_access btree:/etc/postfix/policyd_weight_client_whitelist und check_policy_service inet:127.0.0.1:12525 in der Konfigurationsdatei.

 # vim /etc/postfix/main.cf
...
 
################################################################################
## SMTP RECIPIENT RESTRICTIONS
#
# Django : 2014-10-29 - Schutz unserer Empfänger mit Hilfe der Recipient 
#          Restrictions 
# default: smtpd_recipient_restrictions =
smtpd_recipient_restrictions =
#          Postmaster, abuse und andere aufgaben- oder funktionsgebundene 
#          eMail-Adressen (Role-Accounts) whitelisten
           check_recipient_access btree:/etc/postfix/access_recipient-rfc
 
#          Black- und Whitelisting       (Kapitel 8.2.3 White- und Blacklisting)
           check_client_access cidr:/etc/postfix/access_client
           check_helo_access btree:/etc/postfix/access_helo
           check_sender_access btree:/etc/postfix/access_sender
           check_recipient_access btree:/etc/postfix/access_recipient
 
#          Unsere eigenen Nutzer zulassen-/erlauben             
#                                (Kapitel 8.2.2 Relaying erlauben und verbieten)
           permit_sasl_authenticated
           permit_mynetworks
 
#          RBL überprüfen               (Kapitel 10.11 Realtime Blackhole Lists)
           reject_rbl_client zen.spamhaus.org
           reject_rbl_client ix.dnsbl.manitu.net
           reject_rbl_client bl.spamcop.net
           reject_rhsbl_client multi.uribl.com
 
#          Greylisting via postgrey checken via Unix-Socket
#                                          (Kapitel 9.2.5 postgrey installieren)
           check_policy_service unix:postgrey/socket
 
#          Policyd-Weight check over TCP-Connection 
#                                      (Kapitel 9.3 policyd-weight installieren)
           check_client_access btree:/etc/postfix/policyd_weight_client_whitelist
           check_policy_service inet:127.0.0.1:12525
 
#          Dynamische Prüfung auf existente Relay-Empfänger
#                            (Kapitel 12.2.2 Dynamische Empfänger-Verifizierung)
           reject_unverified_recipient
 
#          Backupserver (MX) erlauben
           permit_mx_backup
 
#          alles andere an relaying verbieten   
#                                (Kapitel 8.2.2 Relaying erlauben und verbieten)
           reject_unauth_destination
 
#          Quota-Status-Policy-Daemon am Dovecot-Backend-System
#          Dovecotbuch (ISBN 978-3-95539-74-7) Seite 219 ff.  
#                          (Kapitel 11.11 "Der Quota-Policy-Server für Postfix")
           check_policy_service inet:10.0.0.77:10000
 
#          Zu guter Letzt alles durchlassen, was bis jetzt noch nicht 
#          beanstandet wurde
           permit

Das Starten des Daemon erfolgt über folgenden Aufruf.

 # systemctl start policyd-weight

Den erfolgreichen Start bzw. den Status des policyd-weight Daemon können wir bei Bedarf mit folgendem Aufruf abfragen.

 # systemctl status policyd-weight
policyd-weight.service - policyd-weight is a Perl policy daemon for the Postfix MTA (2.1 and later) intended to eliminate forged envelope senders and HELOs (i.e. in bogus mails).
   Loaded: loaded (/usr/lib/systemd/system/policyd-weight.service; disabled)
   Active: active (running) since Wed 2014-11-05 16:46:56 CET; 8s ago
  Process: 6315 ExecStart=/usr/bin/policyd-weight start (code=exited, status=0/SUCCESS)
 Main PID: 6316 (policyd-weight )
   CGroup: /system.slice/policyd-weight.service
           ├─6316 policyd-weight (master)
           └─6317 policyd-weight (cache)

Nov 05 16:46:56 vml000087.dmz.nausch.org systemd[1]: Started policyd-weight is a Perl policy daemon for the Postfix MTA (2.1 and later) intended to eliminate forged envelope senders and HE...gus mails)..
Nov 05 16:46:56 vml000087.dmz.nausch.org postfix/policyd-weight[6316]: policyd-weight 0.1.15 beta-2 started and daemonized. conf:/etc/policyd-weight.conf; GID:995 995 EGID:995 995 UID:995 E...int mode: 0
Nov 05 16:46:56 vml000087.dmz.nausch.org postfix/policyd-weight[6316]: cache_query: start: calling spawn_cache()
Nov 05 16:46:56 vml000087.dmz.nausch.org postfix/policyd-weight[6317]: cache spawned
Hint: Some lines were ellipsized, use -l to show in full.

Im Maillog wird der Start des Daemon entsprechend dokumentiert.

 # less /var/log/maillog
Nov  5 16:46:56 vml000087 postfix/policyd-weight[6316]: policyd-weight 0.1.15 beta-2 started and daemonized. conf:/etc/policyd-weight.conf; GID:995 995 EGID:995 995 UID:995 EUID:995; taint mode: 0
Nov  5 16:46:56 vml000087 postfix/policyd-weight[6316]: cache_query: start: calling spawn_cache()
Nov  5 16:46:56 vml000087 postfix/policyd-weight[6317]: cache spawned

Mit Hilfe von netstat können wir überprüfen, ob der Port 12525 geöffnet wurde.

 # netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      0          56505      4931/master         
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      0          56511      4931/master         
tcp        0      0 127.0.0.1:12525         0.0.0.0:*               LISTEN      0          67780      6316/policyd-weight 
tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      0          56517      4931/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          24989      1223/sshd           
tcp6       0      0 :::25                   :::*                    LISTEN      0          56506      4931/master         
tcp6       0      0 :::587                  :::*                    LISTEN      0          56512      4931/master         
tcp6       0      0 :::465                  :::*                    LISTEN      0          56518      4931/master         
tcp6       0      0 :::22                   :::*                    LISTEN      0          24991      1223/sshd           
udp        0      0 0.0.0.0:50558           0.0.0.0:*                           70         21030      571/avahi-daemon: r 
udp        0      0 0.0.0.0:46503           0.0.0.0:*                           0          20919      594/chronyd         
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           70         21029      571/avahi-daemon: r 
udp        0      0 127.0.0.1:323           0.0.0.0:*                           0          20920      594/chronyd         

Gleiches können wir natürlich auch mit dem Befehl lsof erreichen.

 # lsof -i:12525
 COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
 policyd-w 6316 polw    4u  IPv4  67780      0t0  TCP localhost:12525 (LISTEN)

Damit der Daemon automatisch beim Hochfahren des Servers gestartet wird, nutzen wir folgenden Aufruf.

 # systemctl enable policyd-weight.service
 ln -s '/usr/lib/systemd/system/policyd-weight.service' '/etc/systemd/system/multi-user.target.wants/policyd-weight.service'

Wollen wir überprüfen ob der Dienst automatisch startet, verwenden wir folgenden Aufruf.

 # systemctl is-enabled policyd-weight.service
 enabled

Die Rückmeldung enabled zeigt an, dass der Dienst automatisch startet; ein disabled zeigt entsprechend an, dass der Dienst nicht automatisch startet.

erfolgreiche negative Bewertung einer Anlieferung

Am nachfolgenden Beispiel sehen wir, den erfolgreichen Mailversand nach der Bewertung durch policyd-weight.

Oct 14 22:31:30 nss postfix/smtpd[14044]: connect from www.linuxtv.org[212.227.166.180]
Oct 14 22:31:34 nss postfix/policyd-weight[2715]: decided action=PREPEND X-policyd-weight: using cached result; rate: -7.6; <client=212.227.166.180> <helo=www.linuxtv.org> <from=vdr-bounces+michl=naush.org@linuxtv.org> <to=grossermeister@naush.org>; delay: 1s 
Oct 14 22:31:34 nss postgrey[21879]: action=pass, reason=triplet found, client_name=www.linuxtv.org, client_address=212.227.166.180, sender=vdr-bounces+michl=naush.org@linuxtv.org, recipient=michl@naush.org 
Oct 14 22:31:34 nss postgrey[21879]: cleaning up old logs... 
Oct 14 22:31:34 nss postfix/smtpd[14044]: 31F5E76022D: client=www.linuxtv.org[212.227.166.180]
Oct 14 22:31:34 nss postfix/cleanup[14048]: 31F5E76022D: message-id=<Pine.LNX.4.64.0810142329220.5339@shogun.pilppa.org>
Oct 14 22:31:34 nss postfix/qmgr[1304]: 31F5E76022D: from=<vdr-bounces+michl=naush.org@linuxtv.org>, size=3523, nrcpt=1 (queue active)
Oct 14 22:31:34 nss postfix/smtpd[14044]: disconnect from www.linuxtv.org[212.227.166.180]

erfolgreiche positive Bewertung einer Anlieferung

In der Regel dauert es nicht all zulange und ein SPAMer wird erfolgreich positiv bewertet, also als SPAM erkannt und die Annahme abgelehnt.

Jun  6 08:46:11 pml010001 postfix/policyd-weight[6560]: weighted check:  IN_DYN_PBL_SPAMHAUS=3.25 NOT_IN_SBL_X
BL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 DSBL_ORG=SKIP(0) BAD_MX=6.825 BOGUS_MX=5.35 CL_IP_NE
_HELO=4.75 RESOLVED_IP_IS_NOT_HELO=1.5 (check from: .nausch. - helo: .computer. - helo-domain: .computer.)  FR
OM_NOT_FAILED_HELO(DOMAIN)=6.25; <client=115.246.189.233> <helo=computer> <from=michael@nausch.org> <to=michae
l@nausch.org>; rate: 23.425 
Jun  6 08:46:11 pml010001 postfix/policyd-weight[6560]: decided action=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; MTA helo: computer, MTA hostname: unknown[115.246.189.233] (helo/hostname mismatch); <client=115.246.189.233> <helo=computer> <from=michael@nausch.org> <to=michael@nausch.org>; delay: 0s 
Jun  6 08:46:11 pml010001 postfix/smtpd[31326]: NOQUEUE: reject: RCPT from unknown[115.246.189.233]: 550 5.7.1 <michael@nausch.org>: Recipient address rejected: 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; MTA helo: computer, MTA hostname: unknown[115.246.189.233] (helo/hostname mismatch); from=<michael@nausch.org> to=<michael@nausch.org> proto=SMTP helo=<computer>

Sollte im maillog folgende Fehlermeldung auftauchen …

Feb 25 07:52:27 vml000080 postfix/policyd-weight[10649]: warning: cache_query: $csock couln't be created: connect: Connection refused, calling spawn_cache()

… dann wird der Mailsever die Annahme der Nachrichten mit einem temporären Fehler ablehnen. 451 4.3.5 Server configuration problem

Dann einfach den Deamon neu starten und sein temporäres Arbeitsverzeichnis vorher löschen.

  1. Daemon stoppen
    # systemctl stop policyd-weight
  2. Arbeitsverzeichnis löschen
    # rm /tmp/.policyd-weight/* -rf
  3. Daemon starten
    # systemctl start policyd-weight start

Der Policy-Daemon policyd-weight hat sich, wie auch greylisting in der Abwehr von SPAM und anderen unerwünschten Verkehrs bestens bewährt, kann so doch jede Menge des unerwünschten Traffics abgelehnt werden.

Da aber der Dienst rfc-ignorant.org mittlerweilen den Dienst eingestellt hat und die Gewichtung der unterschiedlichen Gewichtung von DNSBLs der Postfix Daemon postscreen bestens beherrscht, ist der Einsatz von policyd-weight gut zu überlegen!

summa sumarum:

Wie auch schon beim greylisting setzt man statt auf greylisting und auf policyd-weight nunmehr besser auf postscreen!

Links

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
  • centos/mail_c7/spam_2.txt
  • Zuletzt geändert: 18.01.2019 07:49.
  • von django