ISPConfig · 4 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단계 - 양식 변경
첫 번째 단계는 Admin 계정으로 ISPConfig 패널에 로그인하는 것입니다. 그런 다음 Administration 탭에 들어가 Edit Form으로 Form Designer를 엽니다. isp - ISP User를 검색하고 edit를 클릭합니다.
이제 해당 양식의 전체 설명을 볼 수 있습니다. spam_strategy를 찾아 다시 edit를 클릭합니다.
이제 향후 이동 옵션을 위해 해당 양식 요소의 Value list를 다음과 같이 변경합니다:
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__);
// ADD: 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: 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: 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"] = "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/**.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"] = "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";
마지막 세 가지 변경 사항은 언어 파일마다 수행해야 하며, 그렇지 않으면 인터페이스에서 해당 언어의 용어 대신 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에 의해 다음 방법으로 다루어졌습니다: ISPConfig를 사용한 쓰레기 및/또는 정크 폴더의 자동 정리 (Roundcube + Tmpreaper / Tmpwatch 사용)
5단계 (선택 사항) - 사용자 친화성 구현 및 상태 메일 생성
현재 우리는 꽤 해킹된 Perl 코드를 사용하고 있기 때문에 이 부분은 개발 중입니다. 이를 정리하거나 예쁜 스크립트로 전환하려고 합니다.
결론
이제 새로운 move 방법을 사용하기 위해 메일 사용자를 추가하거나 기존 사용자를 변경할 수 있습니다. 하루에 약 100-200개의 스팸 메일을 받는 사용자를 대상으로 테스트했으며 그의 전략을 move로 변경했습니다. Roundcube와 같은 웹 메일러를 사용하거나 IMAP을 통해 메일박스에 연결함으로써 첫 번째 메일이 그의 받은 편지함이 아닌 정크 폴더로 즉시 떨어지는 것을 거의 확인할 수 있었습니다.
실제 운영 서버에서 실행하기 전에 반드시 확인하십시오.
이 튜토리얼은 어떠한 보증도 제공하지 않습니다. 현명하게 테스트하세요!
이것은 HowtoForge에서 저의 첫 번째 방법이므로 (저는 원어민이 아닙니다), 귀하의 필요에 맞게 조정하는 데 문제가 없기를 바랍니다. 훌륭한 소프트웨어인 ISPConfig와 함께 즐거운 시간 되세요!
Jens Groh for SANlutions Ltd.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.