ISPConfig · 6 min read · Nov 15, 2025

ISPConfig 2.x: Cómo agregar una opción de "Mover a SPAM" a su instalación de ISPConfig

ISPConfig 2.x: Cómo agregar una opción de “Mover a SPAM” a su instalación de ISPConfig

Versión 1.0b
Autor: Jens Groh

Resumen:

Este documento describe los pasos necesarios para agregar una tercera estrategia de filtro de spam a su instalación de ISPConfig 2.x. Esto permitirá que usted y sus usuarios seleccionen si desean eliminar el spam, permitir el spam o moverlo a la carpeta de correo no deseado IMAP correspondiente.

Este tutorial fue inspirado por el hilo del foro de ‘grant’ (https://www.howtoforge.com/forums/showthread.php?t=15704) que describió el intercambio de la estrategia de eliminación por mover. Siguiendo los pasos a continuación, no reemplazará el método de eliminación, sino que obtendrá uno tercero.

Requisitos previos:

En este tutorial asumiré que está utilizando la siguiente configuración o una similar:

  • ISPConfig (v2.2.23 o posterior)
  • Al menos un dominio con un buzón configurado y funcionando
  • IMAP está utilizando el formato Maildir (¡esto no funcionará con mbox!)

Paso 1 - Cambiando formularios

El primer paso es iniciar sesión en su Panel de ISPConfig con la cuenta de Admin. Luego ingrese a la pestaña Administración y abra el Diseñador de Formularios con Editar Formulario. Busque isp - Usuario ISP y haga clic en editar.
Ahora debería ver la descripción completa del formulario de ese formulario en particular. Busque spam_strategy y haga clic en editar nuevamente.
Ahora cambie la Lista de valores de ese elemento del formulario insertando una línea para nuestra futura opción de mover, de modo que se muestre:

accept,accept;
move,move;
discard,discard;

y guarde ese formulario. Las opciones de usuario de correo en su dominio deberían mostrar ahora esa nueva opción en el cuadro desplegable de estrategia de spam, aunque aún no tenga función. Ahora para la parte de la consola: Vamos a editar algunos archivos de ISPConfig para dar vida a la nueva opción.

Paso 2 - Editando archivos fuente de ISPConfig

Ahora tenemos que editar un montón de archivos. Solo los escribiré y explicaré más tarde:

vi /root/ispconfig/scripts/lib/classes/ispconfig_procmail.lib.php

(alrededor de la línea 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__);
        // AÑADIR: crear subcarpetas 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), "create ".$web_path."/user/".$user_username."/Maildir", $this->FILE,
__LINE__);
 
        // AÑADIR: crear subcarpetas IMAP
        if(!is_dir($web_path."/user/".$user_username."/Maildir/.Drafts"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir/.Drafts",
0700), "create ".$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), "create ".$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), "create ".$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), "create ".$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");
 
  // AÑADIR: crear subcarpetas 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__);

(alrededor de la línea 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/";
     }
   }

(alrededor de la línea 330)


if(is_file('/home/admispconfig/ispconfig/tools/spamassassin/usr/local/bin/spamassassin')){
@@ -302,6 +333,7 @@
   // Asignar variables
   $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));

Esto agrega funcionalidad central. El cambio agrega los buzones estándar de Maildir de los usuarios como Trash, Sent, Junk y Drafts cada vez que se crea un usuario de correo, para que podamos mover el spam a la carpeta de correo no deseado correspondiente.

Encuentre y agregue la cadena de mover en los siguientes archivos como se muestra:

vi /home/admispconfig/ispconfig/lib/classes/ispconfig_isp_user.lib.php

(alrededor de la línea 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

(alrededor de la línea 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

(ejemplo para en.lng, alrededor de la línea 33)

 $wb["txt_accept"] = "accept";
 $wb["txt_move"] = "move";
 $wb["txt_discard"] = "discard";
vi /home/admispconfig/ispconfig/web/isp_manager/lib/lang/.lng

(ejemplo para en.lng, alrededor de la línea 268 y línea 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"] = "Configuraciones Individuales";
 $wb["Keine Vorlage vorhanden"] = "No hay plan de alojamiento disponible";
 $wb["txt_accept"] = "accept";
 $wb["txt_move"] = "move";
 $wb["txt_discard"] = "discard";
 $wb["Eigenschaften"] = "Propiedades";
 $wb["ISP Datenbank"] = "Base de Datos ISP";
vi /home/admispconfig/ispconfig/web/isp_kunde/lib/lang/**.lng

(ejemplo para en.lng, alrededor de la línea 268 y línea 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"] = "Configuraciones Individuales";
 $wb["Keine Vorlage vorhanden"] = "No hay plan de alojamiento disponible";
 $wb["txt_accept"] = "accept";
 $wb["txt_move"] = "move";
 $wb["txt_discard"] = "discard";
 $wb["Eigenschaften"] = "Propiedades";
 $wb["ISP Datenbank"] = "Base de Datos ISP";

Los últimos tres cambios que debe hacer por archivo de idioma o su interfaz simplemente mostrará move en lugar del término correspondiente en su idioma. Los tres fragmentos de ejemplo son de los archivos en.lng en esos directorios, edite otros idiomas de la misma manera (inserte las entradas de move entre las demás).

Paso 3 - Crear plantillas personalizadas

Ahora cambie al directorio /root/ispconfig/isp/conf y cree una copia personalizada de spamassassin.rc.master:

cd /root/ispconfig/isp/conf  
cp -pr spamassassin.rc.master ./customized_templates/ cd customized_templates

Ahora edite la plantilla personalizada para reflejar los cambios necesarios:

# Todo el correo etiquetado como spam (por ejemplo, con una puntuación superior al umbral establecido)
# se mueve a "/dev/null".
{SPAM_COMMENT}:0:
{SPAM_COMMENT}* ^X-Spam-Status: Yes
{SPAM_COMMENT}{SPAM_COMMAND}

Paso 4 (opcional) - Implementar la limpieza de sus carpetas de basura y spam

Esto ya ha sido abordado por MuisjeNL en el siguiente HowTo: Limpieza Automática de Carpetas de Basura y/o Spam con ISPConfig (Con Roundcube + Tmpreaper / Tmpwatch)

Paso 5 (opcional) - Implementar algo de facilidad de uso y crear correos de estado

Esto está en desarrollo intensivo ya que estamos utilizando un código perl bastante modificado en este momento. Intentaré limpiarlo o transferirlo a un script bonito.

Conclusión

Así que ahora puede agregar un usuario de correo (o cambiar uno existente) para usar el nuevo método move. Lo probé con un usuario que recibe alrededor de 100-200 correos spam al día y cambió su estrategia a move. Con un webmailer como roundcube o conectándose al buzón a través de IMAP, casi tuve resultados inmediatos ya que los primeros correos cayeron en la carpeta de correo no deseado en lugar de su bandeja de entrada.

Asegúrese de que lo verifique antes de ejecutarlo en servidores de producción.
Este tutorial no viene con ninguna garantía. Sea sabio, ¡pruébelo!

Como este es el primer HowTo en HowtoForge para mí (y no soy hablante nativo), espero que no tenga problemas para adaptarlo a sus necesidades. ¡Diviértase con un gran software: ISPConfig!

Jens Groh para SANlutions Ltd.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.