ISPConfig 2.x:Jak přidat možnost „Přesunout do SPAMu“ do ISPConfigInstallation
Verze 1.0b
Autor:Jens Groh
Přehled:
Tento dokument popisuje kroky potřebné k přidání třetí strategie filtrování nevyžádané pošty do vaší instalace ISPConfig 2.x. To vám a vašim uživatelům umožní vybrat, zda chtějí spam zahodit, povolit spam nebo jej přesunout do odpovídajícího IMAP složky nevyžádané pošty.
Tento návod byl inspirován vláknem fóra od 'grant' (https://www.howtoforge.com/forums/showthread.php?t=15704), který popsal výměnu strategie dropu za přesun. Podle následujících kroků nenahradíte metodu drop, ale získáte třetí.
Předpoklady:
V tomto návodu budu předpokládat, že používáte následující nebo podobnou konfiguraci:
- ISPConfig (v2.2.23 nebo novější)
- Alespoň jedna doména s nastavenou a spuštěnou poštovní schránkou
- IMAP používá formát Maildir (toto nebude fungovat s mbox!)
Krok 1 – Změna formulářů
Prvním krokem je přihlášení do panelu ISPConfig pomocí Admin účet. Poté zadejte Administrace a otevřete FormDesigner pomocí Upravit formulář . Vyhledejte isp – uživatel ISP a klikněte na upravit .
Nyní byste měli vidět úplný popis formuláře pro tento konkrétní formulář. Podívejte se na spam_strategy a stiskněte upravit znovu.
Nyní změňte Seznam hodnot tohoto prvku formuláře vložením řádku pro naši možnost budoucího přesunu, aby se zobrazilo:
accept,accept; move,move; discard,discard;a uložte tento formulář. Možnosti uživatele pošty ve vaší doméně by nyní měly ukazovat tuto novou možnost v rozevíracím poli strategie spamu – i když zatím nemá žádnou funkci. Nyní ke konzolové části:Pojďme upravit některé soubory ISPConfig, abychom nové možnosti vdechli život.
Krok 2 – Úprava zdrojových souborů ISPConfig
Nyní musíme upravit spoustu souborů. Jen je napíšu a vysvětlím později:
vi/root/ispconfig/scripts/lib/classes/ispconfig_procmail.lib.php
(kolem řádku 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: create IMAP subfolders 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: create IMAP subfolders 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: create IMAP subfolders 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__);
(kolem řádku 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/"; } }
(kolem řádku 330)
if(is_file('/home/admispconfig/ispconfig/tools/spamassassin/usr/local/bin/spamassassin')){ @@ -302,6 +333,7 @@ // Variablen zuweisen $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));
To přidává základní funkce. Tato změna přidává uživatelům standardní poštovní schránky jako Koš, Odeslaná, Nevyžádaná a Koncepty pokaždé, když se vytvoří mailuseris, takže můžeme přesunout spam do příslušné složky nevyžádané pošty.
Najděte a přidejte řetězec přesunu do dalších souborů, jak je znázorněno:
vi/home/admispconfig/ispconfig/lib/classes/ispconfig_isp_user.lib.php
(kolem řádku 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
(kolem řádku 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/
$wb["txt_accept"] = "accept"; $wb["txt_move"] = "move"; $wb["txt_discard"] = "discard";
vi/home/admispconfig/ispconfig/web/isp_manager/lib/lang/
$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"] = "Individual Settings"; $wb["Keine Vorlage vorhanden"] = "No Hostingplan Available"; $wb["txt_accept"] = "accept"; $wb["txt_move"] = "move"; $wb["txt_discard"] = "discard"; $wb["Eigenschaften"] = "Properties"; $wb["ISP Datenbank"] = "ISP Database";
vi/home/admispconfig/ispconfig/web/isp_kunde/lib/lang/
$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"] = "Individual Settings"; $wb["Keine Vorlage vorhanden"] = "No Hostingplan Available"; $wb["txt_accept"] = "accept"; $wb["txt_move"] = "move"; $wb["txt_discard"] = "discard"; $wb["Eigenschaften"] = "Properties"; $wb["ISP Datenbank"] = "ISP Database";
Poslední tři změny, které musíte provést pro jazykový soubor nebo vaše rozhraní, se zobrazí pouze přesunout místo odpovídajícího výrazu ve vašem jazyce. Tři ukázkové úryvky jsou ze souborů en.lng v těchto adresářích, ostatní jazyky upravte stejným způsobem (vložte přesunout záznamy mezi ostatními).
Krok 3 – Vytvoření přizpůsobených šablon
Nyní přejděte na /root/ispconfig/isp/conf adresář a vytvořte vlastní kopii spamassassin.rc.master :
cd /root/ispconfig/isp/conf
cp -pr spamassassin.rc.master ./customized_templates/cd customed_templates
Nyní upravte vlastní šablonu tak, aby odrážela potřebné změny:
# All mail tagged as spam (eg. with a score higher than the set threshold) # is moved to "/dev/null". {SPAM_COMMENT}:0: {SPAM_COMMENT}* ^X-Spam-Status: Yes {SPAM_COMMENT}{SPAM_COMMAND}
Krok 4 (volitelný) – Implementujte čištění vašeho koše a složek se spamem
Toto již řešilo MuisjeNL v následujícím HowTo:Automatické čištění koše a/nebo nevyžádaných složek pomocí ISPConfig (s Roundcube + Tmpreaper / Tmpwatch)
Krok 5 (volitelný) – Implementujte určitou uživatelskou přívětivost a vytvořte stavové e-maily
Toto je pod intenzivním vývojem, protože v tuto chvíli používáme nějaký pěkně hacknutý perlkód. Pokusím se to vyčistit nebo to přenést do docela malého skriptu.
Závěr
Nyní tedy můžete přidat uživatele pošty (nebo změnit stávajícího), aby mohl použít novýpřesun metoda. Testoval jsem to s uživatelem, který dostává kolem 100–200 spamů denně, a změnil jsem jeho strategii na přesunout . S kruhovou krychlí podobnou webmaileru nebo připojením k poštovní schránce přes IMAP jsem měl téměř okamžité výsledky, protože první e-maily padly do složky nevyžádané pošty, nikoli do jeho doručené pošty.
Ujistěte se, že jste to zaškrtli, než to skutečně spustíte na produkčních serverech.
Tento návod je dodáván bez jakékoli záruky. Buďte moudří, vyzkoušejte to!
Protože je to pro mě první HowTo na HowtoForge (a nejsem žádný rodilý mluvčí), doufám, že nebudete mít problémy s jeho přizpůsobením vašim potřebám. Bavte se se skvělým softwarem:ISPConfig !
Jens Groh za SANlutions Ltd.
-
Kubuntu zobrazuje chybu při přihlášení (file:///usr/share/sddm//themes/breeze/main.qml:žádný takový soubor nebo adresář)?
-
„Nelze vytvořit adresář mezipaměti /home//.composer/cache/repo/https—packagist.org/, nebo adresář není zapisovatelný. Pokračovat bez mezipaměti“?
-
Jak systemd-tmpfiles vyčistí /tmp/ nebo /var/tmp (náhrada tmpwatch) v CentOS / RHEL 7