This is an old revision of the document!
−Table of Contents
policyd-rate-limit
Si installa il pacchetto policyd-rate-limit:
- Viene creato un utente policyd-rate-limit.
- Il file di configurazione è /etc/policyd-rate-limit.yaml.
- Risulta in esecuzione il processo /usr/bin/python3 /usr/bin/policyd-rate-limit a nome dell'utente creato.
- Viene creato il servizio systemd policyd-rate-limit.service.
- Viene creato il socket /var/spool/postfix/ratelimit/policy per collegare Postfix al processo.
- Viene creato un database SQLite in /var/lib/policyd-rate-limit/db.sqlite3.
Configurazione
Nel file di configurazione /etc/policyd-rate-limit.yaml il parametro più importante è limits:
limits: - [10, 60] # limit to 10 mails by minutes - [150, 86400] # limits to 150 mails by days
Oltre all login sasl, è possibile tenere traccia e limitare anche il sender e l'indirizzo IP. Queste opzioni sono disabilitate per impostazione predefinita.
È possibile specificare delle eccezioni (in eccesso o in difetto) per un particolare identificativo.
Collegamento con Postfix
Per aggiungerlo ai filtri utilizzati da Postfix è sufficiente ad esempio aggiungerlo alla catena dei filtri smtpd_relay_restrictions:
check_policy_service { unix:ratelimit/policy, default_action=DUNNO }
Database
Nel database esiste una tabella mail_count con un record per ogni mail inviata, nella riga compare il nome di login e il timestamp dell'invio:
sqlite3 /var/lib/policyd-rate-limit/db.sqlite3 sqlite> SELECT * FROM mail_count; username@example.org|1612865208 username@example.org|1612865556
Il database può (deve) essere svuotato regolarmente eseguendo policyd-rate-limit --clean ad esempio con un cronjob:
0 0 * * * policyd-rate-limit /usr/local/bin/policyd-rate-limit --clean >/dev/null
Vengono automaticamente rimossi tutti i record che hanno un timestamp più vecchio del doppio del limite temporale maggiore.
Se nella configurazione sono abilitati i report, nel database viene creata anche la tabella limit_report, anch'essa viene svuotata regolarmente dall'opzione --clean.
Debug
Il processo logga in /var/log/syslog con il tag policyd-rate-limit. Nel file di configurazione c'è l'opzione predefinita debug: True, sembra che non ci sia la possibilità di modificare la quantità di informazioni registrate (tante!).
Limite raggiunto con destinatari multipli
Il limite viene giustamente applicato al numero dei destinatari, se una mail contiene destinatari multipli e il totale eccede il limite disponibile, alcuni destinatari vengono scartati. Nei log di Postfix si trova segnalato il rifiuto:
postfix/smtpd[23150]: 5DBFB7DA5B: reject: RCPT from unknown[10.11.12.13]: 450 4.7.1 <recipient@example2.org>: Recipient address rejected: Rate limit reach, retry later; from=<sender@example.org> to=<recipient@example2.org> proto=ESMTP helo=<mail.example.org>
Cioè l'azione predefinita è DEFER_IF_PERMIT (vedere Postfix Access) con relativo messaggio SMTP 4.7.1.
Un client di posta dovrebbe segnalare l'errore e considerare il messaggio non inviato, ma in generale non è possibile capire quali destinatari sono stati accettati e quali rifiutati. Ad esempio Thunderbird mostra un pop-up con il seguente messaggio:
An error occurred while sending mail. The mail server responded: 4.7.1 <recipient@example2.org>: Recipient address rejected: Rate limit reach, retry later. Please check the message recipient "recipient@example2.org" and try again.