robomoderare tutto
Paolo Amoroso
estasi@aioe.org
Sab 9 Dic 2006 15:30:21 CET
On Wednesday 06 December 2006 00:24, Marco d'Itri wrote:
> È un problema molto più grosso trovare qualcuno che scriva il software,
> volontari non ne ho visti.
Ho cominciato a scrivere il software. Una prima versione, già funzionante, è
qui: http://www.aioe.org/downloads/robomod-0.1.tar.gz e fa funzionare
news://nntp.aioe.org/aioe.test.moderato (qualcuno, per favore, controlli che
gli header seguano una semantica corretta).
Lo script riceve un singolo messaggio attraverso stdin, di solito passatogli
da maildrop o procmail, lo analizza, eventualmente lo invia ad un news server
(anche remoto) attraverso rnews dopo aver aggiunto l'header Approved.
Per prima cosa, di ciascun messaggio è verificato se sia stato spedito a
troppi gruppi (è configurabile il massimo numero di newsgroup in crosspost,
in followup ed in crosspost senza followup); se sia troppo grande (dimensioni
massime totali, dei soli header, del body); se contenga troppe linee bianche,
quotate o vuote.
Poi lo script verifica il messaggio utilizzando *due* differenti banlist, una
globale per tutti gruppi, obbligatoria, ed una facoltativa legata al singolo
gruppo (che *deve* trovarsi in
$config{'per_group_config_directory'}/nome_del_gruppo/banlist.conf )
La sintassi di questi due file è identica e purtoppo un po' complicata.
Ciascuna riga *vuota* o iniziante con un cancelletto (#) è considerata
commento e saltata.
Tutte le altre righe devono essere composte da *sei* campi separati fra loro
da "due punti" (:), l'ultimo dei quali è il commento esplicativo della
regola. Es.
From:aioe:save:rnews:/tmp/aioe.rnews: Commento vario
La sintassi è questa:
regexp_header:regexp_value:action:arg1:arg2:Comment
Dove:
regexp_header è una espressione regolare applicata sul *nome* dell'header
oppure "BODY" se la ricerca deve essere effettuata sul corpo del messaggio.
regexp_value è una espressione regolare applicata al *contenuto* di ciascun
header (o del body)
Se un header corrisponde a regexp_header ed il suo contenuto a regexp_value
allora lo script esegue l'azione determinata da action passandogli due
argomenti (arg1 e arg2).
action arg1 arg2
log
syslog string
file file
save
message directory
rnews file
mbox file
mail address
maildir directory
drop
syslog string
file file
score
ruleset value
Dove:
log scrive la stringa "string" in un file od in syslog. In string, esistono
acune espressioi che vengono sostituite con alcuni header:
%M = Message-ID
%F = From
%N = Newsgroups
%P = Path
%I = NNTP-Posting-Host
Esempio:
From:aioe:log:syslog:Message-ID %M logged:Logga il mid
From:aioe_log:file:/var/log/news/news.log:Logga in news.log
Se il log avviene in un file, questo è quanto viene loggato:
banlist_file:line action: arg2
save salva il messaggio in numerosi formati:
message come singolo file nella directory indicata dal quinto campo
maildir come un singolo file in "directory/new"
rnews appende l'articolo in fondo a "file" (quinto campo) in formato rnews
mbox appende l'articolo in fondo a "file" (quinto campo) in formato mbox
mail invia per mail l'articolo all'indirizzo address (quinto campo)
Esempi:
.:.:save:rnews:/tmp/1.rnews:Salva tutto in rnews
.:.:save:mbox:/tmp/1.mbox:Salva in mbox
.:.:save:mail:freedom@aioe.org:Invia a me tutto
drop è identico a log, solo ovviamente respinge il messaggio.
score permette di creare regole arbitrarie e di assegnare loro un punteggio
positivo o negativo. Se il peso totale di quella ciascuna supera
$config{'score_banlist'}, il messaggio è respinto. Questo permette di
implementare (semplici) condizioni (AND ed OR).
Esempi:
con $config{'score_banlist'} = 10;
From:Pirotti:score:pirotti:5:Assegna un valore di 5 alla regola "pirotti"
BODY:follonica:score:pirotti:6:Assegna un valore di 6 alla regola "pirotti"
Se un messaggio contiene nel From "Pirotti" e nel body "follonica", lo script
lo respinge (6+5>10).
Altro esempio:
con $config{'score_banlist'} = 10;
BODY:Prospero|Follonica:score:pirotti:5:
BODY:Pirotti:score:pirotti:6:
BODY:merda:score:pirotti:-1:
Respinge tutti i messaggi che contengono nel body "Prospero" o "Follonica" (5
punti alla regola pirotti), contengono anche "Pirotti" (altri 6 punti) e
*non* contengono "merda" (se ci fosse, toglierebbe un punto e renderebbe il
messaggio accettabile).
---------------
che ne pensate?
suggerimenti, proposte, idee... tutto va bene
peraltro, avrei bisogno di un po' di traffico per provare il programma (su
aioe.test.moderato od altrove)
ciauuu
Maggiori informazioni sulla lista
gcn-list