Ä¿ÇǴнº, ½Ã½ºÅÛ ¿£Áö´Ï¾îÀÇ ½°ÅÍ Ä¿ÇÇÇâÀÌ ³ª´Â *NIX
Ä¿ÇǴнº
½Ã½ºÅÛ/³×Æ®¿÷/º¸¾ÈÀ» ´Ù·ç´Â °÷
* HanIRCÀÇ #coffeenix ¹æ
[ Àåºñ ¹× ȸ¼± ÈÄ¿ø ]
HOME > ³×Æ®¿öÅ©(network) > ¸ÞÀÏ ¼­¹ö(mail) µµ¿ò¸»
°Ë»ö : »çÀÌÆ® WHOIS À¥¼­¹ö Á¾·ù

¸ÞÀÏ ÇÊÅ͸µ(½ºÆÔ¸ÞÀÏ) / procmail (14, ±Û 18, ÀÚ·á 8)

  procmail°ú perl·Î ¸ÞÀϼö½Å·Î±×¸¦ DB¿¡ ³²±â±â ÀÛ¼ºÀÏ : 2004/01/16 13:20
 
  • ±Û¾´ÀÌ : ÁÁÀºÁøÈ£ ( http://coffeenix.net/ )
  • Á¶È¸¼ö : 11634
          [ ÀÌÀüÈ­¸é / ¼öÁ¤ ]   ºñ¹Ð¹øÈ£ :     Àμâ¿ë È­¸é
      Á¦  ¸ñ : procmail°ú perl·Î ¸ÞÀϼö½Å·Î±×¸¦ DB¿¡ ³²±â±â
    ÀÛ¼ºÀÚ : ÁÁÀºÁøÈ£(truefeel, http://coffeenix.net/ )
    ÀÛ¼ºÀÏ : 2004.1.15(¸ñ)
    ¼öÁ¤ÀÏ : 2004.1.18(ÀÏ) DB ½ºÅ°¸¶ ¼öÁ¤, mail_log.pl¿¡¼­ ÀÛÀºµû¿ÈÇ¥(')ó¸®

    ¸ÞÀÏ ÄõÅÍ(ÆÄÀϽýºÅÛ ÄõÅͳª milterAPI¸¦ ÀÌ¿ëÇÏÁö ¾Ê°í ¼ø¼ö procmail+perl·Î¸¸À¸·Î
    ±¸ÇöÇÒ·Á´Â Áøº¸ÀûÀÎ(?) ÄõÅÍ)¸¦ À§ÇØ ¸¸µå´Â °úÁ¤¿¡¼­ ¼ö½Å Á¤º¸°¡ ÇÊ¿äÇß°í, ÀÌ
    ¼ö½ÅÁ¤º¸¸¦ DB·Î ³²°Üµµ ÁÁ°Ú´Ù´Â »ý°¢À» ÇϰԵǾú´Ù.
    Áï, ´Ü¼øÈ÷ °ç´Ù¸®·Î ³ª¿Â °ÍÀÌÁö¸¸ ¾µ¸¸ÇÏ´Ù ½Í¾î(?) Á¤¸®ÇÏ¿© ¼Ò°³ÇÑ´Ù.

    1. µé¾î°¡±â

    1) DB·Î ³²±â¸é ¹¹°¡ ÁÁÀº°¡?

      - Åë°è󸮰¡ ½±°Ô °¡´ÉÇÏ´Ù.
        ¿ù ¸îÅëÀÇ ¸ÞÀÏÀ» ¹Þ´Â ¼­¹öÀÎÁö COUNT(*)¸¸À¸·Î ½±°Ô È®ÀÎÇÒ ¼ö ÀÖ´Ù.
      - ¼ö½ÅÀÚº°·Î ¸ÞÀÏ ¼ö½Å ¸ÞÀÏ Åë¼ö Åë°è¸¦ º¼ ¼ö ÀÖ´Ù. (¼ö½ÅÀÚº° GROUP BY ·Î °¡´É)
      - ¸ÞÀÏ Á¦¸ñÀ» ÅëÇØ ÇÊÅ͸µÇÒ ½ºÆÔ ¸ÞÀÏ ¼³Á¤À» ½±°Ô µµ¿ÍÁØ´Ù.
      -  SUM(MAIL_SIZE)¸¦ ÀÌ¿ëÇÏ¸é ¿ùº° ¸ÞÀÏ ¼ö½Å¿ë·®(Çì´õ Á¦¿Ü)À» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

    2) ¾î¶² ·Î±×¸¦ ³²±â´Â°¡?

      - ¸ÞÀÏ ¼Û½ÅÀÚ ¸ÞÀÏÁÖ¼Ò¿Í À̸§
      - ¸ÞÀÏ ¼ö½ÅÀÚ ID
      - ¸ÞÀÏ Á¦¸ñ
      - º»¹® ±æÀÌ (´ÜÀ§ byte)
      - ¼Û½ÅÇÑ ÀϽà (Á¤È®È÷´Â DB¿¡ ·Î±×¸¦ ³²±ä ÀϽÃÀ̳ª ½Ã°£»óÀÇ Â÷ÀÌ´Â °ÅÀÇ ¾ø´Ù.)

    3) °úÁ¤À» ÀÌÇØÇغ¸ÀÚ.

      sendmail, qmail µî¿¡¼­ ¸ÞÀÏÀ» ¼ö½ÅÇϸé MDAÀÎ procmail·Î ³Ñ°ÜÁØ´Ù.
      -> /etc/procmailrc ¿¡¼­ ¸ÞÀÏ Á¦¸ñ µðÄÚµùÀ» ÇÑ´Ù.  (procmail¿¡¼­)
      -> ¼Û½ÅÀÚ, ¼ö½ÅÀÚ, Á¦¸ñ, ±æÀÌ µîÀ» ¾ò¾î³»¾î º¯¼ö¿¡ ÀúÀåÇÑ´Ù. (procmail¿¡¼­)
      -> ¾ò¾î³½ °ªÀ» mail_log.pl ·Î ³Ñ°ÜÁØ´Ù. (procmail¿¡¼­)
      -> DB·Î ÀúÀåÇÑ´Ù. (mail_log.pl¿¡¼­)

    2. ¿ä±¸ »çÇ×

    1) DB´Â MySQLÀ» »ç¿ëÇÑ´Ù.
       ¿À¶óŬµµ »ó°ü¾ø´Ù. ±×°Ô ¹Ù·Î Perl DBI¸ðµâÀÇ ÀåÁ¡ÀÌ´Ù.

    2) Perl°ú Perl DBI, DBD ¸ðµâÀÌ ÇÊ¿äÇÏ´Ù.
       ÆÞÀÇ ÀúÀåâ°í¶ó ºÒ¸®´Â CPAN( http://www.perl.com/CPAN-local/ )¿¡¼­
       DBI, DBD ¸ðµâÀ» ±¸ÇÒ ¼ö ÀÖ´Ù.
       Âü°í·Î ·¹µåÇÞ 9¿¡¼­´Â rpmÀ¸·Î Á¦°øµÈ´Ù.

       http://www.perl.com/CPAN-local/authors/id/T/TI/TIMB/DBI-1.40.tar.gz
       http://www.perl.com/CPAN-local/authors/id/J/JW/JWIED/DBD-mysql-2.1028.tar.gz

       ¸ÕÀú DBIÀ» ´ÙÀ½°ú °°Àº °úÁ¤À¸·Î ¼³Ä¡ÇÏ°í ¶È±ùÀÌ DBD-mysqlµµ ¼³Ä¡ÇÏ¸é µÈ´Ù.
       ±âÁ¸¿¡ ¼³Ä¡µÈ °ÍÀ» »ç¿ëÇßÀ¸¹Ç·Î, À§¿¡ ¸µÅ©ÇÑ ¼Ò½º·Î ÄÄÆÄÀÏÇßÀ» ¶§ ¹®Á¦°¡
       ¹ß»ýÇÏ´ÂÁö¿¡ ´ëÇؼ­´Â È®ÀÎÇØÁÙ ¼ö ¾ø´Ù.
        
     
       # perl Makefile.PL
       # make
       # make test
        (²À ÇÒ ÇÊ¿ä´Â ¾ø´Ù. Á¤»ó µ¿ÀÛÇÏ´Â °ÍÀÎÁö È®ÀÎÇϱâ À§ÇÑ ¿ëµµ.
         ¿¹Àü¿¡ ¼³Ä¡ÇßÀ» ¶§ ¸î °³ ¿À·ù°¡ ¹ß»ýÇ߾ ½ÇÁ¦ »ç¿ë¿¡´Â ¹®Á¦¾ø¾ú´Ù.)
       # make install
     


    3) ¸ÞÀÏ Á¦¸ñÀÇ ÇÑ±Û µðÄÚµùÀ» À§Çؼ­´Â hcode ÇÁ·Î±×·¥ÀÌ ÇÊ¿äÇÏ´Ù. (¿É¼Ç)
       ftp://ftp.kaist.ac.kr/pub/hangul/code/hcode/ ¿¡¼­ ±¸ÇÒ ¼ö ÀÖÀ¸¸ç,
       make ¸¸À¸·Î ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù.

    3. procmail ¼³Á¤

    [ /etc/procmailrc ¼³Á¤ Áß µðÄÚµù ºÎºÐ¸¸ ]
     
    # ¸ÞÀÏ Çì´õ µðÄÚµù
    :0 fhw
    *^(Subject|From|Cc):.*=\?EUC-KR\?(B|Q)\?
      |formail -c | /usr/bin/hcode -dk -m

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

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

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

    # ¸ÞÀÏ ¼ö½Å·Î±×¸¦ DB·Î ÀúÀå
    INCLUDERC=/etc/procmail/mail_log.rc
     


    : ´Â ó¸®ÇÒ Á¶°ÇÀÇ ½ÃÀÛÀ» ÀǹÌÇϸç recipes¶ó ºÒ¸°´Ù.
    À§¿¡¼­ Çì´õ¿¡¼­ °¢°¢ÀÇ Á¶°ÇÀ» ã¾Æ ¸ÂÁö ¾ÊÀ¸¸é ´ÙÀ½ Á¶°Ç(E = else if·Î ÀÌÇØÇÏ¸é µÊ)À»
    ó¸®ÇÏ´Â ÇüÅ·ΠµÇ¾î ÀÖ´Ù.
    ÀÌ·± °úÁ¤À» °ÅÃÄ Base64³ª QP·Î ÀÎÄÚµùµÈ ¸ÞÀÏ Çì´õ¸¦ µðÄÚµùÇÏ°Ô µÈ´Ù.

    ÀÌÁ¦ includeµÈ mail_log.rc¸¦ »ìÆ캸ÀÚ.

    [ /etc/procmail/mail_log.rc ]
     
    # ¼Û½ÅÀÚ ¸ÞÀÏÁÖ¼Ò
    :0
    * ^From: \/.*
    {
            FROM = "$MATCH"
    }
    # ¼ö½ÅÀÚ ¸ÞÀÏÁÖ¼Ò
    :0
    * ^To: \/.*
    {
            TO = "$MATCH"
    }
    # ¸ÞÀÏÁ¦¸ñ
    :0
    * ^Subject: \/.*
    {
            SUBJECT = "$MATCH"
    }

    # ¸ÞÀÏ º»¹® byte¼ö
    :0
    * 1^1 B ?? > 1
    { }

    LENGTH = $=

    RESULT=`/etc/procmail/mail_log.pl "$FROM" "$TO" $LOGNAME "$SUBJECT" $LENGTH`
     

    * ´Ù¿î·Îµå : http://coffeenix.net/truefeel/files/mail_log.rc

    °¢°¢ÀÇ Á¶°Ç¿¡ ÀÇÇØ ¼ö½ÅÀÚ, ¼Û½ÅÀÚ, ¸ÞÀÏÁ¦¸ñ, º»¹® ±æÀ̸¦ ¾ò¾î³½´Ù.
    ±× ¾ò¾îÁø °ªÀº º¯¼ö¿¡ ÀúÀåµÇ¾î mail_log.pl ÇÁ·Î±×·¥¿¡ Àμö·Î ³Ñ°ÜÁÖ°Ô µÈ´Ù.

    ¾î¶»°Ô ¸ÅĪÀÌ µÇ¾î FROM, TO, SUBJECT, LENGTH º¯¼ö¿¡ °ªÀÌ µé¾î°¡´ÂÁö ±Ã±ÝÇϸé
    procmailrc ¿¡ VERBOSE=yes ·Î ÇÏ¸é ½±°Ô È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

     
    LOGFILE=/var/log/procmail
    VERBOSE=yes
     


    4. DB ½ºÅ°¸¶¿Í ·Î±ë ÇÁ·Î±×·¥

    MAIL_LOG DB ½ºÅ°¸¶ÀÌ´Ù.
     
    /* ¸ÞÀÏ ¼ö½Å ·Î±× */
    CREATE TABLE MAIL_LOG (
      MAIL_SEQ              int not null auto_increment,    /* ·Î±× SEQ. */
      MAIL_FROM             varchar(255),                   /* ¼Û½ÅÀÚ */
      MAIL_FROMNAME         varchar(255),                   /* ¼Û½ÅÀÚ À̸§ */  
      MAIL_FROMMAIL         varchar(255),                   /* ¼Û½ÅÀÚ ¸ÞÀÏÁÖ¼Ò */
      MAIL_TO               varchar(255),                   /* ¼ö½ÅÀÚ(To)  */
      MAIL_LOGNAME          varchar(255),                   /* ¼ö½Å ID   */
      MAIL_SUBJ             varchar(255),                   /* Á¦¸ñ      */
      MAIL_SIZE             int default 0,                  /* ¸ÞÀÏ Å©±â */
      MAIL_DATE             datetime,                       /* ¸ÞÀÏ ³¯Â¥ */
      PRIMARY KEY (MAIL_SEQ)
    );
     

    * ´Ù¿î·Îµå http://coffeenix.net/truefeel/files/mail_log.sql

    ´ÙÀ½Àº DB·Î ÀúÀåÇÏ´Â ÆÞ ¼Ò½ºÀÌ´Ù.

    [ /etc/procmail/mail_log.pl ]
     
    #!/usr/bin/perl

    #
    # procmailÀ» ÅëÇØ ³Ñ°Ü¿Â ¸ÞÀÏ ¼ö½Å Á¤º¸¸¦ DB·Î.
    #
    # Made By ÁÁÀºÁøÈ£(truefeel, http://coffeenix.net/ )
    #
    # 2004.1.13(È­)
    #
    # - Perl DBI, DBD ¸ðµâ ÇÊ¿ä
    # - DB : MySQL
    # - ³Ñ°Ü¿À´Â °ª : ¼ø¼­´ë·Î From, To, ¼ö½ÅID, ¸ÞÀÏÁ¦¸ñ, º»¹®Å©±â(byte)

    use DBI;

    # $DEBUG = 1;
    # Á¤º¸¸¦ ³Ñ°Ü ¹ÞÀ½
    if ( $#ARGV < 4 ) {
    ¡¡¡¡¡¡print "½ÇÇà¹æ¹ýÀÌ Æ²·È½À´Ï´Ù. procmailÀ» ÅëÇؼ­ ½ÇÇàÇϼ¼¿ä.\n";
    ¡¡¡¡¡¡exit 1;
    }
    ($FROM, $TO, $LOGNAME, $SUBJECT, $SIZE ) = @ARGV;

    # DBÀúÀåÀ» À§ÇÑ ÀÛÀº µû¿ÈÇ¥ ó¸®
    $FROM    =~ s/'/''/g;
    $TO      =~ s/'/''/g;
    $SUBJECT =~ s/'/''/g;

    # From: ¿¡¼­ À̸§°ú ¸ÞÀÏÁÖ¼Ò¸¦ ºÐ¸®
    # ¿¹ 1) $FROM = '"truefeel" <true____@coffee___.___>';
    # ¿¹ 2) $FROM = 'true____@coffee___.___';
    # ¿¹ 3) $FROM = '<true____@coffee___.___>';
    if ( $FROM =~ /"{0,}([^"|.]*)"{0,}\s{0,}<(.*)>/g ) {
    ¡¡¡¡¡¡$FROMNAME = $1;
    ¡¡¡¡¡¡$FROMMAIL = $2;
    } else {
    ¡¡¡¡¡¡$FROMMAIL = $FROM;
    }

    # -------------------------------------------------
    # DB ó¸®
    # -------------------------------------------------
    # DB Á¢¼Ó
    &db_connect;

    # ·Î±× ÀúÀå
    $sql_mail_log = qq {
    ¡¡¡¡¡¡INSERT INTO MAIL_LOG
    ¡¡¡¡¡¡VALUES ('', '$FROM', '$FROMNAME', '$FROMMAIL', '$TO', '$LOGNAME', '$SUBJECT', '$SIZE', now() ) };
    &db_do_sql($sql_mail_log);
    &db_disconnect;

    # µð¹ö±ë
    if ( defined($DEBUG) ) {
    ¡¡¡¡¡¡$mail_log = sprintf("¼Û½Å= %s\n¼ö½Å= %s, %s\nÁ¦¸ñ= %s\nÅ©±â= %dBytes\n", $FROM, $TO, $LOGNAME, $SUBJECT, $SIZE);
    ¡¡¡¡¡¡open(FILE, ">/tmp/maillog.debug");
    ¡¡¡¡¡¡¡¡¡¡¡¡print FILE $mail_log;
    ¡¡¡¡¡¡¡¡¡¡¡¡print FILE "$sql_mail_log \n";
    ¡¡¡¡¡¡close(FILE);
    }
    exit;

    # -------------------------------------------------
    # DB ¿¬°á
    sub db_connect {
    ¡¡¡¡¡¡$database = "DBÁöÁ¤";
    ¡¡¡¡¡¡$db_user  = "DB USER ID";
    ¡¡¡¡¡¡$db_passwd= "DB ºñ¹Ð¹øÈ£";

    ¡¡¡¡¡¡$dbh = DBI->connect ( "DBI:mysql:$database", $db_user, $db_passwd) || die "$DBI::errstr";
    }

    # DB Á¢¼ÓÀ» ²÷À½
    sub db_disconnect {
    ¡¡¡¡¡¡$dbh->disconnect();
    }

    # SQL¹® ½ÇÇà
    sub db_do_sql {
    ¡¡¡¡¡¡my ( $sql ) = @_;
    ¡¡¡¡¡¡my ( $sth );

    ¡¡¡¡¡¡$sth = $dbh->prepare($sql);

    ¡¡¡¡¡¡# ¿À·ù°¡ ¹ß»ýÇß´ÂÁö °Ë»ç --------
    ¡¡¡¡¡¡if ( $@ ) {
    ¡¡¡¡¡¡     &db_disconnect;
    ¡¡¡¡¡¡     print " ¿À·ù ¹ß»ý : $@\n";
    ¡¡¡¡¡¡} else {
    ¡¡¡¡¡¡     $sth->execute;
    ¡¡¡¡¡¡}
    ¡¡¡¡¡¡$sth->finish();
    }

     

    * Syntax HighlightµÈ ¼Ò½º º¸±â : http://coffeenix.net/truefeel/files/mail_log.pl.html
    * ´Ù¿î·Îµå http://coffeenix.net/truefeel/files/mail_log.pl.txt

    °£´ÜÈ÷ »ìÆ캸ÀÚ.

    ³Ñ°Ü¿Â ÀμöÁß¿¡¼­ ¼Û½ÅÀÚ Á¤º¸´Â À̸§°ú ¸ÞÀÏÁÖ¼Ò·Î ³ª´«´Ù. ¹°·Ð À̸§ÀÌ ¾ø¾îµµ ¹®Á¦¾øÀÌ
    ó¸®ÇÑ´Ù. ±×¸®°í DB¿¡ ÀúÀåÇÏ°í Á¾·áÇÑ´Ù.
    $DEBUG = 1 À¸·Î ÁöÁ¤ÇÏ¸é µð¹ö±ë¿¡ À¯¿ëÇÏ´Ù. ³Ñ°Ü¹ÞÀº Àμö¸¦ /tmp/maillog.debug¿¡ ÀúÀå ÇÑ´Ù.

    db_connect() ÇÔ¼ö¿¡¼­ $database, $db_user, $db_passwdÀ» ¼³Á¤ÇØÁÖ¾î¾ß ÇÑ´Ù.
    ¸¸¾à Oracle DBÀ̶ó¸é 'DBI:mysql' ´ë½Å 'DBI:Oracle'À» ½áÁÖ¸é µÈ´Ù.

    ÁÖÀÇÇÒ °ÍÀº DB ºñ¹Ð¹øÈ£µµ ÀÖÀ¸´Ï ÆÄÀÏ Æ۹̼ÇÀ» 700(rwx------)À¸·Î ÇؾßÇÑ´Ù.

     
    # chmod 700 /etc/procmail/mail_log.pl
     


    ·Î±×°¡ Á¦´ë·Î ³²¾Ò´ÂÁö È®ÀÎÇغ¸ÀÚ.


    ·Î±×¸¦ DB·Î ³²°åÀ» ¶§ ¾î¶»°Ô È°¿ëÇÒ °ÍÀÎÁö »ý°¢Çߴ°¡?
    ±×·³ Áö±Ý ´çÀå ½ÃÀÛÇضó!

    5. Âü°í ÀÚ·á

    * Procmail Tips
      http://pm-doc.sourceforge.net/pm-tips.html
    * procmail¿¡ °üÇÏ¿© (±Û ÀÌ»ó·Î)
      http://trade.chonbuk.ac.kr/~leesl/procmail/index.html
    * Short guide to DBI (The Perl Database Interface Module)
      http://www.perl.com/pub/a/1999/10/DBI.html
      Ä¿ÇǴнº Ä«Æä ÃÖ±Ù ±Û
    [04/25] ±¹°¡&#5
    [04/24] º¸Çè&#5
    [04/22] Re: OpenSSL Ãë¾àÁ¡ Á¤¸®, Logjam(·Î±×Àë)¿¡¼­ Heartbleed±îÁö
    [04/21] LET¡¯S START WITH ON
    [04/21] º¸Çè&#5
    [04/20] Á¦ÁÖ&#5
    [04/20] ±¹³»&#5
    [04/19] Á¦ÁÖ&#5
    [04/18] ??? ?????
    [04/17] ???? onion ?????? -
    [04/11] ±¹°¡&#5
    [04/10] Stride Into Dream:
    [03/20] Re: ¿Â¶óÀΰÔÀÓÀÇ Á¾ÁÖ±¹ ´ëÇѹα¹
    [10/20] Cross Compiler ±ò
    [07/14] SSL ¬¡¬°
      New!   ÃÖ±Ù¿¡ µî·ÏÇÑ ÆäÀÌÁö
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      ¿ÀÇÂij½ºÄÉÀ̵å ijµå (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ÀÏ~