Limitowanie ruchu wychodzącego - ilości emaili/odbiorców w jednostce czasu.
Co jakiś czas zgłaszają się do mnie postmasterzy z problemem - nie wiadomo skąd w kolejce znajduje się w pizd^Hdużo emaili i jest to spam WYchodzący. Przyczyna jest zazwyczaj bardzo prosta: jakiemuś userowi wyciekło hasło, już nie wnikam czy user ma wirusa czy to hasło było typu "123456". Posprzątanie takiego syfu polega na zmianie hasła, opieprzeniu usera, wyczyszczeniu kolejki ze spamu, usunięciu się z czarnych list, podłączeniu do postfixa reguły reject_sender_login_mismatch - kupa roboty (z przewagą kupy). To jednak jest reakcja po fakcie. Dodam, że bardzo długo po fakcie. A można limitować ilość emaili wychodzących na bieżąco...Napisałem zatem skrypt policyd-lemat2 to realizujący. Założenie jest takie: dopisywać do bazy danych informację o każdym emailu od zautoryzowanego usera. I sprawdzać ile user wysłał emaili w ostatniej jednostce czasu. Jeżeli user przekroczył $SOFT_LIMIT w ciągu ostatniej godziny lub $HARD_LIMIT w ciągu ostatniego dnia - odpowiadać kodem 550. Wypisać też taką informację do logów (a stamtąd to już sobie admin powinien wyciągnąć prostym grep-em).
Domyślnie $SOFT_LIMIT jest ustawiony na 10, $HARD_LIMIT=2*$SOFT_LIMIT, czas na 1h, garbage collector na 1 tydzień.
W środku skryptu jest zaszyty login i hasło do bazy danych.
Skrypt nie jest przeznaczony dla żółtodziobów. Trzeba się znać nieco na bazach danych, konfiguracji postfixa, umieć czytać logi itp.
Data utworzenia : 2012-12-25, data aktualizacji :2014-05-16
Komentarze:
misiek_4
2015-03-05 15:25:02
policyd
Ciekawym rozwiazaniem jest też PolicyD v2 (cluebringer http://wiki.policyd.org/), który umożliwia ograniczenie wysyłanych emajli per user/domena oraz pozwala na łatwą kontrolę (poprzez www) nad greylistingiem, quotą, sprawdzaniem SPF, HELO/EHLO.
misiek
2014-05-20 10:27:19
Warning skryptu
Dziś zauważyłem w logach 3 warningi:
postfix/spawn[7082]: warning: /usr/local/bin/policyd-lemat2: process id 7500: command time limit exceeded
W otoczeniu tego warninga (rozpiętość czasowa 15s przed i po) nie było nic poza logowaniem klientów do skrzynek.
Czy może też masz czasami takie warningi?
postfix/spawn[7082]: warning: /usr/local/bin/policyd-lemat2: process id 7500: command time limit exceeded
W otoczeniu tego warninga (rozpiętość czasowa 15s przed i po) nie było nic poza logowaniem klientów do skrzynek.
Czy może też masz czasami takie warningi?
Odpowiedź Lemata:
tak, to oznacza, że połączenie się zakończyło bez przejścia pełnej sesji smtp. Normalna rzecz w przypadku spamu i wirusów.
misiek
2014-05-15 23:17:25
OK odpaliłem skrypt i wszystko działa
ale mam jeszcze pytanie, zerkam sobie w niego i widzę że zarówno przy soft jak i hard zwracany jest 550 (w opisie jest że dla soft powinien być 450). Czy to pomyłka czy ja coś źle czytam?
Odpowiedź Lemata:
w kolejnej wersji skryptu zmieniło mi się widzimisię lecz nie uaktualniłem strony - już poprawiłem
misiek
2014-05-15 16:04:26
Problem z uruchomieniem skryptu
Cześć na wstępie dzięki za stronę (bezcenne porady).
Jednak mam problem ze skryptem.
Po podmianie danych do łączenia z MySQL i odpaleniu go z konsoli ona milczy. Proces wisi i nic się nie dzieje.
Zmiana zmiennej VERBOSE niewiele pomaga :( (rozumie że tu chodzi o poziom "gadatliwości").
Jednak mam problem ze skryptem.
Po podmianie danych do łączenia z MySQL i odpaleniu go z konsoli ona milczy. Proces wisi i nic się nie dzieje.
Zmiana zmiennej VERBOSE niewiele pomaga :( (rozumie że tu chodzi o poziom "gadatliwości").
Odpowiedź Lemata:
bo czeka na dane
michas
2013-09-03 14:06:10
Problem z uruchomieniem skryptu
Mam problem z uruchomieniem skryptu dostaję w logach coś takiego:
Sep 3 13:59:07 ip-xx-yy-zz-xx postfix/spawn[20590]: warning: command /usr/local/bin/policyd-lemat2 exit status 255
Sep 3 13:59:07 ip-xx-yy-zz-xx postfix/smtpd[20582]: warning: premature end-of-input on private/policyd-lemat2 while reading input attribute name
Sep 3 13:59:07 ip-xx-yy-zz-xx postfix/smtpd[20582]: warning: problem talking to server private/policyd-lemat2: Connection reset by peer
nazwa bazy, login i hasło są poprawne, dopisałem co trzeba w main.cf i master.cf
Sep 3 13:59:07 ip-xx-yy-zz-xx postfix/spawn[20590]: warning: command /usr/local/bin/policyd-lemat2 exit status 255
Sep 3 13:59:07 ip-xx-yy-zz-xx postfix/smtpd[20582]: warning: premature end-of-input on private/policyd-lemat2 while reading input attribute name
Sep 3 13:59:07 ip-xx-yy-zz-xx postfix/smtpd[20582]: warning: problem talking to server private/policyd-lemat2: Connection reset by peer
nazwa bazy, login i hasło są poprawne, dopisałem co trzeba w main.cf i master.cf
Odpowiedź Lemata:
brakuje ci bibliotek perla, odpal skrypt z linii poleceń i zobacz komunikaty błędów.