커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > 네트워크(network) > 메일 서버(mail) > 메일 필터링(스팸메일) / procmail 도움말
검색 : 사이트 WHOIS 웹서버 종류


  Qmail에 procmail을 붙여보자(스팸,바이러스방지) 작성일 : 2003/09/16 00:12
 
  • 글쓴이 : 이강우 ( http://koov.net/ )
  • 조회수 : 7718
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
     
    
    ==============================================================================
    제  목 : Qmail에 procmail을 붙여보자.
    작성일 : 2003-08-22
    마지막수정일 : 2003-09-08
    작성자 : 이강우(coolseed_AT_hotmail.com) http://koov.net
    
    ==============================================================================
    
    ----------------------------------------------------------------------
    우선 Qmail과 procmail이 있다는 가정하에 연동하여 스팸을 방지하고
    바이러스를 방지하는 법을 소개하겠습니다.
    
    # Procmail을 사용하는 이유?
    qmail-scan이나 mailscanner보다 속도가 빠르다고 합니다. 따라서 대용량 메일처리시
    유용하며 시스템 자원도 적게 든다고 합니다.
    (이부분에 있어서는 다른것과 비교를 해본적이 없으므로 확신할수는 없습니다.)
    
    목표 : procmail을 통하여 모든 사용자에게 가는 메일을
           한개의 설정파일(/etc/procmailrc)로 제어한다.
    
    준비 : Qmail (멋진 MTA). 그외에는 필요한게 없음.
    
    *Vpopmail같은 가상매니저를 설치한경우는 이곳에서 다루지 않음.
    *Qmail을 기본셋팅으로 설치하여 로컬계정을 이용하는 경우가 아니면 작동하지 않을수 있습니다.
    *필자의 경우 Qmail + Checkpassword + Daemontools만 설치한 상태에서 진행하였습니다.
    
    
    Qmail설치와 procmail설치는 다른 문서를 참조하시기 바랍니다.
    
    PS:레드햇 계열에서는 기본적으로 procmail이 설치되어있습니다.
    PS:hcode는 자료실에서 받아서 컴파일하시기 바랍니다.
    
    ----------------------------------------------------------------------
    
    우선 우리는 Qmail의 완벽한 셋팅법을 숙지할 필요가 있습니다.
    먼저 해당머신의 Qmail구동 스크립트를 아래와 같이 수정해야 합니다.
    
    /var/qmail/rc
    #!/bin/sh

    # Using splogger to send the log through syslog.
    # Using procmail to deliver messages to /var/spool/mail/$USER by default.
    # 위의 영문에 보면 procmail은 기본적으로 /var/spool/mail/$USER로 보낸다고 되어있습니다.
    # 이걸 우리는 ./Maildir/로 보내야 하기에 아래와같이 셋팅합니다.
    # 사실 /etc/procmailrc에서 다시한번 선언해주기 때문에 여기에서의 선언은 무의미하다고 볼수도
    # 있습니다. ^^

    exec env - PATH="/var/qmail/bin:$PATH" \
    qmail-start '|preline procmail -p -m /etc/procmailrc ./Maildir/' splogger qmail
    
    
    붉은 부분이 수정된 부분입니다.
    이 파일은 Qmail을 구동하는 가장 기본적인 파일로서 Qmail의 기본적인 셋팅을 담고 있습니다.
    위의 명령줄을 살펴보시면 procmail을 통해 /etc/procmailrc라는 룰을 이용하여 메일을
    제어하겠다고 선언되어있는것입니다.
    또한 Qmail에서 기본적으로 ./Maildir/을 사용하겠다고 선언한것도 보입니다.
    
    ####### 이 부분이 아주 중요합니다. ###
    # 일반적으로 Qmail을 처음설치하시거나 설정을 잘 모르시는분들께서는 rc파일에 이와같이 설정해놓고
    # 별도로 사용자 디렉토리에 .qmail 파일을 생성하고 내용에 ./Maildir/ 을 추가하시는분들이 있습니다.
    # 이런경우는 중복설정이 되기때문에 엉뚱한 결과가 생기게 됩니다.
    # 메일이 procmail에 의해 필터링 되지 않고 바로 ./Maildir/로 들어가게 되지요. :(
    # 따라서 rc파일에 위와같이 ./Maildir/을 선언해준경우에는 별도로 사용자 디렉토리에 .qmail파일을 생성할
    # 필요가 없습니다. 또한 procmail로 걸러주기 위해서는 반드시 없어야 합니다.
    
    이렇게 설정해주고 모든 사용자 홈의 .qmail의 내용중 ./Maildir/이라고 된 줄을 없애야 합니다.
    다른사용자로 리다이렉션 하기위한 설정은 놔두셔도 무방합니다.
    다시 말씀드리지만 사용자 홈디렉토리의 .qmail파일안에 ./Maildir/이라는 내용이 있을경우
    procmail을 무시하고 메일이 전달됩니다.
    
    
    이제 설정파일을 만들차례이다. 그전에 우리에게 필요한 유틸이 있는데 그것은 바로
    formail과 hcode라는 유틸이다. formail은 qmail에 포함되어있으므로 상관 없지만
    hcode는 소스를 가져다가 컴파일 해야 한다. 자료실에서 소스를 받아다 컴파일하자
    $ make
    $ cp hcode /var/qmail/bin
    
    그리고 아래와같은 전체사용자 설정파일을 작성한다.
    ## (그대로 복사해서 만들면 된다.)
    /etc/procmailrc
    MAILDIR=$HOME/Maildir/
    DEFAULT=$MAILDIR
    # Maildir(qmail) 형식의 폴더는 맨뒤에 /를 붙여주어야한다.(man procmailrc)

    LOCKFILE=$HOME/.lockmail
    LOGFILE=/var/log/qmail/procmail
    # 로그파일의 경우 퍼미션을 777로 줘야한다. 왜냐하면 로그를 하는 프로세스의 소유과 그룹이
    # 해당 메일의 소유자로 만들어지기 때문이다. 따라서 모든 메일에 대한 로그를 적어야 하기 때문에
    # 권한을 777로 줘야 한다. :(
    # 보안상 조금 문제가 있을수도 있는 부분이다.

    ################################################################################
    # 스팸메일 필터링 룰 #
    ################################################################################

    ################################################
    # 인코드되어 날아오는 헤더를 디코드 하는 부분. #
    ################################################
    :0 Efhw
    *^(Subject|From|Cc):.*=\?EUC-KR\?(B|Q)\?
    |formail -c | /var/qmail/bin/hcode -dk -m

    :0 Efhw
    *^(Subject|From|Cc):.*=\?ks_c_5601-1987\?(B|Q)\?
    |formail -c | /var/qmail/bin/hcode -dk -m

    :0 Efhw
    *^(Subject|From|Cc):.*=\?KSC5601\?(B|Q)\?
    |formail -c | /var/qmail/bin/hcode -dk -m

    :0 Efhw
    *^(Subject|From|Cc):.*=\?ISO-8859-1\?(b|B|Q)\?
    |formail -c | /var/qmail/bin/hcode -dk -m

    # Body의 파일명 디코딩
    :0 BfHw
    *^*.filename=.*=\?euc-kr\?(B|Q)\?
    |formail -c | /var/qmail/bin/hcode -dk -m

    ### 디코딩 끝

    #######################
    # 광고, 스팸메일 제거 #
    #######################
    :0
    *^Subject: .*(\{광|\[광|\(광|포르노|포X노|광고|광\ 고|홍보|광-고|성인|광1고|廣告|sex|SEX)
    /dev/null # 널로 보내버린다. 로그로 남기고 싶으면 아래줄처럼 한다.
    #/var/log/qmail/spam

    ######################
    # 바이러스 메일 제거 #
    ######################
    :0 BH
    *^*.filename=.*(\.pif|\.scr|\.lnk)
    /dev/null # 널로 보내버린다. 로그로 남기고 싶으면 아래줄처럼 한다.
    #/var/log/qmail/virus

    :0
    *^Subject: .*(Return|Thank|Wicked|Detail|Approved|application|Delivery|movie)
    /dev/null

    ## 새로운 바이러스 탐색
    :0 BH
    *^*.filename=.*(height.exe|nerosys.exe)
    /var/log/qmail/virus
    # 모든 필터링 룰은 순차적으로 적용이 된다.
    # 즉 위쪽에 있는 필터링 룰 일수록 먼저 필터링 대상이된다.
    ################################################################################
    
    여기까지가 설정파일의 끝입니다만 이건 극히 일부분을 이용한것에 불과합니다.
    더욱더 많은 설정을 원하신다면 다른 문서를 참조하시거나 
    $ man procmailrc
    
    로 옵션을 살펴보시면 되겠습니다.
    *** 위의 설정파일은 파일명 디코딩 패치를 한 hcode를 적용한것입니다.
    *** 파일명 디코딩 패치를 하지 않은 hcode로는 정상작동 하지 않을수도 있습니다.
    
    $ chmod 777 /var/log/qmail/spam
    $ chmod 777 /var/log/qmail/virus
    
    이 두화일의 권한은 모두 쓰기옵션이 되어있어야 합니다.
    위의 로그화일과 마찬가지로 메일소유주의 권한으로 작성이 되기 때문입니다.
    별로 필요하거나 중요한 파일이 아니므로 777로 주셔도 무방합니다.
    또한 이 파일로 리다이렉션되는걸 원치 않으시는분은
    
    /dev/null
    
    로 모두 보내는 방법도 있습니다. (깔끔해욧!!)
    
    자 이제 Qmail을 다시 구동시키시면 스팸메일과 바이러스 메일이 죄다 걸러지는것을 볼수 있습니다.
    
    #!. 마치며
    온라인상에서 쓰는거라 어리숙하지만 나중에 차차 수정하여 보완하도록하겠으며 문의사항이나
    버그, 또는 더 좋은 정보가 있으면 아래 연락처로 메일주시면 감사하겠습니다.
    모두 행복하십시요.
    
    ==============================================================================
    작성일 : 2003-08-22
    마지막수정일 : 2003-09-08
    작성자 : 이강우(coolseed_AT_hotmail.com) http://koov.net
    ==============================================================================
    
      커피닉스 카페 최근 글
    [08/25] #gpt_question_subje
    [08/20] From what I've seen
    [08/14] сайт
    [06/16] [질문]SAN 스위치 브로드케이드 dcx8510-4 장비관련입니다.
    [04/22] Re: 영화속에 컴퓨터 이야기 ~스워드피쉬(2001)
    [10/20] Cross Compiler 깔
    [07/14] SSL АО
    [04/26] Re: 도스화면 원격조종 여부
    [04/25] 도스화면 원격조종 여부
    [10/30] Cshell에서 난수 설정
    [10/23] 공항철도주식회사 SE 구인 件
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~