Walka ze spamem cz.4 – Postfix SpamAssassin

SpamAssasin to ostatnia broń w naszym arsenale przygotowanym na wszelki spam jaki może się pojawić na naszym serwerze poczty.

 

Zainstalujmy więc wymagane paczki:

apt-get install spamassassin spamc

Dodajmy użytkownika, który będzie uruchamiał spammassassin-a

groupadd spamd
useradd -g spamd -s /bin/false spamd
chown spamd:spamd -R /etc/spamassassin/

Użytkownika już mamy, teraz czas skonfigurować SA:

#vim /etc/default/spamassassin

# If you're using systemd (default for jessie), the ENABLED setting is
# not used. Instead, enable spamd by issuing:
# systemctl enable spamassassin.service
# Change to "1" to enable spamd on systems using sysvinit:
ENABLED=1
SPAMD_HOME="/home/spamd/"
OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir /home/spamd/ -s /home/spamd/spamd.log"
PIDFILE="/home/spamd/spamd.pid"
CRON=1

Uruchommy SA:

service spamassassin start

Dodajmy SpamAssassin-a do postfixa:

#vim /etc/postfix/master.cf

#na dole pliku dodajmy:
spamassassin unix -     n       n       -       -       pipe
        user=spamd argv=/usr/bin/spamc -f -e  
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

#w każdym protokole, z którego korzystamy (np. smtps, submission) dodajmy opcję kierowania poczty do spamassassina:
-o content_filter=spamassassin

Zrestartujmy postfix-a:

service postfix restart

Musimy jeszcze utworzyć reguły filtrowania:

#/etc/spamassassin/local.cf

rewrite_header Subject ***** SPAM _SCORE_ *****
report_safe             0
required_score          5.0
use_bayes               1
use_bayes_rules         1
bayes_auto_learn        1
skip_rbl_checks         0
use_razor2              0
use_dcc                 0
use_pyzor               0

#Adjust scores for SPF FAIL
score SPF_FAIL 4.0
score SPF_HELO_FAIL 4.0
score SPF_HELO_SOFTFAIL 3.0
score SPF_SOFTFAIL 3.0

#adjust DKIM scores
score DKIM_ADSP_ALL 3.0
score DKIM_ADSP_DISCARD  10.0
score DKIM_ADSP_NXDOMAIN 3.0

Restart SA dla pewności, że korzysta z naszych nowych reguł:

service spamassassin restart

Aby przetestować SpamAssassin-a można z obcego serwera wysłać maila na swoją skrzynkę w postfix-ie i przeglądnąć nagłówek wiadomości.

 

Aktualizacja 11/05/2016:

Zauważyłem, że spamassassin informuje o błędzie

warn: config: failed to parse line, skipping, in "/etc/spamassassin/local.cf": use_dcc 0

Można to łatwo naprawić komentując use_dcc lub instalując paczkę z dcc i nie używać tego modułu (bezcelowe).

spamassassin --lint

 

Pozostałe wpisy dotyczące tego cyklu:

Posftix i Dovecot – Idealny duet tworzący serwer poczty

Walka ze spamem cz.1 – Postfix SPF

Walka ze spamem cz.2 – Postfix DKIM

Walka ze spamem cz.3 – Postfix DMARC

Walka ze spamem cz.5 – Dovecot Sieve

4 myśli na “Walka ze spamem cz.4 – Postfix SpamAssassin”

  1. Cześć,
    Mam duży problem z potokiem w Postfixie. Otóż w master.cf skonfigurowałem
    smtp inet n – – – – smtpd
    -o content_filter=spamassassin

    spamassassin unix – n n – – pipe
    user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

    w potoku dałem również ścieżkę do skryptu sh:
    #!/bin/sh

    # —————————————————————–
    # File: spamchk
    #
    # Purpose: SPAMASSASIN shell-based filter
    #
    # Location: /usr/local/bin
    #
    # Usage: Call this script from master.cf (Postfix)
    #
    # Certified: GENTOO Linux, Spamassassin 3.0, Postfix
    # —————————————————————–

    # Variables
    SENDMAIL=”/usr/sbin/sendmail -i”
    EGREP=/bin/egrep

    # Exit codes from
    EX_UNAVAILABLE=69

    # Number of *’s in X-Spam-level header needed to sideline message:
    # (Eg. Score of 5.5 = „*****” )
    SPAMLIMIT=10

    # Clean up when done or when aborting.
    ### [zakomentowałem] trap „rm -f /tmp/out.$$” 0 1 2 3 15

    # Pipe message to spamc
    cat | /usr/bin/spamc -u filter | sed 's/^\.$/../’ > /tmp/out.$$

    # Are there more than $SPAMLIMIT stars in X-Spam-Level header? :
    if $EGREP -q „^X-Spam-Level: \*{$SPAMLIMIT,}” < /tmp/out.$$
    then
    # Option 1: Move high scoring messages to sideline dir so
    # a human can look at them later:
    # mv out.$$ $SIDELINE_DIR/`date +%Y-%m-%d_%R`-$$

    # Option 2: Divert to an alternate e-mail address:
    $SENDMAIL support@domain.pl < /tmp/out.$$

    # Option 3: Delete the message
    # rm -f /tmp/out.$$
    else
    $SENDMAIL "$@" < /tmp/out.$$
    fi

    # Postfix returns the exit status of the Postfix sendmail command.
    exit $?

    W powyższym skrypcie skierowałem maile do katalogu /tmp i odczytałem w nim dopisane nagłówki przez spamd ale oznaczeniem, że to nie spam… Myślałem, że ten skrypt zadziała ale niestety nie… Czyli wychodzi, że nic nie działa i nie wiem dlaczego…. Czy nowy postfix ma jakaś inną konfigurację potoków?
    W logach to co zauważyłem, kiedy mail przechodzi przez postfixa:
    Sun Nov 20 13:01:25 2022 [382267] info: spamd: connection from ::1 [::1]:35776 to port 783, fd 5
    Sun Nov 20 13:01:25 2022 [382267] info: spamd: processing message for spamd:1008
    Sun Nov 20 13:01:25 2022 [387909] info: util: setuid: ruid=1008 euid=1008 rgid=1008 1008 1008 egid=1008 1008 1008
    Sun Nov 20 13:01:25 2022 [382267] info: spamd: clean message (-0.2/5.0) for spamd:1008 in 0.5 seconds, 3297 bytes.
    Sun Nov 20 13:01:25 2022 [382267] info: spamd: result: . 0 – DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS scantime=0.5,size=3297,user=spamd,uid=1008,required_score=5.0,rhost=::1,raddr=::1,rport=35776,mid=,autolearn=ham autolearn_force=no

    Kiedy wykonuję z linii poleceń:
    /usr/bin/spamc -e /usr/sbin/sendmail -oi -f sender@mail.pl recipient@mail.pl
    XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBETEST-EMAIL*C.34X
    CTRL+D
    wtedy idzie to do spamd i mam taki wynik w logach:
    Sun Nov 20 13:14:26 2022 [382267] info: spamd: connection from ::1 [::1]:44746 to port 783, fd 5
    Sun Nov 20 13:14:26 2022 [382267] info: spamd: processing message (unknown) for spamd:1008
    Sun Nov 20 13:14:26 2022 [388068] info: util: setuid: ruid=1008 euid=1008 rgid=1008 1008 1008 egid=1008 1008 1008
    Sun Nov 20 13:14:27 2022 [382267] info: spamd: identified spam (7.9/5.0) for spamd:1008 in 0.2 seconds, 79 bytes.
    Sun Nov 20 13:14:27 2022 [382267] info: spamd: result: Y 7 – EMPTY_MESSAGE,MISSING_DATE,MISSING_FROM,MISSING_HEADERS,MISSING_MID,MISSING_SUBJECT,NO_HEADERS_MESSAGE,NO_RECEIVED,NO_RELAYS scantime=0.2,size=79,user=spamd,uid=1008,required_score=5.0,rhost=::1,raddr=::1,rport=44746,mid=(unknown),autolearn=no autolearn_force=no

    Ewidentnie problem w master.cf. Co w takim razie trzeba zrobić by w potoku było wszystko jak być powinno. Może spamd nie widzi maila – ale w takim razie na jakiej podstawie oznacza nagłówki w mailu, patrzyłem i są nagłówki w mailu:
    X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on cybos.pl
    X-Spam-Level:
    X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
    DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE,
    RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6

    1. trochę do okoła działanie moim zdaniem, od przenoszenia zatagowanych jako spam wiadomości jest np. SIEVE od DOVECOTa, chyba że z jakiegoś powodu nie wykorzystujesz dovecot-a, pewnie temat już rozwiązałeś ale jeżeli nie, wbijaj coś wymyślimy

  2. potrzebuję pomocy z konfiguracją markowania wiadomości i przenoszeniem do folderu spam automatycznie, pomoże kto ?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*