Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
centos:mail_c6:spam_2 [22.11.2013 11:33. ] – django | centos:mail_c6:spam_2 [20.04.2018 10:44. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== erweiterte gewichtete Prüfungen mittels policyd-weight ====== | ||
+ | Das zweite wesentliche Standbein bei unserer SPAM- und Schadcode-Prüfung von eMails ist der Policy-Dämon [[http:// | ||
+ | |||
+ | Policyd-weight nimmt vereinfacht und zusammengefasst folgende Prüfungen vor: | ||
+ | - Passt der Hostname der beim **HELO** übertragen wurde, zu IP-Adresse und verweist seinerseits die IP-Adresse bei einer DNS reverse-Abfrage auf diesen Histnamen. | ||
+ | - Steht die IP-Adresse des einliefernden Hosts auf mehreren Sperrlisten? | ||
+ | |||
+ | Wird bei der Prüfung durch das komplexe Regelwerk festgestellt, | ||
+ | |||
+ | ===== Download und Installation ===== | ||
+ | Da es noch kein vorgefertigtes RPM in den einschlägigen RPM-Quellen gibt, welchen wir vertrauen, installieren wir den daemon selbst per Hand. | ||
+ | |||
+ | Wir holen uns also als erstes das besagte Perl-Script in der aktuellen Version von der [[http:// | ||
+ | # wget http:// | ||
+ | |||
+ | 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 **/ | ||
+ | # mv policyd-weight / | ||
+ | |||
+ | <WRAP round tip>Das vom daemon benötigte Perl-Paket **perl-Net-IP** installieren wir noch mit Hilfe von **yum**.</ | ||
+ | |||
+ | ===== Konfiguration ===== | ||
+ | ==== 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 | ||
+ | |||
+ | | ||
+ | Perl version: | ||
+ | | ||
+ | | ||
+ | |||
+ | ==== Konfigurationsdatei erzeugen ==== | ||
+ | Als nächstes erstellen wir uns die Default-Konfigurationsdatei. | ||
+ | # policyd-weight defaults > / | ||
+ | |||
+ | |||
+ | # vim / | ||
+ | <file bash / | ||
+ | # policyd-weight configuration (defaults) Version 0.1.15 beta-2 | ||
+ | # ---------------------------------------------------------------- | ||
+ | |||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | # REJECTLEVEL will be rejected | ||
+ | |||
+ | | ||
+ | # 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: " | ||
+ | |||
+ | |||
+ | | ||
+ | # DEFER_IF_REJECT, | ||
+ | # 4xx response codes. See also access(5) | ||
+ | # DEFAULT: 450 | ||
+ | |||
+ | | ||
+ | # scores greater than DEFER_LEVEL will be | ||
+ | # rejected | ||
+ | # DEFAULT: 5 | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | # If ON request that ALL clients are only | ||
+ | # checked against RBLs | ||
+ | |||
+ | | ||
+ | # qr/ | ||
+ | # qr/ | ||
+ | ); # specify a comma-separated list of regexps | ||
+ | # for client hostnames which shall only | ||
+ | # be RBL checked. This does not work for | ||
+ | # postfix' | ||
+ | # 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 | ||
+ | | ||
+ | |||
+ | | ||
+ | # When set to ON it logs only RBLs which | ||
+ | # affect scoring (positive or negative) | ||
+ | | ||
+ | ## DNSBL settings | ||
+ | | ||
+ | # HOST, HIT SCORE, | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | #' | ||
+ | ); | ||
+ | |||
+ | | ||
+ | # DNSBLS than this var, it gets | ||
+ | # REJECTed immediately | ||
+ | |||
+ | | ||
+ | # DNSBLs is ABOVE this | ||
+ | # level, reject immediately | ||
+ | |||
+ | | ||
+ | |||
+ | ## RHSBL settings | ||
+ | | ||
+ | ' | ||
+ | ' | ||
+ | ); | ||
+ | |||
+ | | ||
+ | # errors | ||
+ | |||
+ | | ||
+ | |||
+ | ## cache stuff | ||
+ | | ||
+ | # trailing slash) | ||
+ | |||
+ | | ||
+ | # daemon. | ||
+ | |||
+ | | ||
+ | # before starting maintenance routines | ||
+ | # NOTE: standard maintenance jobs happen | ||
+ | # regardless of this setting. | ||
+ | |||
+ | | ||
+ | # maintenance jobs: | ||
+ | # checking for config changes | ||
+ | |||
+ | # negative (i.e. SPAM) result cache settings ################################## | ||
+ | |||
+ | | ||
+ | # To this level the cache will be cleaned. | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | # to decrease TTL counter | ||
+ | |||
+ | |||
+ | # positve (i.,e. HAM) result cache settings ################################### | ||
+ | |||
+ | | ||
+ | # of entries the cache will be cleaned | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | # succeed one time the RBL checks again | ||
+ | |||
+ | | ||
+ | # must pass one time the RBL checks again. | ||
+ | # Values must be nonfractal. Accepted | ||
+ | # time-units: s, m, h, d | ||
+ | |||
+ | | ||
+ | # checks in order to be listed as hard-HAM | ||
+ | # After this time the client will pass | ||
+ | # immediately for PTTL within PTIME | ||
+ | |||
+ | |||
+ | ## DNS settings | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | # in a complete policy query | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | # broken in Net::DNS version 0.51. Works with | ||
+ | # Net::DNS 0.53; DEFAULT: off | ||
+ | |||
+ | | ||
+ | # Normally policyd-weight tries to use a faster | ||
+ | # RBL lookup routine instead of Net::DNS | ||
+ | |||
+ | |||
+ | | ||
+ | # This overrides resolv.conf settings | ||
+ | # Example: $NS = ' | ||
+ | # DEFAULT: empty | ||
+ | |||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | # 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 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | # X-policyd-weight: | ||
+ | # DEFAULT: on | ||
+ | |||
+ | |||
+ | | ||
+ | # 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. | ||
+ | # | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | # | ||
+ | # Process Options | ||
+ | # | ||
+ | | ||
+ | |||
+ | | ||
+ | # DEFAULT: empty, will be initialized as | ||
+ | # $USER | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | # listens for policy requests from postfix | ||
+ | |||
+ | | ||
+ | # listen for requests. | ||
+ | # You may only list ONE IP here, if you want | ||
+ | # to listen on all IPs you need to say ' | ||
+ | # here. Default is ' | ||
+ | # You need to restart policyd-weight if you | ||
+ | # change this. | ||
+ | |||
+ | | ||
+ | # policyd-weight accepts | ||
+ | # Default: 1024 | ||
+ | |||
+ | |||
+ | | ||
+ | # it dies. | ||
+ | |||
+ | | ||
+ | |||
+ | </ | ||
+ | |||
+ | Hat man Änderungen an der Konfigurationsdatei vorgenommen, | ||
+ | # perl -c / | ||
+ | |||
+ | / | ||
+ | |||
+ | ==== User polw anlegen ==== | ||
+ | Für den Betrieb benötigen wir noch einen User **polw**, den wir mit | ||
+ | # useradd -r -s /sbin/false polw | ||
+ | |||
+ | anlegen. | ||
+ | |||
+ | ==== Startscript anlegen ==== | ||
+ | Zum Starten unseres Daemon legen wir uns noch ein Startscript an. | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # | ||
+ | # chkconfig: 2345 79 31 | ||
+ | # description: | ||
+ | # | ||
+ | # processname: | ||
+ | # | ||
+ | |||
+ | # Source function library. | ||
+ | . / | ||
+ | |||
+ | # Source networking configuration. | ||
+ | . / | ||
+ | |||
+ | # Check that networking is up. | ||
+ | [ ${NETWORKING} = " | ||
+ | |||
+ | prog=policyd-weight | ||
+ | policydweight=/ | ||
+ | |||
+ | # Source an auxiliary options file if we have one, and pick up OPTIONS, | ||
+ | if [ -r / | ||
+ | . / | ||
+ | fi | ||
+ | |||
+ | start() { | ||
+ | echo -n $" | ||
+ | $policydweight start | ||
+ | RETVAL=$? | ||
+ | echo | ||
+ | [ $RETVAL -eq 0 ] && touch / | ||
+ | } | ||
+ | stop() { | ||
+ | echo -n $" | ||
+ | $policydweight stop | ||
+ | RETVAL=$? | ||
+ | echo | ||
+ | [ $RETVAL -eq 0 ] && rm -f / | ||
+ | } | ||
+ | |||
+ | restart() { | ||
+ | stop | ||
+ | start | ||
+ | } | ||
+ | |||
+ | reload() { | ||
+ | echo -n $" | ||
+ | $policydweight reload | ||
+ | RETVAL=$? | ||
+ | echo | ||
+ | } | ||
+ | |||
+ | # See how we were called. | ||
+ | case " | ||
+ | start) | ||
+ | start | ||
+ | ;; | ||
+ | stop) | ||
+ | stop | ||
+ | ;; | ||
+ | restart) | ||
+ | restart | ||
+ | ;; | ||
+ | reload) | ||
+ | reload | ||
+ | ;; | ||
+ | *) | ||
+ | echo $" | ||
+ | exit 1 | ||
+ | esac | ||
+ | |||
+ | exit $RETVAL | ||
+ | </ | ||
+ | |||
+ | Damit unser Script auch ausgeführt werden kann, ändern wir noch die Dateiberechtigungen. | ||
+ | # chmod +x / | ||
+ | |||
+ | ==== Postfix Konfiguration ==== | ||
+ | Bei den **smtpd_recipient_restrictions** tragen wir nun zur Aktivierung folgenden Eintrag nach dem greylisting-Eintrag ein. | ||
+ | # vim / | ||
+ | <code bash> | ||
+ | # Greylisting via postgrey checken via Unix-Socket | ||
+ | check_policy_service unix: | ||
+ | # Policyd-Weight check over TCP-Connection | ||
+ | check_client_access btree:/ | ||
+ | check_policy_service inet: | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ==== 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-Adrressen 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 / | ||
+ | <file bash / | ||
+ | # 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 " | ||
+ | # zu erstellen und der Daemon von den Änderungen mit einem reload in Kenntnis zu setzen! | ||
+ | # " | ||
+ | # | ||
+ | # Django : 2008-10-08 | ||
+ | # 1und1.com (big pool, inserted by Django) | ||
+ | kundenserver.de | ||
+ | </ | ||
+ | |||
+ | <WRAP round important> | ||
+ | Nach Änderungen an den policyd-weight Ausnahmeliste **policyd_weight_client_whitelist** ist die zugehörige Datenbank-Datei mit Hilfe von < | ||
+ | </ | ||
+ | |||
+ | ===== erster manueller Start des Daemon ===== | ||
+ | Nun können wir das erste mal den Daemon anstarten. | ||
+ | # service policyd-weight start | ||
+ | Im Maillog wird der Start des Daemon entsprechend quittiert. | ||
+ | < | ||
+ | Jun 8 23:18:10 vml000080 postfix/ | ||
+ | Jun 8 23:18:10 vml000080 postfix/ | ||
+ | </ | ||
+ | |||
+ | In der Prozessliste finden wir zwei Prozesse, die gestartet wurden: | ||
+ | # ps auxw | grep policyd-weight | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Mittels lsof können wir nun noch überprüfen, | ||
+ | # lsof -i :12525 | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | ===== automatisches Starten des Dienste beim Systemstart | ||
+ | Damit der postgrey-Daemon automatisch bei jedem Systemstart startet, denn ohne laufenden **policyd-weight-daemon** verweigert nun unser **postfix** die Annahme der Nachrichten, | ||
+ | # chkconfig policyd-weight on | ||
+ | |||
+ | Die Überprüfungung ob die beiden Dienste (Daemons) postfix und postgrey wirklich bei jedem Systemstart automatisch mit gestartet werden, kann durch folgenden Befehle erreicht werden: | ||
+ | # chkconfig --list | grep post* | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | # chkconfig --list | grep poli* | ||
+ | |||
+ | | ||
+ | |||
+ | Wichtig sind jeweils die Schalter **on** bei den Runleveln - **2 3 4 5**. | ||
+ | |||
+ | ===== Bewertungsbeispiele ===== | ||
+ | ==== erfolgreiche negative Bewertung einer Anlieferung | ||
+ | Am nachfolgenden Beispiel sehen wir, den erfolgreichen Mailversand nach der Bewertung durch policyd-weight. | ||
+ | < | ||
+ | Oct 14 22:31:34 nss postfix/ | ||
+ | Oct 14 22:31:34 nss postgrey[21879]: | ||
+ | Oct 14 22:31:34 nss postgrey[21879]: | ||
+ | Oct 14 22:31:34 nss postfix/ | ||
+ | Oct 14 22:31:34 nss postfix/ | ||
+ | Oct 14 22:31:34 nss postfix/ | ||
+ | Oct 14 22:31:34 nss postfix/ | ||
+ | </ | ||
+ | |||
+ | ==== 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. | ||
+ | < | ||
+ | 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: | ||
+ | OM_NOT_FAILED_HELO(DOMAIN)=6.25; | ||
+ | l@nausch.org>; | ||
+ | Jun 6 08:46:11 pml010001 postfix/ | ||
+ | Jun 6 08:46:11 pml010001 postfix/ | ||
+ | </ | ||
+ | |||
+ | ===== Fehlerbehandlung | ||
+ | Sollte im **maillog** folgende Fehlermeldung auftauchen ... | ||
+ | Feb 25 07:52:27 vml000080 postfix/ | ||
+ | ... 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. | ||
+ | - **Daemon stoppen** < | ||
+ | - **Arbeitsverzeichnis löschen** < | ||
+ | - **Daemon starten** < | ||
+ | |||
+ | |||
+ | |||
+ | ====== Links ====== | ||
+ | * **[[centos: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||
+ | |||