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

Twój ulubiony jezyk programowania to:
Protected by spf
[Nospam-PL.NET]
Seti@Home
www.php.net
© Lemat 2004 - ∞
Cookie Bullshit
Mapa strony
engine: lem.. at lemat·priv·pl