서버 설정 · 4 min read · Sep 28, 2025

완벽한 스팸스네이크 - 우분투 자운티 재칼로프 - 페이지 5

17.11 모든 것을 통합하기 위한 권한 설정

chown -R postfix:www-data /var/spool/MailScanner   
chown -R postfix:www-data /var/lib/MailScanner   
chown -R postfix:www-data /var/spool/postfix/hold   
chmod -R ug+rwx /var/spool/postfix/hold   
chmod -R u+rwx,g+rx /var/spool/MailScanner/quarantine

마지막으로 MailScanner를 재시작해야 합니다:

killall mailscanner
check_mailscanner

설정을 테스트합니다:

spamassassin -x -D -p /opt/MailScanner/etc/spam.assassin.prefs.conf --lint

다음과 같은 줄이 나타나는지 확인합니다:

debug: bayes: Database connection established   
debug: bayes: found bayes db version 3   
debug: bayes: Using userid: 2

DCC, Pyzor 및 Razor와 함께 플러그인 로딩 중이라는 메시지와 오류가 없기를 바랍니다.

이 부분을 마무리하기 위해 청소/업데이트할 크론 작업을 추가해야 합니다. MailScanner 설치 스크립트가 끝난 후 이 메시지를 보았을 것입니다.

먼저 conf.php를 편집하고 conf.php에서 ‘QUARANTINE_DAYS_TO_KEEP’를 설정한 다음 /usr/src/mailwatch-1.0.4/tools/db_clean의 다음 줄을 변경합니다:

#!/usr/bin/php -q
require('/var/www/mailscanner/functions.php');

격리 청소 스크립트를 설치합니다:

cp /usr/src/mailwatch-1.0.4/tools/quarantine_maint.php /usr/bin/quarantine_maint.php   
cp /usr/src/mailwatch-1.0.4/tools/db_clean.php /usr/bin/db_clean.php   
chmod +x /usr/bin/quarantine_maint.php   
chmod +x /usr/bin/db_clean.php

실행합니다

crontab -e

다음과 같이 추가합니다:

15 10 * * 2 /usr/bin/quarantine_maint.php --clean &> /dev/null
58 23 * * * /usr/bin/db_clean.php &> /dev/null

설치된 MailScanner 크론 스크립트 /etc/cron.daily/clean.quarantine를 비활성화합니다(참고: clean.quarantine 스크립트가 존재하는 경우에만 수행하십시오).

$disabled = 1; 

17.12 시스템 재부팅

reboot

mail.log를 확인합니다 (tail –f /var/log/mail.log) 그리고 다음과 같은 내용을 확인해야 합니다:

Jun 13 12:18:23 hoshi MailScanner[26388]: MailScanner E-Mail Virus Scanner version 4.20-3 starting...   
Jun 13 12:18:24 hoshi MailScanner[26388]: Config: calling custom init function MailWatchLogging   
Jun 13 12:18:24 hoshi MailScanner[26388]: Initialising database connection   
Jun 13 12:18:24 hoshi MailScanner[26388]: Finished initialising database connection

축하합니다 - 이제 MailScanner가 MySQL에 로깅됩니다.

17.13 MailWatch 인터페이스 테스트

브라우저를 http:///mailscanner/로 이동합니다 - 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다 - 이전에 생성한 MailWatch 웹 사용자의 세부 정보를 입력하면 MailScanner에 의해 처리된 마지막 50개의 메시지 목록이 표시됩니다.

메일을 볼 수 없는 경우 다음 권한을 설정해야 할 수 있습니다:

chgrp -R www-data /var/spool/MailScanner

lint 테스트에서 오류를 방지하기 위해 다음을 생성해야 할 수 있습니다:

mkdir /var/www/.spamassassin

17.14 SpamAssassin 규칙 테이블 업데이트

MailWatch는 ‘메시지 세부정보’ 페이지에 표시되는 모든 SpamAssassin 규칙 및 설명 목록을 유지합니다 - 설명을 표시하려면 새 규칙을 추가하거나 SpamAssassin을 업그레이드할 때마다 업데이트 프로그램을 실행해야 합니다. ‘도구/링크’ 메뉴를 클릭하고 ‘SpamAssassin 규칙 설명 업데이트’를 선택한 다음 ‘지금 실행’을 클릭합니다.

17.15 GeoIP 데이터베이스 업데이트

/var/www/mailscanner/geoip_update.php의 이 줄을 다음과 같이 변경합니다:

dbquery("LOAD DATA LOCAL INFILE 

*참고: php.ini에서 allow_url_fopen = On이 설정되어 있는지 확인하십시오.

‘도구/링크’ 메뉴를 클릭하고 ‘GeoIP 데이터베이스 업데이트’를 선택한 다음 ‘지금 실행’을 클릭합니다.

17.16 화이트리스트/블랙리스트에서 와일드카드를 허용하는 수정

/opt/MailScanner/lib/MailScanner/CustomFunctions/SQLBlackWhiteList.pm의 return 1 섹션 하단에 다음을 추가합니다:

return 1 if $BlackWhite->{$to}{'*@'.$fromdomain};
return 1 if $BlackWhite->{$to}{'*@*.'.$fromdomain};
return 1 if $BlackWhite->{$todomain}{'*@'.$fromdomain};
return 1 if $BlackWhite->{$todomain}{'*@*.'.$fromdomain};
return 1 if $BlackWhite->{'default'}{'*@'.$fromdomain};
return 1 if $BlackWhite->{'default'}{'*@*.'.$fromdomain};

17.17 메시지 작업에서 메시지를 찾지 못하는 수정

/var/www/mailscanner/do_message_ops.php 파일에서 다음을 변경합니다:

$id = $Regs[1]; 

다음과 같이 변경합니다:

$id = str_replace("_", ".",$Regs[1]); 

17.18 스팸 메시지 해제

MailWatch가 스팸 메시지를 다시 처리하지 않고 해제할 수 있도록 MailWatch/List 인터페이스에 127.0.0.1을 화이트리스트 항목으로 추가합니다. 이러한 옵션을 구성한 후 MailScanner를 재시작해야 합니다. 아래는 내 항목의 모습입니다.

| 127.0.0.1 | default | 삭제 |

17.19 메시지 작업에서 메시지를 여러 번 해제할 수 있도록 수정

/var/www/mailscanner/do_message_ops.php를 편집하고 다음과 같은 변경을 합니다:

   case 'F':
    $type='forget';
    break;
   case 'R':
    $type='release';
    break;
   default:
    continue;
    break;

그런 다음 다음 섹션을 찾아서 다음과 같이 변경합니다:

$itemnum = array($num);
   if ($type == 'release'){
      if($quarantined = quarantine_list_items($id,RPC_ONLY)) {
         $to = $quarantined[0]['to'];
       }
       echo "$id$type" . quarantine_release($quarantined, $itemnum, $to, RPC_ONLY) . "\n";
    } else {
     echo "$id$type" . quarantine_learn($items, $itemnum, $type, RPC_ONLY) . "\n";
     }
   }
  echo "\n";
      }
    }
  }
}
echo "  \n";

다음으로 /var/www/mailscanner/functions.php 파일을 편집하고 다음과 같이 변경합니다:

$fieldname[$f] = "Ops
S  H  F";

다음과 같이 변경합니다:

$fieldname[$f] = "Ops
S  H  F  R";

다음 변경:

array_unshift($row, "   "); 

다음과 같이 변경합니다:

array_unshift($row, "    "); 

다음으로 라디오 버튼을 처리하는 자바스크립트 함수 블록을 찾습니다. 세 번째 값을 다음과 같이 추가합니다:

echo "function SetRadios(p) {\n";
echo " var val;\n";
echo " if (p == 'S') {\n";
echo "  val = 0;\n";
echo " } else if (p == 'H') {\n";
echo "  val = 1;\n";
echo " } else if (p == 'F') {\n";
echo "  val = 2;\n";
echo " } else if (p == 'R') {\n";
echo "  val = 3;\n";
echo " } else if (p == 'C') {\n";
echo "  ClearRadios();\n";

이제 라디오 버튼의 텍스트를 추가합니다:

echo "  S";
echo "  H";
echo "  F";
echo "  R";

마지막으로 다음을 변경합니다:

echo "

S = Spam   H = Ham   F = Forget\n";

다음과 같이 변경합니다:

echo "

S = Spam   H = Ham   F = Forget   R = Release\n";

17.20 MailScanner 중지 시 자동 커밋 오류 수정

MailWatch.pm의 80번째 줄을 다음과 같이 편집합니다:

$dbh = DBI->connect("DBI:mysql:database=$db_name;host=$db_host", $db_user, $db_pass, {PrintError => 0, AutoCommit => 0}); 

*참고: 이렇게 하면 연결 시 자동 커밋이 꺼져서 닫을 때 커밋 라인이 오류를 발생시키지 않습니다.

18. SPF 설치 및 구성

postfix-policyd-spf-perl 패키지는 Mail::SPF 및 NetAddr::IP Perl 모듈에 의존합니다.

/usr/src/ 디렉토리에 postfix-policyd-spf-perl을 http://www.openspf.org/Software에서 다운로드하고 /usr/lib/postfix/ 디렉토리에 다음과 같이 설치해야 합니다:

cd /usr/src   
wget http://www.openspf.org/blobs/postfix-policyd-spf-perl-2.005.tar.gz   
tar xvfz postfix-policyd-spf-perl-2.005.tar.gz   
cd postfix-policyd-spf-perl-2.005   
cp postfix-policyd-spf-perl /usr/lib/postfix/policyd-spf-perl

그런 다음 /etc/postfix/master.cf를 편집하고 마지막에 다음 구문을 추가합니다:

policy unix - n n - - spawn
   user=nobody argv=/usr/bin/perl /usr/lib/postfix/policyd-spf-perl

(앞의 user=nobody에 있는 공백은 Postfix가 이 줄이 이전 줄에 속한다는 것을 알 수 있도록 중요합니다!)

그런 다음 /etc/postfix/main.cf를 열고 smtpd_recipient_restrictions 지시문을 검색합니다. 해당 지시문에 reject_unauth_destination이 있어야 하며, reject_unauth_destination 바로 뒤에 check_policy_service unix:private/policy를 다음과 같이 추가합니다:

[...]
smtpd_recipient_restrictions =
[...]
   reject_unauth_destination
   check_policy_service unix:private/policy
[...]

reject_unauth_destination 뒤에 check_policy_service를 지정하는 것이 중요합니다. 그렇지 않으면 시스템이 오픈 릴레이가 될 수 있습니다!

그런 다음 Postfix를 재시작합니다:

/etc/init.d/postfix restart

그게 전부입니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.