http://procmail.episode.co.kr/
테스트 환경: SULinux 1.5
procmail은 센드메일이 설치되어 있는 서버라면 거의 대부분 함께 설치되어 있으니 그대로 사용하면 됨
[root@digimoon ~]# rpm -qa | grep procmail
procmail-3.22-14.1.el4
[root@digimoon ~]# rpm -qa | grep sendmail
sendmail-cf-8.13.1-3.2.el4
sendmail-8.13.1-3.2.el4
[root@digimoon ~]#
procmail-3.22-14.1.el4
[root@digimoon ~]# rpm -qa | grep sendmail
sendmail-cf-8.13.1-3.2.el4
sendmail-8.13.1-3.2.el4
[root@digimoon ~]#
sendmail, procmail이 제대로 설치/연동되었지 확인
[root@digimoon ~]# cat /etc/mail/sendmail.mc | grep procmail
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
MAILER(procmail)dnl
[root@digimoon ~]#
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
MAILER(procmail)dnl
[root@digimoon ~]#
procmail로 한글 스팸메일을 걸러내려면 hcode와 같은 디코딩 프로그램이 필요(sendmail과 같은 MTA는 영어권 바이트 문자열로 메일을 송수신하기 때문에 한글 메일은 procmail과 같은 MDA로 디코딩을 해서 한글로 변환한 뒤 검사하여 필터링해야 하며 이를 위해 hcode가 필요)
아래 링크의 게시물에 첨부된 hcode_2.1m3_tab_ksc_qp.zip 파일을 받아 압축 푼 뒤 설명을 보며 source rpm으로 설치해도 되고 hcode-2.1m3-tab_ksc_qp.i686.rpm 파일로 간편하게 설치해도 됨
http://procmail.episode.co.kr/bbs/view.php?id=data&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=1
[root@digimoon ~]# rpm -Uvh hcode-2.1m3-tab_ksc_qp.i686.rpm
준비 중... ########################################### [100%]
1:hcode ########################################### [100%]
[root@digimoon ~]#
준비 중... ########################################### [100%]
1:hcode ########################################### [100%]
[root@digimoon ~]#
hcode가 제대로 설치되어 있는지 확인하기 위해 아래와 같이 디코딩 테스트 실시
아래와 같이 A.txt, B.txt, C.txt, E.txt 파일을 준비하고...
[root@digimoon ~]# cat A.txt
=?ks_c_5601-1987?B?saSw7Q==?=
[root@digimoon ~]# cat B.txt
Subject: =?ks_c_5601-1987?B?waa48cDMILHmsNQgwaa48cDMILHmsNQgwaa48cDMILHm?=
=?ks_c_5601-1987?B?sNQgwaa48cDMILHmsNQgwaa48cDMILHmsNQgwaa48cDMILHmsNQg?=
=?ks_c_5601-1987?B?waa48cDMILHmsNQgwaa48cDMILHmsNQgwaa48cDMILHm?=
=?ks_c_5601-1987?B?sNQgwaa48cDMILHmsNQg?=
[root@digimoon ~]# cat C.txt
Subject: =?ks_c_5601-1987?B?xde9usauxde9usauxde9usauxde9usauxde9usauxde9ug==?=
=?ks_c_5601-1987?B?xq7F1726xq7F1726xq7F1726xq7F1726xq7F1726xq7F1w==?=
=?ks_c_5601-1987?B?vbrGrsXXvbrGrg==?=
[root@digimoon ~]# cat E.txt
Subject: =?ks_c_5601-1987?B?xde9usauxde9usauxde9usauxde9usauxde9usauxde9usauxde9?=
=?ks_c_5601-1987?B?usauxde9usauxde9usauxde9usauxde9usauxde9usauxde9usau?=
[root@digimoon ~]#
=?ks_c_5601-1987?B?saSw7Q==?=
[root@digimoon ~]# cat B.txt
Subject: =?ks_c_5601-1987?B?waa48cDMILHmsNQgwaa48cDMILHmsNQgwaa48cDMILHm?=
=?ks_c_5601-1987?B?sNQgwaa48cDMILHmsNQgwaa48cDMILHmsNQgwaa48cDMILHmsNQg?=
=?ks_c_5601-1987?B?waa48cDMILHmsNQgwaa48cDMILHmsNQgwaa48cDMILHm?=
=?ks_c_5601-1987?B?sNQgwaa48cDMILHmsNQg?=
[root@digimoon ~]# cat C.txt
Subject: =?ks_c_5601-1987?B?xde9usauxde9usauxde9usauxde9usauxde9usauxde9ug==?=
=?ks_c_5601-1987?B?xq7F1726xq7F1726xq7F1726xq7F1726xq7F1726xq7F1w==?=
=?ks_c_5601-1987?B?vbrGrsXXvbrGrg==?=
[root@digimoon ~]# cat E.txt
Subject: =?ks_c_5601-1987?B?xde9usauxde9usauxde9usauxde9usauxde9usauxde9usauxde9?=
=?ks_c_5601-1987?B?usauxde9usauxde9usauxde9usauxde9usauxde9usauxde9usau?=
[root@digimoon ~]#
디코딩 테스트
[root@digimoon ~]# hcode -dk -m A.txt
광고
[root@digimoon ~]# hcode -dk -m B.txt
Subject: 제목이 길게 제목이 길게 제목이 길
게 제목이 길게 제목이 길게 제목이 길게
제목이 길게 제목이 길게 제목이 길
게 제목이 길게
[root@digimoon ~]# hcode -dk -m C.txt
Subject: 테스트테스트테스트테스트테스트테스
트테스트테스트테스트테스트테스트테
스트테스트
[root@digimoon ~]# hcode -dk -m E.txt
Subject: 테스트테스트테스트테스트테스트테스트테싱?욈??
뵈?謬뵈?謬뵈?謬뵈?謬뵈?謬뵈?謬뵈??욈??
[root@digimoon ~]#
광고
[root@digimoon ~]# hcode -dk -m B.txt
Subject: 제목이 길게 제목이 길게 제목이 길
게 제목이 길게 제목이 길게 제목이 길게
제목이 길게 제목이 길게 제목이 길
게 제목이 길게
[root@digimoon ~]# hcode -dk -m C.txt
Subject: 테스트테스트테스트테스트테스트테스
트테스트테스트테스트테스트테스트테
스트테스트
[root@digimoon ~]# hcode -dk -m E.txt
Subject: 테스트테스트테스트테스트테스트테스트테싱?욈??
뵈?謬뵈?謬뵈?謬뵈?謬뵈?謬뵈?謬뵈??욈??
[root@digimoon ~]#
마지막으로 필터링 레시피 작성해야 하나 레시피 문법을 당장 공부해서 적용하기가 곤란하다면 아래 링크에서 procmailrc 샘플 파일을 받아다 /etc/procmailrc 파일로 저장하고 sendmail 리스타트하면 끝
http://procmail.episode.co.kr/bbs/view.php?id=procmailrc&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=18
위 샘플은 스팸메일을 무조건 /dev/null로 보내버리는 것이라 반송 처리를 하고 싶거나 스팸 표시 머릿말 등을 달아 주려면 몇 가지의 수정이 더 필요함.
레시피 문법 자료는 아래 링크에서 구할 것.
http://procmail.episode.co.kr/
작동 테스트는 /var/log/procmail 에 로그가 남는지 확인(로그파일이 없으면 만들어주고 sendmail 리스타트).
메일제목을 '직장인 9급 공무원'으로 하고 메일을 보내보면 아래와 같이 로그가 남는데 붉은색으로 굵게 표시된 부분이 블록코드(필터링사유)이다.
참고로 /var/log/procmail 로그파일의 퍼미션은 other에게 쓰기 권한이 있어야 하므로 606 퍼미션을 부여한다.
[root@digimoon etc]# tail -f /var/log/procmail
[2009-02-08 17:32] [Blk202] /var/mail/digimoon 직장인 9급 공무원
[2009-02-08 17:32] [Blk202] /var/mail/digimoon 직장인 9급 공무원