Mi sembra che tutte le altre risposte a questa vecchia domanda siano solo link. Quindi descriverò in poche parole come implementare la mia soluzione preferita per questo lavoro.
Il legame che @ 84104 ha suggerito, anche se molto utile, non può essere utilizzato per implementare correttamente tariffa al mittente. smtpd_client
i limiti non sono per il controllo del traffico ma piuttosto per aiutare con il software client: "Misure contro client che effettuano troppe connessioni". Anche se si possono trovare consigli come questo uno che sicuramente può aiutare. Come @E. Yazici ha suggerito, è richiesto un addon per postfix . Personalmente trovo policyd come raccomandato da @Janne Pikkarainen piuttosto ingombrante anche se è considerato uno standard.
Il mio addon preferito è postfwd perché è leggero e facile. Vale anche la pena notare che questo funziona molto facilmente con Plesk o altri simili, senza influire sulla complessa serie di file di configurazione di Plesk. Il limite di velocità e-mail in Plesk è stato implementato solo nella versione 12 ma le funzionalità della politica sono ancora limitate.
Prima scarica l'ultimo addon dal sito sopra. Credo che non ci siano rpm per CentOS, al contrario di Ubuntu e Debian. Tuttavia, si consiglia di utilizzare l'ultima versione. Più specificamente, la versione 1.32 (che è presente ad esempio nei repository Ubuntu 14.04LTS) ha un brutto bug che ne impedisce il corretto funzionamento. La versione 1.35 ordina questo.
Assicurati che questi moduli PERL siano presenti. Se usi Debian o Ubuntu puoi installarlo dai repository in modo che tutte le dipendenze vengano automaticamente risolte e quindi sostituite /usr/sbin/postfwd
con l'ultima versione.
Quindi creare il set di regole. Crea un file come/etc/postfwd.cf
o /etc/postfix/postfwd.cf
e aggiungi:
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)
Il set di regole sopra ha ovviamente due regole che valutano per tutti i mittenti. La sintassi dirate
dell'azione è:
rate (<item>/<max>/<time in sec>/<action>)
Altri esempi di tariffe sono disponibili qui . Il riferimento alla sintassi può essere trovato nella documentazione . Discussioni simili possono essere trovate qui . Se SASL è implementato (es. Dovecot) puoi tranquillamente sostituirlo sender
consasl_username
. Puoi testare la validità del set di regole con l' -C
opzione:
postfwd -f /etc/postfwd.cf -C
Successivamente, puoi facoltativamente creare un utente e un gruppo dedicati postfwd
sotto i quali verrà eseguito postfwd e avviarlo:
postfwd --daemon -f /etc/postfwd.cf -u postfwd -g postfwd
Nel caso in cui sia installato da apt (Debian, Ubuntu ecc.), Dovrebbe esserci anche un file di configurazione sotto /etc/default/postfwd
e potresti avviare correttamente il servizio, ad es sudo service postfwd start
.
Dai un'occhiata al registro per verificare che postfwd sia in ascolto. Postfwd utilizza lo stesso registro di postfix (ad es/var/log/mail
O /usr/local/psa/var/log/maillog
etc) e una riga che postfwd 1.35 ready for input
dovrebbe essere in atto.
Quindi, fai sapere a postfix di usare postfwd. Modifica il file di configurazione postfix (di solito/etc/postfix/main.cf
) e nella riga:
smtpd_recipient_restrictions = permit_mynetworks,...
Inserisci check_policy_service inet:127.0.0.1:10040
. Si prega di considerare che l'ordine in cui lo si inserisce smtpd_recipient_restrictions
ha una grande importanza e si potrebbe finire per dedicare molto tempo a diagnosticare cosa potrebbe essere sbagliato. Come spiegato in questa domanda , se un controllo restituisce OK o REJECT, Postfix non continua con quello successivo, quindi probabilmente dovresti posizionarlo così in alto.
Infine, per verificare che funzioni, puoi specificare un limite molto piccolo come 1 o persino aggiungere una regola come id=DEFAULT; action=dunno
. Ogni colpo a regola viene registrato comunque. Si noti inoltre che il limite di tariffa per mittente non distingue tra e-mail multiple con un singolo destinatario o una singola e-mail con più destinatari.
Quindi inviare un'e-mail da un account (in quel server) e guardare il registro:
grep "RULES" /var/log/mail
Altri link: avvio rapido postfwd .