ISPConfig · 5 min read · Nov 15, 2025
ISPConfig 2.x: Como Adicionar uma Opção "Mover para SPAM" à Sua Instalação do ISPConfig
ISPConfig 2.x: Como Adicionar uma Opção “Mover para SPAM” à Sua Instalação do ISPConfig
Versão 1.0b
Autor: Jens Groh
Visão Geral:
Este documento descreve os passos necessários para adicionar uma terceira estratégia de filtro de spam à sua instalação do ISPConfig 2.x. Isso permitirá que você e seus usuários selecionem se desejam descartar spam, permitir spam ou movê-lo para a pasta de lixo eletrônico IMAP correspondente.
Este guia foi inspirado no tópico do fórum de ‘grant’ (https://www.howtoforge.com/forums/showthread.php?t=15704) que descreveu a troca da estratégia de descartar por mover. Seguindo os passos abaixo, você não substituirá o método de descartar, mas ganhará um terceiro.
Pré-requisitos:
Neste guia, assumirei que você está usando a seguinte configuração ou uma similar:
- ISPConfig (v2.2.23 ou posterior)
- Pelo menos um domínio com uma caixa de correio configurada e em funcionamento
- IMAP está usando o formato Maildir (isso não funcionará com mbox!)
Passo 1 - Alterando Formulários
O primeiro passo é fazer login no seu Painel ISPConfig com a conta Admin. Em seguida, entre na aba Administração e abra o Designer de Formulários com Editar Formulário. Procure por isp - Usuário ISP e clique em editar.
Você deve agora ver a descrição completa do formulário em questão. Fique atento a spam_strategy e clique em editar novamente.
Agora altere a Lista de valores desse elemento de formulário inserindo uma linha para nossa futura opção de mover, para que fique assim:
accept,accept;
move,move;
discard,discard;
e salve esse formulário. Suas opções de usuário de e-mail em seu domínio devem agora mostrar essa nova opção na caixa de seleção de estratégia de spam - mesmo que ainda não tenha função. Agora para a parte do console: Vamos editar alguns arquivos do ISPConfig, para dar vida à nova opção.
Passo 2 - Editando Arquivos Fonte do ISPConfig
Agora precisamos editar um monte de arquivos. Vou apenas listá-los e explicar depois:
vi /root/ispconfig/scripts/lib/classes/ispconfig_procmail.lib.php(aproximadamente na linha 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: criar subpastas 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__);
// ADD: criar subpastas 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");
// ADD: criar subpastas 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__);
(aproximadamente na linha 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/";
}
}
(aproximadamente na linha 330)
if(is_file('/home/admispconfig/ispconfig/tools/spamassassin/usr/local/bin/spamassassin')){
@@ -302,6 +333,7 @@
// Variáveis a serem atribuídas
$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));
Isso adiciona funcionalidade central. A mudança adiciona caixas de correio padrão Maildir como Trash, Sent, Junk e Drafts toda vez que um usuário de e-mail é criado, para que possamos mover spam para a pasta de lixo correspondente.
Encontre e adicione a string de mover em todos os próximos arquivos como mostrado:
vi /home/admispconfig/ispconfig/lib/classes/ispconfig_isp_user.lib.php(aproximadamente na linha 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(aproximadamente na linha 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(exemplo para en.lng, aproximadamente na linha 33)
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
vi /home/admispconfig/ispconfig/web/isp_manager/lib/lang/.lng
(exemplo para en.lng, aproximadamente na linha 268 e linha 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"] = "Configurações Individuais";
$wb["Keine Vorlage vorhanden"] = "Nenhum Plano de Hospedagem Disponível";
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
$wb["Eigenschaften"] = "Propriedades";
$wb["ISP Datenbank"] = "Banco de Dados ISP";
vi /home/admispconfig/ispconfig/web/isp_kunde/lib/lang/**.lng(exemplo para en.lng, aproximadamente na linha 268 e linha 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"] = "Configurações Individuais";
$wb["Keine Vorlage vorhanden"] = "Nenhum Plano de Hospedagem Disponível";
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
$wb["Eigenschaften"] = "Propriedades";
$wb["ISP Datenbank"] = "Banco de Dados ISP";
As últimas três alterações que você deve fazer por arquivo de idioma ou sua interface mostrará apenas move em vez do termo correspondente em seu idioma. Os três trechos de exemplo são dos arquivos en.lng nessas pastas, edite outros idiomas da mesma forma (insira as entradas move entre as outras).
Passo 3 - Criar Modelos Personalizados
Agora mude para o diretório /root/ispconfig/isp/conf e crie uma cópia personalizada de spamassassin.rc.master:
cd /root/ispconfig/isp/conf
cp -pr spamassassin.rc.master ./customized_templates/ cd customized_templatesAgora edite o modelo personalizado para refletir as mudanças necessárias:
# Todo e-mail marcado como spam (por exemplo, com uma pontuação superior ao limite definido)
# é movido para "/dev/null".
{SPAM_COMMENT}:0:
{SPAM_COMMENT}* ^X-Spam-Status: Sim
{SPAM_COMMENT}{SPAM_COMMAND}
Passo 4 (opcional) - Implementar a Limpeza de suas pastas de lixo e spam
Isso já foi abordado por MuisjeNL no seguinte HowTo: Limpeza Automática de Pastas de Lixo e/ou Spam com ISPConfig (Com Roundcube + Tmpreaper / Tmpwatch)
Passo 5 (opcional) - Implementar alguma facilidade de uso e criar e-mails de status
Isso está em desenvolvimento intenso, pois estamos usando um código Perl bastante modificado no momento. Tentarei limpar isso ou transferi-lo para um script mais bonito.
Conclusão
Agora você pode adicionar um usuário de e-mail (ou alterar um existente) para usar o novo método mover. Eu testei com um usuário recebendo cerca de 100-200 e-mails de spam por dia e mudei sua estratégia para mover. Com um webmail como roundcube ou conectando-se à caixa de correio via IMAP, quase tive resultados imediatos, pois os primeiros e-mails caíram na pasta de lixo em vez de em sua caixa de entrada.
Certifique-se de verificar isso antes de realmente executá-lo em servidores de produção.
Este tutorial não vem com garantia alguma. Seja sábio, teste!
Como este é o primeiro HowTo para mim no HowtoForge (e eu não sou um falante nativo), espero que você não tenha problemas em adaptá-lo às suas necessidades. Divirta-se com um ótimo Software: ISPConfig!
Jens Groh para SANlutions Ltd.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.