ISPConfig · 5 min read · Nov 15, 2025
ISPConfig 2.x: Как добавить опцию "Переместить в СПАМ" в вашу установку ISPConfig
ISPConfig 2.x: Как добавить опцию “Переместить в СПАМ” в вашу установку ISPConfig
Версия 1.0b
Автор: Jens Groh
Обзор:
Этот документ описывает шаги, необходимые для добавления третьей стратегии фильтрации спама в вашу установку ISPConfig 2.x. Это позволит вам и вашим пользователям выбирать, хотят ли они удалять спам, разрешать спам или перемещать его в соответствующую папку нежелательной почты IMAP.
Этот гайд был вдохновлен темой на форуме от ‘grant’ (https://www.howtoforge.com/forums/showthread.php?t=15704), который описал замену стратегии удаления на перемещение. Следуя шагам ниже, вы не замените метод удаления, а получите третий вариант.
Предварительные условия:
В этом руководстве я предполагаю, что вы используете следующую или аналогичную конфигурацию:
- ISPConfig (v2.2.23 или новее)
- По крайней мере один домен с настроенным и работающим почтовым ящиком
- IMAP использует формат Maildir (это не будет работать с mbox!)
Шаг 1 - Изменение форм
Первый шаг - войти в вашу панель ISPConfig с учетной записью Admin. Затем перейдите на вкладку Администрирование и откройте Конструктор форм с помощью Редактировать форму. Найдите isp - ISP User и нажмите редактировать.
Теперь вы должны увидеть полное описание формы этого конкретного элемента. Обратите внимание на spam_strategy и снова нажмите редактировать.
Теперь измените Список значений этого элемента формы, вставив строку для нашей будущей опции перемещения, чтобы она выглядела так:
accept,accept;
move,move;
discard,discard;
и сохраните эту форму. Ваши параметры почтового пользователя в вашем домене теперь должны показывать эту новую опцию в выпадающем списке стратегии спама - хотя она пока не имеет функции. Теперь перейдем к консольной части: давайте отредактируем несколько файлов ISPConfig, чтобы вдохнуть жизнь в новую опцию.
Шаг 2 - Редактирование исходных файлов ISPConfig
Теперь нам нужно отредактировать несколько файлов. Я просто запишу их и объясню позже:
vi /root/ispconfig/scripts/lib/classes/ispconfig_procmail.lib.php(примерно строка 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__);
// ДОБАВИТЬ: создать подкаталоги 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__);
// ДОБАВИТЬ: создать подкаталоги 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");
// ДОБАВИТЬ: создать подкаталоги 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__);
(примерно строка 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/";
}
}
(примерно строка 330)
if(is_file('/home/admispconfig/ispconfig/tools/spamassassin/usr/local/bin/spamassassin')){
@@ -302,6 +333,7 @@
// Присвоение переменных
$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));
Это добавляет основную функциональность. Изменение добавляет стандартные почтовые ящики Maildir пользователей, такие как Trash, Sent, Junk и Drafts каждый раз, когда создается почтовый пользователь, чтобы мы могли перемещать спам в соответствующую папку нежелательной почты.
Найдите и добавьте строку перемещения в следующие файлы, как показано:
vi /home/admispconfig/ispconfig/lib/classes/ispconfig_isp_user.lib.php(примерно строка 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(примерно строка 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(пример для en.lng, примерно строка 33)
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
vi /home/admispconfig/ispconfig/web/isp_manager/lib/lang/.lng
(пример для en.lng, примерно строка 268 и строка 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"] = "Индивидуальные настройки";
$wb["Keine Vorlage vorhanden"] = "Нет доступного хостинг-плана";
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
$wb["Eigenschaften"] = "Свойства";
$wb["ISP Datenbank"] = "ISP Database";
vi /home/admispconfig/ispconfig/web/isp_kunde/lib/lang/**.lng(пример для en.lng, примерно строка 268 и строка 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"] = "Индивидуальные настройки";
$wb["Keine Vorlage vorhanden"] = "Нет доступного хостинг-плана";
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
$wb["Eigenschaften"] = "Свойства";
$wb["ISP Datenbank"] = "ISP Database";
Последние три изменения вам нужно сделать в каждом языковом файле, иначе ваш интерфейс будет просто показывать move вместо соответствующего термина на вашем языке. Три примера кода взяты из файлов en.lng в этих директориях, редактируйте другие языки аналогичным образом (вставьте записи move между остальными).
Шаг 3 - Создание индивидуализированных шаблонов
Теперь перейдите в директорию /root/ispconfig/isp/conf и создайте индивидуальную копию spamassassin.rc.master:
cd /root/ispconfig/isp/conf
cp -pr spamassassin.rc.master ./customized_templates/ cd customized_templatesТеперь отредактируйте индивидуальный шаблон, чтобы отразить необходимые изменения:
# Вся почта, помеченная как спам (например, с оценкой выше установленного порога)
# перемещается в "/dev/null".
{SPAM_COMMENT}:0:
{SPAM_COMMENT}* ^X-Spam-Status: Yes
{SPAM_COMMENT}{SPAM_COMMAND}
Шаг 4 (опционально) - Реализация очистки ваших папок для мусора и спама
Это уже было рассмотрено MuisjeNL в следующем HowTo: Автоматическая очистка папок для мусора и/или нежелательной почты с ISPConfig (с Roundcube + Tmpreaper / Tmpwatch)
Шаг 5 (опционально) - Реализация удобства для пользователя и создание статусных писем
Это находится в активной разработке, так как в данный момент мы используем довольно много измененного perl-кода. Я постараюсь привести это в порядок или перенести в красивый скрипт.
Заключение
Теперь вы можете добавить почтового пользователя (или изменить существующего), чтобы использовать новый метод move. Я протестировал это с пользователем, получающим около 100-200 спам-писем в день, и изменил его стратегию на move. С веб-почтовиком, таким как roundcube, или подключившись к почтовому ящику через IMAP, я почти сразу увидел результаты, так как первые письма попали в папку нежелательной почты, а не в его входящие.
Убедитесь, что вы проверили это перед тем, как запустить на производственных серверах.
Этот учебник не дает никаких гарантий. Будьте разумны, тестируйте это!
Так как это первый HowTo на HowtoForge для меня (и я не носитель языка), я надеюсь, что у вас не возникнет проблем с адаптацией его под ваши нужды. Удачи с отличным программным обеспечением: ISPConfig!
Jens Groh для SANlutions Ltd.
Get new posts in your inbox
No spam. Unsubscribe anytime.