POSTFIX: Ograniczenie szybkości, z jaką dany użytkownik może wysyłać wiadomości e-mail


13

Mamy konfigurację serwera CentOS, która hostuje nasze strony internetowe i serwer e-mail (używając POSTFIX). Zarządzamy systemem za pomocą odpowiednio Virtualmin i Webmin.

Zasadniczo dla każdej skonfigurowanej witryny zapewniamy klientowi konto e-mail w naszym systemie. W szczególności jeden klient uznał, że dobrym pomysłem jest wysyłanie dosłownie tysięcy wiadomości e-mail luzem. Gdy tak się stanie, serwer pocztowy przestanie odpowiadać, a poczta dla innych klientów spadnie podczas przetwarzania kolejki.

Czy istnieje sposób, aby ograniczyć liczbę wysyłanych wiadomości e-mail dla jednego konkretnego użytkownika systemu, a nie dla wszystkich? Czy istnieje również ustawienie, które powinniśmy zmienić, aby nic, co użytkownik może zrobić, nie spowodowało awarii serwera pocztowego dla innych użytkowników?

Dzięki

Odpowiedzi:



23

Uderza mnie, że wszystkie inne odpowiedzi na to stare pytanie są tylko linkiem. Dlatego opiszę w kilku słowach, jak wdrożyć moje ulubione rozwiązanie dla tej pracy.

Ogniwo że @ 84104 zasugerował, choć bardzo użyteczne, nie mogą być wykorzystywane do prawidłowego stawkę za nadawcy wdrożenia. smtpd_clientograniczenia nie dotyczą kontroli ruchu, ale raczej pomocy w oprogramowaniu klienckim: „Środki przeciwko klientom, którzy tworzą zbyt wiele połączeń”. Chociaż można znaleźć porady, takie jak ten jeden , który na pewno może pomóc. Jako @E. Yazici zasugerował, że wymagany jest dodatek do postfiksa . Osobiście uważam, że politykayd zalecana przez @Janne Pikkarainen jest raczej uciążliwa, chociaż jest uważana za standard.

Moim ulubionym dodatkiem jest postfwd, ponieważ jest lekki i łatwy. Warto również zauważyć, że działa to bardzo łatwo z Plesk lub podobnym, bez wpływu na skomplikowany zestaw plików konfiguracyjnych Pleska. Limit prędkości e-mail w Plesk został zaimplementowany tylko w wersji 12, ale funkcje zasad są ograniczone.

Najpierw pobierz najnowszy dodatek z powyższej strony. Wierzę, że nie ma rpm dla CentOS, w przeciwieństwie do Ubuntu i Debiana. Niemniej jednak zaleca się stosowanie najnowszej wersji. Mówiąc dokładniej, wersja 1.32 (która jest obecna np. W repozytoriach Ubuntu 14.04LTS) ma paskudny błąd, który uniemożliwia jej prawidłowe działanie. Wersja 1.35 rozwiązuje ten problem.

Upewnij się, że te moduły PERL są obecne. Jeśli używasz Debiana lub Ubuntu , możesz zainstalować z repozytoriów, aby wszystkie zależności zostały automatycznie uporządkowane, a następnie zastąpione /usr/sbin/postfwdnajnowszą wersją.

Następnie utwórz zestaw reguł. Utwórz plik taki jak /etc/postfwd.cflub /etc/postfix/postfwd.cfi dodaj:

id=R001; sender=~/.*/; action=rate(sender/100/86400/REJECT only 100 messages per day for $$sender)
id=R002; sender=~/.*/; action=rate(sender/50/3600/REJECT only 50 messages per hour for $$sender)

Powyższy zestaw reguł ma oczywiście dwie reguły, które oceniają dla wszystkich nadawców. Składnia rateakcji jest następująca:

rate (<item>/<max>/<time in sec>/<action>)

Inne przykłady stawek można znaleźć tutaj . Odwołanie do składni można znaleźć w dokumentacji . Podobną dyskusję można znaleźć tutaj . Jeśli SASL jest realizowany (np Dovecot) można bezpiecznie wymieniać sendersię sasl_username. Możesz przetestować poprawność zestawu reguł z -Copcją:

postfwd -f /etc/postfwd.cf -C

Następnie możesz opcjonalnie utworzyć dedykowanego użytkownika i grupę, postfwdw których postfwd będzie działał i uruchamiał go:

postfwd --daemon -f /etc/postfwd.cf -u postfwd -g postfwd 

W przypadku zainstalowania go z apt (Debian, Ubuntu itp.), Powinien również znajdować się plik konfiguracyjny /etc/default/postfwdi możesz poprawnie uruchomić usługę, np sudo service postfwd start.

Następnie spójrz na dziennik, aby sprawdzić, czy postfwd nasłuchuje. Postfwd używa tego samego dziennika jako postfix (EG /var/log/maillub /usr/local/psa/var/log/maillogetc) oraz linii, co postfwd 1.35 ready for inputpowinno być na swoim miejscu.

Następnie powiadom Postfix, aby używał PostfWD. Zmodyfikuj plik conf postfiksa (zwykle /etc/postfix/main.cf) iw wierszu:

smtpd_recipient_restrictions = permit_mynetworks,...

dodać check_policy_service inet:127.0.0.1:10040. Proszę wziąć pod uwagę, że kolejność, w której to umieszczasz, smtpd_recipient_restrictionsma ogromne znaczenie i możesz spędzić dużo czasu diagnozując, co może być nie tak. Jak wyjaśniono w tym pytaniu , jeśli jedno sprawdzenie zwróci OK lub ODRZUĆ, to postfiks nie będzie kontynuowany do następnego, więc prawdopodobnie powinieneś ustawić ten wysoki.

Na koniec, aby sprawdzić, czy to działa, możesz albo określić bardzo mały limit, na przykład 1, albo nawet dodać regułę jako id=DEFAULT; action=dunno. Każde trafienie reguły i tak jest rejestrowane. Należy również pamiętać, że limit stawek na jednego nadawcę nie rozróżnia wielu wiadomości e-mail z jednym odbiorcą lub pojedynczego e-maila z wieloma adresatami.

Następnie wyślij wiadomość e-mail z konta (na tym serwerze) i spójrz na dziennik:

grep "RULES" /var/log/mail

Inne linki: szybki start postfwd .


1
wybuch z przeszłości to pytanie! dziękuję za poświęcenie czasu na udzielenie tak przemyślanej odpowiedzi. Jestem pod wrażeniem!
WarpKid,

1
moja wersja postfix barfs na dowolnym smtpd_recipient_restrictionswpisie ze spacją, więc musiałem zdefiniować postfwd_ratelimit = check_policy_service inet:127.0.0.1:10040w /etc/postfix/main.cf, a następnie odwołać się do niego w /etc/postfix/master.cf jakosmtpd_recipient_restrictions=...,$postfwd_ratelimit,...
Tom McClure

Aby zrestartować postfiks w Ubuntu:sudo postfwd -f /etc/postfix/postfwd.cf --pidfile=/var/run/postfwd.pid --reload
Wtower

Używając co najmniej Ubuntu 16.04, stwierdziłem, że muszę zmienić symbol wieloznaczny w regułach, aby użyć .+(co najmniej 1) zamiast .*(co najmniej 0), aby reguły nie pasowały do ​​nieobecnych pól.
TommyPeanuts

4

Potrzebujesz dodatku do polityki dla Postfix. Istnieje kilkanaście dodatków do zasad dla Postfix, niektóre z nich mają funkcję ograniczania prędkości. Listę dodatków do zasad Postfix można znaleźć tutaj .



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.