procmail은 메일 처리 도구다. procmail은 메일 필터링을 도와준다. 메일을 발신자, 제목, 메시지 길이, 메시지의 주요 단어들 등에 따라 분류한다.
스팸차단 등에 활용가능하다.
mmencode를 이용하여 quoted-printable이나 base64등으로 encodeing된 메일을 디코딩할수 있으며 formail툴을 이용하여 메일헤더등의 메일형식을 바꿀 수 있다.
1 처방(recipes)의 형식 #
:0 [flag] [ : [locallockfile] ] <zero or more conditions (one per line)> <exactly one action line>
2 flag #
- H : 헤더 검색(egrep) (디폴트)
- B : 본문 검색(egrep)
- D : egrep 정규식에서 대소문자 구분(디폴트=구분 안함)
- A : 이전 처방이 참이 아니면 이 처방을 실행하지 않는다.
- E : 이전 처방이 실행되지 않았을 경우 실행됨(= else if)
- e : 이전 처방이 실패한 경우 실행됨
- h : 헤더를 파이프나 파일, 메일로 보냄(디폴트)
- b : 본문을 파이프나 파일, 메일로 보냄(디폴트)
- f : 파이프를 필터로 간주
- c : 현재 메일의 복사본(carbon copy)을 생성. 이 처방은 delivering 처방에서만 유효하다. non-deliverying모드에서 이 처방이 유효한 경우는 중첩된 블록(nesting block)상태이다.
- w : 필터나 프로그램이 작업을 종료하고 그의 exitcode를 체크한다.(보통은 무시) 만일 필터가 실패로 끝나면 텍스트에 필터가 적용되지 않는다.
- W : w 와 같으나 'Program failure'라는 메시지를 무시한다.
- i : 쓰기에러(write errors)를 무시한다.
- r : Raw mode로 작동하며 메일이 빈줄(empty line)으로 끝나는 것을 체크하지 않는다.
3 정규식과 다른 의미의 flags #
- ! : 조건의 부정(not condition)
- $ : 이 조건문뒤에 나오는 식을 따옴표(double quotes)안에 있는 sh(1) 방식으로 대체할지를 평가한다.
- ? : 사용하는 프로그램의 exitcode를 사용한다.
- < : 메일의 길이가 지정된 바이트 크기보다 작은지 검사한다.
- > : 메일의 길이가 지정된 바이트 크기보다 큰지 검사한다.
4 procmailrc 테스트 #
# cat /etc/procmailrc LOGFILE=/var/log/procmail VERBOSE=no #LOGABSTRACT=no PATH=/usr/local/bin:/usr/bin:/bin SHELL=/bin/sh :0 H * ^Subject:.*PROC_TEST /var/log/procmail.spam
--> 이렇게 하면 procmail로그는 /var/log/procmail 에 쌓이고 제목에 PROC_TEST라는 단어가 들어간 경우 /var/log/procmail.spam에 쌓이게 된다.
ProcMailSample1 : procmailrc 파일 예제
6 내 /etc/procmailrc #
LOGFILE=/XXX/log/XXX/procmail VERBOSE=yes #LOGABSTRACT=no PATH=/usr/local/bin:/usr/bin:/bin SHELL=/bin/sh # for spamassassin #DROPPRIVS=yes #:0fw #| /usr/bin/spamc #test #:0 EH: #* !(^Subject: ..., ([0-9]| [0-9]|[0-9][0-9]) ... [0-9][0-9][0-9][0-9] ([0-9]| [0-9]|[0-9][0-9]):) #/dev/null # 날짜가 잘못된 건 걸러내기 :0 H: #* !(^Date: ..., [0-9][0-9] ... [0-9][0-9][0-9][0-9] [0-9][0-9]:) #* !(^Date: ..., [0-9]*[0-9] ... [0-9][0-9][0-9][0-9] [0-9][0-9]:) #* !(^Date: ..., ([0-9]| [0-9]|[0-9][0-9]) ... [0-9][0-9][0-9][0-9] ([0-9]| [0-9]|[0-9][0-9]):) * !(^Date: ..., ([0-9]| [0-9]|[0-9][0-9]) ... (20[0-2][0-9]|[0-2][0-9]) ([0-9]| [0-9]|[0-9][0-9]):) /dev/null # 제목이 없는 메일 :0 H: * !(^Subject:.*) /dev/null :0 H: * ^Subject:.*(비.*아.*그.*라|비.*그라|시.*리.*스) /dev/null :0 H * ^Subject:.*흥.*분.*제 { :0 B: * myhome.naver /dev/null } #### 대출 :0 H: * ^From:.*(하이론) /dev/null :0 H: * ^Reply-To:.*(titash@freechal.com) /var/log/procmail/procmail.spam :0 H: * ^From:.*((비즈|이지|인터|인포|카드|패스|해피)론|임철수|대.*출) * ^Subject:.*(대.*출|한.*도|현.*금.*(써|서).*비.*스|금.*리|패.*스.*론|통.*장.*입.*금|최.*고.*천.*만) /dev/null :0 H: * ^Subject:.*ㄷ.*ㅐ.*출 /dev/null :0 * ^Subject:.*대.*츌 /dev/null :0 * ^Subject:.*돈 * ^Subject:.*처리 { :0 B # 대출 * =B4=EB=C3=E2 # 신용 * =BD=C5=BF=EB /var/log/procmail/procmail.spam } :0 * ^Subject:.*(대.*출|한.*도|상.*환|이.*율|이.*률|송.*금|천.*만|입.*금|금리|현.*금) { :0 B: * (my.netian.com|(home|hompyfile).(paran|%70%61r%61%6e|%70%61%52%61%6e).com|onvbcxc.2v3.cn|%39%36%32%36%35.%6e%65%74) /dev/null } :0 B * (woaldltek.w3ip.co.kr|h%6f%68om%61%4a%41.com|agzrichgky@naver.com) /dev/null :0 * ^Subject:.*(cre.*dit) { :0 B: * colidemb.com /dev/null } :0 * (^Subject:.*송금|^From:.*(하영란|이민희)) { :0 B # 대출 * =B4=EB=C3=E2 /var/log/procmail/procmail.spam } :0 * (^Subject:.*금리) { :0 B # 대.*출 * =B4=EB.*=C3=E2 # 한도 * =C7=D1=B5=B5 # 신용 * =BD=C5=BF=EB /var/log/procmail/procmail.spam } :0 * ^Subject:.*론 { :0 B * 111n.com # 대.*출 * =B4=EB.*=C3=E2 # 신용 * =BD=C5=BF=EB } :0 H: * ^Subject: *(\(.*광.*고.*\)|\[.*광.*고.*\]) /dev/null :0 H: * ^Subject: *강.*간.*동.*영.*상 /dev/null :0 H * ^Subject:.*계.*좌.*입.*금 { :0 B: * .*(oeiwiow\.pr\.to) /var/log/procmail/procmail.spam } :0 H * ^Subject:.*코털 { :0 B: * korjitee43.com /dev/null } :0 H * ^Subject:.*현.*금 { :0 B: * wangjackpot.com /dev/null } :0 H: * ^From:.*hypert211s@hanmail.net /dev/null :0 B * (8282gogo@gmail.com|my\.%6e%45t%69%41%6e\.com/%7Ejungmeod9|my.%6e%45ti%61n.com/%7Enooknook|ahjetr.servehttp.com|chg.serveftp.com|%79%61%68%6f%6f.%6d%69%73%65%63%75%72%65.%63%6f%6d|kjhkk.redirectme.net|hompyfile.%70%61%52%61%6e.com|vita.kyed.com|www.%73%4fm%41%63%54%68.com|hompyfile.%50a%52%41%4e.com|defasuhekinmadin.com|greptimeloans.com|5656fy.com|ps-power.trickip.ORG|hompyfile.%50%41ra%4e.com/MINIHOME_138595|%50r%65%73%68%4f%4d%65.net|fjiasjedfs.com|hld114.com|misdfs.111n.com|대출) /dev/null #:0 #* ^Content-Type: *text/plain #{ # :0 fbw # * ^Content-Transfer-Encoding:.*quoted-printable # | mmencode -u -q # # :0 Afhw # | formail -I "Content-Transfer-Encoding: 8bit" # # :0 fbw # * ^Content-Transfer-Encoding: *base64 # | mmencode -u -b # # :0 Afhw # | formail -I "Content-Transfer-Ecoding: 8bit" #} # 영문spam :0 * ^From:.*01.com { :0 B * Regenisis * HGH /var/log/procmail/procmail_eng.spam }