반응형

-- 기존 qmail-remote를 qmail-remote-org로 이름변경
$  mv /var/qmail/bin/qmail-remote /var/qmail/bin/qmail-remote-org

-- qmail-remote perl script파일을 다음과 같이 만들자.
$ vi /var/qmail/bin/qmail-remote
/** --------------------------------------------------------------------------------- **/
#!/usr/bin/perl

# 스탠다드 입력으로 메일 내용을 읽어들인다.
undef $/;
$inputdata = <STDIN>;
$/ = "\n";
$inputdata =~ /Subject: (.*)/;
$subject = $1;
$inputdata =~ /Received: from.*\(([0-9.]+)\)/;
$ip = $1;

# 시간을 구한다.
$now_string = localtime;

# 로그를 기록한다.
open FH, ">>/var/log/qmail-remote.log";
flock(FH,2);
print FH "\n===================================================================";
print FH "\nARGV[0]:$ARGV[0]\nARGV[1]:$ARGV[1]\nARGV[2]:$ARGV[2]";
print FH "\n$now_string\nIP:$ip\nTo:$ARGV[2]\nFrom:$ARGV[1]\nSubject:$subject\n";
close FH;

# 특정 제목이면 보내지도 않고 보냈다고 에러코드를 리턴하고 종료한다.
if ($subject =~ /^\s*(광고|대출|뽈노)\s*\s+/i) { #광고성 제목의 메일 pass
    exit 1;
}

if ($ARGV[1]=~ m/root@windows.or.kr/) {
    exit 1;
}
if ($ARGV[1]=~ m/postmaster@windows.or.kr/) {
    exit 1;
}
if ($ARGV[1]=~ m/anonymous@windows.or.kr/) {
    exit 1;
}


if ($ARGV[2]=~ m/anonymous@windows.or.kr/) {
    exit 1;
}
if ($ARGV[2]=~ m/root@windows.or.kr/) {
    exit 1;
}
if($ip =~ m/Cron/)      {    # 크론이 메일을 발송하는 경우 Cron으로 시작하는 ip값을 가지는 것도 있으니 추가
    exit 1;
}

#if($ARGV[1] =~ /\s*(?:root|postmaster|anonymous|)\s*/i)
#{
#exit 1;
#}
#if($ARGV[2] =~ /\s*(?:root|postmaster|anonymous|)\s*/i)
#{
#exit 1;
#}

# 원래 qmail-remote 프로그램을 실행시킨다.
open (MAIL, "| /var/qmail/bin/qmail-remote-org $ARGV[0] $ARGV[1] $ARGV[2]");
print {MAIL} $inputdata;
close MAIL;
/** --------------------------------------------------------------------------------- **/
                                                        

설명)
바운싱이나 더블바운싱이 되는 원리는.
역시 없는 메일로 보낸 메일의 리턴때문이다.
postmaster, root, anonymous 등의 메일이 from:이나 to:에 들어가므로 파라메터로 들어오는
ARGV[1]. ARGV[2]에서 검사후 강제 종료시켜버리면
/var/qmail/queue/mess에 남아 꾸준히 발송하여 프로세스를 잡아먹는 현상을 방지 할 수 있다.
반응형

'Tip & Tech > Linux | Unix' 카테고리의 다른 글

qmail control 파일들  (0) 2010.10.20
ld.so.conf 사용법  (0) 2010.10.20
qmail 관련 명령어들.  (0) 2010.10.20
Java 2 SDK, Standard Edition, v. 1.4.2 Installation Notes  (0) 2010.10.20
RHEL 관련 java, javac가 gij* 라면  (0) 2010.10.20

+ Recent posts