2009년 5월 28일 목요일

Qmail Double Bounce 처리법 (Qmail-remote 인터셉트)

qmail에서 failure notice 라는 제목으로 스팸 메일이 mailq에 자꾸 쌓여 리턴되는경우 대처법.

qmail에는 double bounce라는 효과적인 방법이 있지만 그방법으로 되지않을경우에는

qmail-remote 파일을 perl로 스크립트해서 1차적인 방법으로 막고  정상적인 qmail-remote를 실행하는 방법이다.

 

이방법을 QMAIL-REMOTE 인터셉트라고 한다.


- 발송을 담당하는 Qmail-remote 를 가로채 발송 직전 메일 헤더를 통해
Return Mail 을 SMTP 단에서 DROP 시킨다.

1. Qmail 발송 Log 생성

[/var/log] echo > qmail-remote.log
[/var/log] chmod 666 qmail-remote.log
[/var/log] chown qmailr.qmail qmail-remote.log

2. 원본 remote 파일 변경

[/var/qmail/bin] cp -a qmail-remote qmail-remote-org

: -a 옵션으로 동등한 소유권, 허가권을 가지고 가야 함

3. Script 작성

#!/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);

# 반송메일을 드롭한다.
if ($subject =~ /(failure notice)/i) {
    $inputdata =~ /(no mailbox here by that name)/i;
    if ($1 eq "no mailbox here by that name") { // 없는유저일경우
        print FH "$now_string\tIP:$ip\tTo:$ARGV[2]\tFrom:$ARGV[1]\tDroped!!(NoUser) Subject:$subject\n";
        close FH;
        exit 2;
    } else {
        print FH "$now_string\tIP:$ip\tTo:$ARGV[2]\tFrom:$ARGV[1]\tSubject:$subject - Other\n";
        close FH;
    }
} else {
    print FH "$now_string\tIP:$ip\tTo:$ARGV[2]\tFrom:$ARGV[1]\tSubject:$subject\n";
    close FH;
}

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

 

4. Qmail 서비스 중지.

[/etc/rc.d/init.d] ./qmaild stop

5. Qmail-remote 파일 바꿔치기 및 퍼미션 변경

[/var/qmail/bin] cp test qmail-remote (OverWirte ?? Yes )
[/var/qmail/bin] chmod 655 qmail-remote
[/var/qmail/bin] chown root.qmail qmail-remote

6. 정상 작동 확인법.

1) ps -aux : qmail-remote 프로세스 확인
2) [/var/log] qmail-remote.log : log 확인
3) [/var/qmail/bin] qmail-qstat : Queue 상태확인
4) 직접 메일 발송 후 이상여부 확인

참고 자료 : http://home.netizen.ne.kr/board/read.php3?uid=225&code=_tip

                 http://qmail.kldp.org/phpbb/viewtopic.php?t=6525

댓글 없음:

댓글 쓰기