ISPConfig · 5 min read · Nov 15, 2025
ISPConfig 2.x: Come Aggiungere un'Opzione "Sposta in SPAM" alla Tua Installazione di ISPConfig
ISPConfig 2.x: Come Aggiungere un’Opzione “Sposta in SPAM” alla Tua Installazione di ISPConfig
Versione 1.0b
Autore: Jens Groh
Panoramica:
Questo documento descrive i passaggi necessari per aggiungere una terza strategia di filtro spam alla tua installazione di ISPConfig 2.x. Questo permetterà a te e ai tuoi utenti di selezionare se vogliono eliminare lo spam, consentire lo spam o spostarlo nella corrispondente cartella di posta indesiderata IMAP.
Questo howto è stato ispirato dal thread del forum di ‘grant’ (https://www.howtoforge.com/forums/showthread.php?t=15704) che ha descritto lo scambio della strategia di eliminazione con lo spostamento. Seguendo i passaggi qui sotto non sostituirai il metodo di eliminazione ma guadagnerai un terzo metodo.
Requisiti:
In questo howto presumo che tu stia utilizzando la seguente configurazione o una simile:
- ISPConfig (v2.2.23 o successivo)
- Almeno un dominio con una casella di posta configurata e funzionante
- IMAP utilizza il formato Maildir (questo non funzionerà con mbox!)
Passo 1 - Modifica dei Moduli
Il primo passo è accedere al tuo Pannello ISPConfig con l’account Admin. Poi entra nella scheda Amministrazione e apri il Designer di Moduli con Modifica Modulo. Cerca isp - Utente ISP e clicca su modifica.
Ora dovresti vedere la descrizione completa del modulo in questione. Fai attenzione a spam_strategy e premi modifica di nuovo.
Ora modifica la Lista dei Valori di quell’elemento del modulo inserendo una riga per la nostra futura opzione di spostamento in modo che appaia:
accept,accept;
move,move;
discard,discard;
e salva quel modulo. Le opzioni per gli utenti di posta nel tuo dominio dovrebbero ora mostrare quella nuova opzione nel menu a discesa della strategia spam - anche se non ha ancora una funzione. Ora per la parte della console: Modifichiamo alcuni file di ISPConfig, per dare vita alla nuova opzione.
Passo 2 - Modifica dei File Sorgente di ISPConfig
Ora dobbiamo modificare un certo numero di file. Li scriverò e spiegherò dopo:
vi /root/ispconfig/scripts/lib/classes/ispconfig_procmail.lib.php(verso la riga 109):
if(!is_dir($web_path."/user/".$user_username."/Maildir"))
$mod->log->caselog("maildirmake
".$web_path."/user/".$user_username."/Maildir &> /dev/null", "maildirmake
".$web_path."/user/".$user_username."/Maildir &> /dev/null", __LINE__);
// ADD: crea sottocartelle IMAP
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Drafts"))
$mod->log->caselog("maildirmake
".$web_path."/user/".$user_username."/Maildir/.Drafts &> /dev/null",
"maildirmake ".$web_path."/user/".$user_username."/Maildir/.Drafts &>
/dev/null", __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Junk"))
$mod->log->caselog("maildirmake
".$web_path."/user/".$user_username."/Maildir/.Junk &> /dev/null",
"maildirmake ".$web_path."/user/".$user_username."/Maildir/.Junk &>
/dev/null", __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Sent"))
$mod->log->caselog("maildirmake
".$web_path."/user/".$user_username."/Maildir/.Sent &> /dev/null",
"maildirmake ".$web_path."/user/".$user_username."/Maildir/.Sent &>
/dev/null", __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Trash"))
$mod->log->caselog("maildirmake
".$web_path."/user/".$user_username."/Maildir/.Trash &> /dev/null",
"maildirmake ".$web_path."/user/".$user_username."/Maildir/.Trash &>
/dev/null", __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir",
0700), "crea ".$web_path."/user/".$user_username."/Maildir", $this->FILE,
__LINE__);
// ADD: crea sottocartelle IMAP
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Drafts"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir/.Drafts",
0700), "crea ".$web_path."/user/".$user_username."/Maildir/.Drafts",
$this->FILE, __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Junk"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir/.Junk",
0700), "crea ".$web_path."/user/".$user_username."/Maildir/.Junk",
$this->FILE, __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Sent"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir/.Sent",
0700), "crea ".$web_path."/user/".$user_username."/Maildir/.Sent",
$this->FILE, __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Trash"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir/.Trash",
0700), "crea ".$web_path."/user/".$user_username."/Maildir/.Trash",
$this->FILE, __LINE__);
exec("chown -R ".$user_username.":web".$web_doc_id."
".$web_path."/user/".$user_username."/Maildir");
exec("chmod 700 ".$web_path."/user/".$user_username."/Maildir");
// ADD: crea sottocartelle IMAP
exec("chown -R ".$user_username.":web".$web_doc_id."
".$web_path."/user/".$user_username."/Maildir/.Drafts");
exec("chmod 700 ".$web_path."/user/".$user_username."/Maildir/.Drafts");
exec("chown -R ".$user_username.":web".$web_doc_id."
".$web_path."/user/".$user_username."/Maildir/.Junk");
exec("chmod 700 ".$web_path."/user/".$user_username."/Maildir/.Junk");
exec("chown -R ".$user_username.":web".$web_doc_id."
".$web_path."/user/".$user_username."/Maildir/.Sent");
exec("chmod 700 ".$web_path."/user/".$user_username."/Maildir/.Sent");
exec("chown -R ".$user_username.":web".$web_doc_id."
".$web_path."/user/".$user_username."/Maildir/.Trash");
exec("chmod 700 ".$web_path."/user/".$user_username."/Maildir/.Trash");
if($user["user_admin"]){
exec("rm -f $web_path/Maildir &> /dev/null");
$mod->log->phpcaselog(@symlink($web_path."/user/".$user_username."/Maildir",
$web_path."/Maildir"), "symlink ".$web_path."/Maildir", $this->FILE,
__LINE__);
(verso la riga 300)
$mod->tpl->define( array(table => "spamassassin.rc.master"));
if(!isset($user["spam_strategy"])) $user["spam_strategy"] = "accept";
if($user["spam_strategy"] == "accept"){
$spam_comment = "#";
$spam_command = ".Junk/";
} else {
$spam_comment = "";
if($user["spam_strategy"] == "discard"){
$spam_command = "/dev/null";
} else {
$spam_command = ".Junk/";
}
}
(verso la riga 330)
if(is_file('/home/admispconfig/ispconfig/tools/spamassassin/usr/local/bin/spamassassin')){
@@ -302,6 +333,7 @@
// Variabili da assegnare
$mod->tpl->assign( array(PREFS_FILE =>
$web_path."/user/".$user_username."/.user_prefs",
SPAM_COMMENT => $spam_comment,
SPAM_COMMAND => $spam_command,
SPAMASSASSIN_PATH => $spamassassin_path,
USERNAME =>
$user_username));
Questo aggiunge funzionalità di base. La modifica aggiunge le caselle di posta standard Maildir degli utenti come Trash, Sent, Junk e Drafts ogni volta che viene creato un utente di posta, in modo da poter spostare lo spam nella corrispondente cartella indesiderata.
Trova e aggiungi la stringa di spostamento in tutti i file successivi come mostrato:
vi /home/admispconfig/ispconfig/lib/classes/ispconfig_isp_user.lib.php(verso la riga 102)
$doc->deck[1]->elements[11]->visible = 0;
}
$doc->deck[2]->elements[2]->values["accept"] =
$go_api->lng("txt_accept");
$doc->deck[2]->elements[2]->values["move"] =
$go_api->lng("txt_move");
$doc->deck[2]->elements[2]->values["discard"] =
$go_api->lng("txt_discard");
}
vi /home/admispconfig/ispconfig/web/mailuser/mail/table/user.table.php(verso la riga 135)
'regex'
=> "",
'errmsg'
=> "",
'value'
=> array( "accept" => $app->lng("txt_accept"),
"move" =>
$app->lng("txt_move"),
"discard" =>
$app->lng("txt_discard"));
$table['spam_hits'] = array('datatype' => "VARCHAR",
vi /home/admispconfig/ispconfig/web/mailuser/lib/lang/.lng(esempio per en.lng, verso la riga 33)
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
vi /home/admispconfig/ispconfig/web/isp_manager/lib/lang/.lng
(esempio per en.lng, verso la riga 268 e riga 452)
$wb["Spamfilter"] = 'Spamfilter';
$wb["Antivirus"] = 'Antivirus';
$wb["accept"] = 'accept';
$wb["move"] = 'move';
$wb["discard"] = 'discard';
$wb["Spam Strategie"] = 'Spam Strategy';
$wb["Spam Hits"] = 'Spam Hits';
(...)
$wb["Keine Vorlage verwenden"] = "Impostazioni Individuali";
$wb["Keine Vorlage vorhanden"] = "Nessun Piano di Hosting Disponibile";
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
$wb["Eigenschaften"] = "Proprietà";
$wb["ISP Datenbank"] = "ISP Database";
vi /home/admispconfig/ispconfig/web/isp_kunde/lib/lang/**.lng(esempio per en.lng, verso la riga 268 e riga 449)
$wb["Spamfilter"] = 'Spamfilter';
$wb["Antivirus"] = 'Antivirus';
$wb["accept"] = 'accept';
$wb["move"] = 'move';
$wb["discard"] = 'discard';
$wb["Spam Strategie"] = 'Spam Strategy';
$wb["Spam Hits"] = 'Spam Hits';
(...)
$wb["Keine Vorlage verwenden"] = "Impostazioni Individuali";
$wb["Keine Vorlage vorhanden"] = "Nessun Piano di Hosting Disponibile";
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
$wb["Eigenschaften"] = "Proprietà";
$wb["ISP Datenbank"] = "ISP Database";
Le ultime tre modifiche devono essere effettuate per file di lingua o la tua interfaccia mostrerà solo move invece del termine corrispondente nella tua lingua. I tre frammenti di esempio sono dai file en.lng in quelle directory, modifica altre lingue allo stesso modo (inserisci le voci move tra le altre).
Passo 3 - Crea Modelli Personalizzati
Ora cambia nella directory /root/ispconfig/isp/conf e crea una copia personalizzata di spamassassin.rc.master:
cd /root/ispconfig/isp/conf
cp -pr spamassassin.rc.master ./customized_templates/ cd customized_templatesOra modifica il modello personalizzato per riflettere le modifiche necessarie:
# Tutti i messaggi di posta contrassegnati come spam (ad es. con un punteggio superiore alla soglia impostata)
# vengono spostati in "/dev/null".
{SPAM_COMMENT}:0:
{SPAM_COMMENT}* ^X-Spam-Status: Yes
{SPAM_COMMENT}{SPAM_COMMAND}
Passo 4 (opzionale) - Implementa la Pulizia delle tue cartelle di spam e cestino
Questo è già stato affrontato da MuisjeNL nel seguente HowTo: Pulizia Automatica delle Cartelle di Cestino e/o Indesiderate con ISPConfig (Con Roundcube + Tmpreaper / Tmpwatch)
Passo 5 (opzionale) - Implementa un po’ di facilità d’uso e crea email di stato
Questo è in fase di sviluppo intenso poiché stiamo utilizzando un codice perl piuttosto modificato al momento. Cercherò di sistemarlo o trasferirlo in uno script più carino.
Conclusione
Quindi ora puoi aggiungere un utente di posta (o modificare un esistente) per utilizzare il nuovo metodo move. L’ho testato con un utente che riceve circa 100-200 email di spam al giorno e ha cambiato la sua strategia in move. Con un webmailer come roundcube o collegandosi alla casella di posta tramite IMAP ho avuto risultati quasi immediati poiché le prime email sono cadute nella cartella indesiderata piuttosto che nella sua casella di posta in arrivo.
Assicurati di controllare questo prima di eseguirlo su server di produzione.
Questo tutorial non viene fornito con alcuna garanzia. Sii saggio, testalo!
Poiché questo è il primo HowTo su HowtoForge per me (e non sono un madrelingua), spero che non avrai problemi ad adattarlo alle tue esigenze. Divertiti con un ottimo Software: ISPConfig!
Jens Groh per SANlutions Ltd.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.