Ten post będzie o tym jak zapewnić większą ilość raportów wysyłanych przez SpamCopa do abuse@…
Zwykle (czyli tak jak np. ja miałem ;) ) serwer pocztowy jest tak skonfigurowany, że w momencie uznania iż dany mail jest spamem wysyła komunikat 550 i kończy sesję. Może to się stać zarówno podczas testów samego nagłowka, czyli zwykle jest to sprawdzenie poprawności syntaktycznej nagłówka i przede wszystkim odpytanie RBL, jak i po odebraniu całego maila, wtedy system wykrywający spam ( np. Spamassassin ) analizuje jego treść i oznacza go jako ham/spam.
Tak czy inaczej mail taki zostaje odrzucony, my wiemy, że była próba zaproponowania nam viagry ale nie mamy corpus delicti do zaraportowania.
Uważam, że jeśli nadawca siedzi już w RBLu to są dwa powody aby zakończyć konwersację natychmiast, bez przyjmowania całości maila. Pierwszy powód to taki, że skoro jest już na czarnej liście to znaczy, że został już zgłoszony odpowiednią ilość razy. Drugim jest fakt, że po to korzystam z czarnych list aby zmniejszyć obciążenie łącza jak i samego serwera, ciężkim SpamAssasinem. Czyli wybór prosty, jeżeli mail zostanie odrzucony poprzez antyspama to wtedy chciałbym mieć jego kopię do zaraportowania.
Do zaimplementowania tej funkcji w Eximie wykorzystałem fakereject .
Plan działania jest taki: oznaczam takiego maila zmienną, dodaje nowy router, przed routerem, który normalnie doręczył by maila do maildira. W nim sprawdzam stan zmiennej oznaczającej czy dany mail jest spamem czy nie. Jeśli wynik testu jest pozytywny to kieruje przesyłkę do oddzielnego transportu.
O to szczegóły, kolorem czerwonym oznaczam dodatkowe wpisy obok standardowo występujących.
acl_check_data:
……
deny warn message = This message scored $spam_score spam points.
spam = nobody:true
condition = ${if >{$spam_score_int}{44}{1}{0}}
set acl_m1 = spam
control = fakereject/This message scored $spam_score spam points.SC.
begin routers
dnslookup:
………
spam_fakereject:
driver = accept
condition = ${if eq {$acl_m1}{spam}{true}{false}}
transport = spam_transport
……..
begin transports
spam_transport:
driver = appendfile
directory = /home/spam
maildir_format
delivery_date_add
envelope_to_add
To zapewni nam, że w katalogu /home/spam wyląduje wszystko ze zbyt wysoką punktacją. Teraż możemy sobie poczytać wszelkie oferty ;) oraz zgłosić je komu trzeba.
Jeżeli chcemy automagicznie, bez czytania, wysłać zgłoszenie do SpamCopa to możemy to zrobić poprzez modyfikację transportu tak aby wołaj od razu spamassassina (za pomocą którego będziemy wysyłać raport).
Skorzystamy z drivera pipe
spam_transport:
driver = pipe
command = /usr/bin/spamassassin -r
Potrzebujemy także uaktywnić wymagany plugin w Spamassassinie.
W pliku v310.pre dodajemy:
loadplugin Mail::SpamAssassin::Plugin::SpamCop
a w pliku local.cf podajemy adres do submitowania przypisany do naszego konta na SC:
spamcop_to_address submit……@…..
Voila.