User Tools

Site Tools


doc:appunti:linux:sa:policyd-rate-limit

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:policyd-rate-limit [2021/02/09 11:30] niccolodoc:appunti:linux:sa:policyd-rate-limit [2024/09/16 17:54] (current) – [Configurazione] niccolo
Line 1: Line 1:
 ====== policyd-rate-limit ====== ====== policyd-rate-limit ======
 +
 +:!: **ATTENZIONE**: Su versioni Debian più datate (da Debian 6 Squeeze a Debian 9 Stretch) è probabile che venga installato il pacchetto **[[postfix-policyd]]** invece del più nuovo **policyd-rate-limit**.
  
 Si installa il pacchetto **policyd-rate-limit**: Si installa il pacchetto **policyd-rate-limit**:
Line 10: Line 12:
   * Viene creato un database SQLite in **/var/lib/policyd-rate-limit/db.sqlite3**.   * Viene creato un database SQLite in **/var/lib/policyd-rate-limit/db.sqlite3**.
  
-=== Configurazione ===+==== Configurazione ====
  
 Nel file di configurazione **/etc/policyd-rate-limit.yaml** il parametro più importante è **limits**: Nel file di configurazione **/etc/policyd-rate-limit.yaml** il parametro più importante è **limits**:
Line 21: Line 23:
  
 Oltre all **login sasl**, è possibile tenere traccia e limitare anche il **sender** e l'**indirizzo IP**. Queste opzioni sono disabilitate per impostazione predefinita. Oltre all **login sasl**, è possibile tenere traccia e limitare anche il **sender** e l'**indirizzo IP**. Queste opzioni sono disabilitate per impostazione predefinita.
 +
 +<file>
 +limit_by_sasl: True
 +limit_by_sender: False
 +limit_by_ip: False
 +</file>
  
 È possibile specificare delle **eccezioni** (in eccesso o in difetto) per un particolare identificativo. È possibile specificare delle **eccezioni** (in eccesso o in difetto) per un particolare identificativo.
  
-=== Collegamento con Postfix ===+<file> 
 +# Limits by id is empty per default. 
 +limits_by_id: {} 
 + 
 +# Some examples: 
 +# limits_by_id: 
 +#     poweruser@domain.org: [] 
 +#     192.168.0.254: 
 +#         - [1000, 86400] # limits to 1000 mails by days 
 +#     2a01:240:fe3d:4:219:bbff:fe3c:4f76: [] 
 +#     otheruser@domain.org: 
 +#        - [50, 900] 
 +</file> 
 + 
 +Il sistema può generare una mail di notifica giornaliera. Si deve indicare per quale limite temporale si vuole il report; se ad esempio nella impostazione dei **limits** si ha un limite con intervallo di tempo 900 secondi, si può chiedere che nel report vengano riportati i superamenti di tale soglia: 
 + 
 +<file> 
 +report: True 
 +report_to: "admin@domain.org" 
 +report_subject: "policyd-rate-limit report" 
 +report_limits: [900] 
 +report_only_if_needed: True 
 +</file> 
 + 
 +Se il parametro ''report_only_if_needed'' viene impostato a ''False'', la mail verrà inviata anche se non è stato superato alcun limite. 
 + 
 +==== Collegamento con Postfix ====
  
 Per aggiungerlo ai filtri utilizzati da Postfix è sufficiente ad esempio aggiungerlo alla catena dei filtri **smtpd_relay_restrictions**: Per aggiungerlo ai filtri utilizzati da Postfix è sufficiente ad esempio aggiungerlo alla catena dei filtri **smtpd_relay_restrictions**:
Line 32: Line 66:
 </file> </file>
  
-=== Database ===+==== 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: 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:
Line 43: Line 77:
 </code> </code>
  
-Nel database dovrebbe esistere anche la tabella **limit_report** che dovrebbe essere svuotata regolarmente eseguendo **%%policyd-rate-limit --clean%%** ad esempio con un cronjob:+Il database può (deve) essere svuotato regolarmente eseguendo **%%policyd-rate-limit --clean%%** ad esempio con un cronjob:
  
 <file> <file>
 0 0 * * * policyd-rate-limit /usr/local/bin/policyd-rate-limit --clean >/dev/null 0 0 * * * policyd-rate-limit /usr/local/bin/policyd-rate-limit --clean >/dev/null
 </file> </file>
 +
 +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!).
 +
 +Per ogni esecuzione viene loggato qualcosa del genere:
 +
 +<file>
 +policyd-rate-limit[907]: request=smtpd_access_policy
 +policyd-rate-limit[907]: protocol_state=RCPT
 +policyd-rate-limit[907]: protocol_name=ESMTP
 +policyd-rate-limit[907]: client_address=181.136.222.243
 +policyd-rate-limit[907]: client_name=unknown
 +policyd-rate-limit[907]: client_port=55924
 +policyd-rate-limit[907]: reverse_client_name=243-222-136-181.customers.provider.net
 +policyd-rate-limit[907]: server_address=68.19.54.82
 +policyd-rate-limit[907]: server_port=587
 +policyd-rate-limit[907]: helo_name=SEGRETERIAPC
 +policyd-rate-limit[907]: sender=info@sender.it
 +policyd-rate-limit[907]: recipient=tommaso@recipient.it
 +policyd-rate-limit[907]: recipient_count=0
 +policyd-rate-limit[907]: queue_id=55C687D7ED
 +policyd-rate-limit[907]: instance=1547b9.66a35bd5.4b32a.0
 +policyd-rate-limit[907]: size=0
 +policyd-rate-limit[907]: etrn_domain=
 +policyd-rate-limit[907]: stress=
 +policyd-rate-limit[907]: sasl_method=LOGIN
 +policyd-rate-limit[907]: sasl_username=info@sender.it
 +policyd-rate-limit[907]: sasl_sender=
 +policyd-rate-limit[907]: ccert_subject=
 +policyd-rate-limit[907]: ccert_issuer=
 +policyd-rate-limit[907]: ccert_fingerprint=
 +policyd-rate-limit[907]: ccert_pubkey_fingerprint=
 +policyd-rate-limit[907]: encryption_protocol=TLSv1.2
 +policyd-rate-limit[907]: encryption_cipher=ECDHE-RSA-AES256-GCM-SHA384
 +policyd-rate-limit[907]: encryption_keysize=256
 +policyd-rate-limit[907]: policy_context=
 +policyd-rate-limit[907]: 050/050 hit since 900s
 +policyd-rate-limit[907]: action=defer_if_permit Rate limit reach, retry later
 +</file>
 +
 +==== 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:
 +
 +<code>
 +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>
 +</code>
 +
 +Cioè l'azione predefinita è **DEFER_IF_PERMIT** (vedere [[http://www.postfix.org/access.5.html|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:
 +
 +<code>
 +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.
 +</code>
 +
  
doc/appunti/linux/sa/policyd-rate-limit.1612866648.txt.gz · Last modified: 2021/02/09 11:30 by niccolo