Lemat, strona prywatna

Osobista biała i czarna lista

Wkurzony faktem, że nigeryjscy scamerzy używają serwerów yahoo, gmaila do wysyłania spamu zacząłem się zastanawiać jak uwalać to już w sesji SMTP.

Cechy charakterystyczne: serwer z revDNSem yahoo.com, nadawca: np. ktośtam@gmail.com.

Pierwsze kroki skierowałem zatem w kierunku SPF:

gmail.com.              273     IN      TXT     "v=spf1 redirect=_spf.google.com"
_spf.google.com.        272     IN      TXT     "v=spf1 include:_netblocks.google.com include:_netblocks6.google.com ?all"

?all mówi, że email z nadawcą @gmail.com może być wysyłany z dowolnego serwera.

yahoo.com nie publikuje rekordów SPF. Ponadto z ich serwerów wychodzi ten spam z różnymi domenami nadawców (nie tylko gmail.com). Nie tędy zatem droga.

Mapy postfixa nie umożliwiają zrobienia w prosty sposób konstrukcji if (cośtam=cośtam AND cośtam=cośtam) then cośtam a już połączenie 3 zmiennych if (cośtam=cośtam AND cośtam=cośtam AND cośtam=cośtam) then cośtam; to by było prawdziwe wyzwanie.

Z pomocą przyszła jak zwykle dokumentacja do postixa: http://www.postfix.org/SMTPD_POLICY_README.html

Stworzyłem skrypt w perlu, który jest dość elastyczny - wpisy są trzymane w bazie danych, dozwolone są różne akcje. Jak to działa: skrypt dostaje od postfixa pakiet zmiennych, z czego interesujące dla mnie są tylko 3: nadawca, odbiorca, revDNS serwera. Skrypt usiłuje dopasować te zmienne do tego, co jest przechowywane w bazie danych. Jeżeli dopasuje - to zwracany jest do postfixa odpowiedni komunikat, pozwalający odrzucić lub przyjąć przesyłkę (może też zrobić kilka innych akcji np. REDIRECT lub BCC). Podstawowymi akcjami są "OK" - przyjmujące natychmiast, "DUNNO" - kończące skrypt i przekazujące działanie do kolejnej reguły postfixa oraz "REJECT" - odrzucające natychmiast.

Najciekawsze jest to, co skrypt zwraca jeżeli w bazie danych znajduje się kilka wierszy pasujących do zmiennych. Skrypt sortuje wynik, najpierw po długości pola recipient, potem sender a na końcu client - malejąco. Następnie jest zwracana kolumna code+message z pierwszego wiersza. Dzięki temu reguła pasująca do konkretnego odbiorcy user@domena ma większy priorytet niż reguła pasująca tylko do domeny.

Skrypt można pobrać tutaj: policyd-lemat3
wrzucić do katalogu (pod nazwą) /usr/local/bin/policyd-lemat3, ustawić +x, ustawić w środku login i hasło do bazy danych, utworzyć odpowiednią tabelę, wpisy w master.cf i main.cf - zgodnie z tym, co się znajduje w komentarzu na początku pliku.

Wracając do pierwotnego pytania: "jak uwalać nigeryjczyków?" to rozwiązanie jest proste: jeżeli revDNS pasuje do yahoo.com i nadawca pasuje do domen yahoo - DUNNO (przekazywać sterowanie do kolejnej reguły postfixa.). Jeżeli revDNS pasuje do yahoo.com i nadawca jest spoza listy domen yahoo.cośtam - REJECT. Jeżeli nadawca pasuje do domen yahoo, ale klient jest dowolny - REJECT.

Jak widać używane są tylko 2 akcje "DUNNO" i "REJECT". Mam też przykład wykorzystania "OK": jeżeli nadawca pasuje do "freshmail.pl" i odbiorca pasuje do "exception@example.tld" - "OK", ale już jeżeli nadawca pasuje do "freshmail.pl" i odbiorca pasuje do domeny "example.tld" - REJECT. Czyli tylko jeden odbiorca w domenie będzie mógł otrzymać spam z freshmaila.

Rozwiązanie to nie jest przeznaczone dla żółtodziobów. Trzeba się znać trochę na bazach danych aby bezpiecznie używać tego narzędzia.

Data utworzenia : 2012-12-25, data aktualizacji :2013-11-22

Skomentuj ten tekst

Komentarze:

pochtaliot
2021-07-05 17:48:07
Blokowanie pierwszego Received: from w łańcuchu
Cześć. Ze źródła wiadomości widać że zainfekowany ip używa inny serwer jako relay-ja ip którego ma dobrą reputacje. Ale ten pierwszy ip ewidentnie spamowy. Czy da się w postfiksie blokować wiadomość na podstawie tego pierwszego adresu?

==========================

Received: from mail.panjunan.com (mail.panjunan.com [103.31.224.54])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by olimpik.advancedit.com.pl (Postfix) with ESMTPS id 924B82E40091
for ; Mon, 5 Jul 2021 16:41:20 +0200 (CEST)
Received-SPF: Softfail (domain owner discourages use of this host) identity=mailfrom; client-ip=103.31.224.54; helo=mail.panjunan.com; envelope-from=alison.chanhervest@gmail.com; receiver=biuro@sol-med.com.pl
Received: from localhost (localhost [127.0.0.1])
by mail.panjunan.com (Postfix) with ESMTP id 27E05770F510
for ; Mon, 5 Jul 2021 21:26:28 +0700 (WIB)
Received: from mail.panjunan.com ([127.0.0.1])
by localhost (mail.panjunan.com [127.0.0.1]) (amavisd-new, port 10032)
with ESMTP id kB7-5aLmM-XS for ;
Mon, 5 Jul 2021 21:26:28 +0700 (WIB)
Received: from localhost (localhost [127.0.0.1])
by mail.panjunan.com (Postfix) with ESMTP id 01A14770F507
for ; Mon, 5 Jul 2021 21:26:28 +0700 (WIB)
X-Virus-Scanned: amavisd-new at mail.panjunan.com
Received: from mail.panjunan.com ([127.0.0.1])
by localhost (mail.panjunan.com [127.0.0.1]) (amavisd-new, port 10026)
with ESMTP id bcNAXMglRBDb for ;
Mon, 5 Jul 2021 21:26:27 +0700 (WIB)
Received: from gmail.com (unknown [77.247.110.57])
by mail.panjunan.com (Postfix) with ESMTPSA id 2FDD9770F47D

=============================

77.247.110.57 jest spamowym
103.31.224.54 - ten jest użyty jako relay prawdopodobnie zhakowany, czy jeszcze coś
Odpowiedź Lemata:
postfix (pomijając header_checks) nie zajmuje się analizą treści emaila, od tego jest spamassassin.
Spamassassin sprawdza adresy IP z Received w RBLach.
Protected by spf
[Nospam-PL.NET]
Seti@Home
www.php.net
© Lemat 2004 - ∞