반응형
-- 기존 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 |