Ä¿ÇÇÇâÀÌ ³ª´Â *NIX
Ä¿ÇǴнº
½Ã½ºÅÛ/³×Æ®¿÷/º¸¾ÈÀ» ´Ù·ç´Â °÷
*
HanIRCÀÇ #coffeenix ¹æ
[
Àåºñ ¹× ȸ¼± ÈÄ¿ø
]
> Forum <
IT ÀÏÁ¤
N
e
w
!
ÀÚµ¿È ÇÁ·ÎÁ§Æ®
HOME
>
³×Æ®¿öÅ©(network)
>
¸ÞÀÏ ¼¹ö(mail)
µµ¿ò¸»
°Ë»ö :
»çÀÌÆ®
WHOIS
À¥¼¹ö Á¾·ù
¸ÞÀÏ ÇÊÅ͸µ(½ºÆÔ¸ÞÀÏ) / procmail
(14, ±Û 18, ÀÚ·á 8)
procmail°ú perl·Î ¸ÞÀϼö½Å·Î±×¸¦ DB¿¡ ³²±â±â
ÀÛ¼ºÀÏ : 2004/01/16 13:20
±Û¾´ÀÌ : ÁÁÀºÁøÈ£ (
http://coffeenix.net/
)
Á¶È¸¼ö : 11635
[
ÀÌÀüȸé
/
¼öÁ¤
] ºñ¹Ð¹øÈ£ :
Á¦ ¸ñ : 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]
±¹°¡
[04/24]
º¸Çè
[04/22]
Re: OpenSSL Ãë¾àÁ¡ Á¤¸®, Logjam(·Î±×Àë)¿¡¼ Heartbleed±îÁö
[04/21]
LET¡¯S START WITH ON
[04/21]
º¸Çè
[04/20]
Á¦ÁÖ
[04/20]
±¹³»
[04/19]
Á¦ÁÖ
[04/18]
??? ?????
[04/17]
???? onion ?????? -
[04/11]
±¹°¡
[04/10]
Stride Into Dream:
[03/20]
Re: ¿Â¶óÀΰÔÀÓÀÇ Á¾ÁÖ±¹ ´ëÇѹα¹
[10/20]
Cross Compiler ±ò
[07/14]
SSL ¬¡¬°
N
e
w
! ÃÖ±Ù¿¡ µî·ÏÇÑ ÆäÀÌÁö
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ÀÏ~