6.5. SendmailÀÇ Virtual Domain ¼³Á¤

ÇϳªÀÇ È£½ºÆ®¿¡ ¿¬°áµÈ µµ¸ÞÀÎ nobreak.com °ú kr.freebsd.org ¿¡ ´ëÇØ, ÀϹÝÀûÀ¸·Î nobreak@nobreak.com °ú nobreak@kr.freebsd.org ÀÇ ¼ö½ÅÀÚ´Â °°´Ù. ¿©±â¿¡¼­´Â °¢°¢ÀÇ µµ¸ÞÀκ°·Î aliases Å×À̺íÀ» °®´Â °Í°ú °°ÀÌ, µµ¸ÞÀο¡ µû¶ó ¼ö½ÅµÇ´Â ÆíÁö¸¦ ´Ù¸£°Ô ó¸®ÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº»´Ù. º» ±ÛÀÌ SendmailÀ» ÁÖÁ¦·Î ÇÏÁö´Â ¾Ê±â¿¡, SendmailÀ» ¾î´À Á¤µµ ¾Ë°í ÀÖ´Ù´Â °¡Á¤À¸·Î °ñÀÚ³»¿ë¸¸À» ´Ù·çµµ·Ï ÇϰڴÙ. Sendmail¿¡ Àͼ÷Ä¡ ¾Ê´Ù¸é ³»¿ëÀ» ÀÌÇØÇϱâ À§ÇØ RuleSet, m4, aliases, dbm/btree/hash µî¿¡ ´ëÇÑ »çÀüÇнÀÀÌ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù.

¼³¸íÇϰíÀÚ ÇÏ´Â ¹æ¹ýÀº Sendmail 8.8 À̻󿡼­ °¡´ÉÇϹǷÎ,¸ÕÀú ´ÙÀ½°ú °°ÀÌ ¼³Ä¡µÈ ¹öÁ¯À» È®ÀÎÇÑ´Ù.

    $ telnet localhost smtp
    Trying 127.0.0.1...
    220 kfug2.kr.freebsd.org ESMTP Sendmail 8.9.3/8.9.3

¹öÁ¯ÀÌ 8.8º¸´Ù ³·´Ù¸é, ftp://ftp.sendmail.org/pub/sendmail/ ¿¡¼­ ÃֽŹöÁ¯À» ±¸Çϱ⠹ٶõ´Ù. Sendmail 8.2 À̻󿡼­´Â domaintable Feature¸¦ »ç¿ëÇØ ±¸ÇöµÉ ¼ö ÀÖÁö¸¸, ¿©±â¼­ Á¦½ÃÇÏ´Â Sendmail 8.8 ÀÌ»óÀÇ virtusertable Feature·Î ´ëüµÇ´Â Ãß¼¼À̹ǷΠ¿©±â¿¡¼­´Â ´Ù·çÁö ¾Ê°Ú´Ù.

6.5.1. m4¸¦ »ç¿ëÇÑ sendmail.cf »ý¼º

¸ÕÀú sendmail-VERSION/cf/cf/¿¡¼­ ½Ã½ºÅÛ¿¡ ÀûÀýÇÑ mc ÆÄÀÏÀ» º¹»çÇÑ ÈÄ, Virtual Domain ¼³Á¤¿¡ ÇÊ¿äÇÑ virtusertable, genericstable Feature¸¦ Ãß°¡ÇÑ´Ù. ÀÛ¼ºµÈ mc ÆÄÀÏÀº ÀϹÝÀûÀ¸·Î ´ÙÀ½°ú °°ÀÌ º¸ÀδÙ.

    * generic-bsd4.4.mc ÆÄÀÏÀ» »ç¿ëÇØ ÀÛ¼ºÇÑ freebsd.mc ÆÄÀÏ
    divert(0)dnl
    VERSIONID(`@(#)generic-bsd4.4.mc        8.7 (Berkeley) 5/19/1998')
    OSTYPE(bsd4.4)dnl
    DOMAIN(generic)dnl
    MAILER(local)dnl
    MAILER(smtp)dnl
    FEATURE(virtusertable, btree /etc/domainaliases.db)dnl
    FEATURE(genericstable, btree /etc/useraliases.db)dnl

virtusertable Feature´Â ¼ö½Å(in-bound)µÇ´Â ÆíÁö¸¦ ·ÎÄà »ç¿ëÀÚ·Î ¸ÅÇÎÇÏ´Â RuleSetÀ» »ý¼ºÇϰí, genericstable Feature´Â ¹Ý´ë·Î ¼Û½Å(out-bound)µÇ´Â ÆíÁö¿¡ ´ëÇØ ·ÎÄà À¯Àú¿¡ ´ëÇÑ ¸ÞÀÏÁÖ¼Ò(¸ÞÀÏ Çì´õ»óÀÇ From: Çʵå)¸¦ ¸ÅÇÎÇÏ´Â RuleSetÀ» »ý¼ºÇÑ´Ù. DNSÀÇ Forward Zone°ú Reverse ZoneÀ» »ý°¢ÇÏ¸é µÇ°Ú´Ù.

btree ´Â ÇØ´ç Å×À̺í(domainaliases.db)ÀÌ B-Tree(Berkeley DB) µ¥ÀÌÅͺ£À̽º ÇüÅ·ΠÀúÀåµÊÀ» ÀǹÌÇÑ´Ù. °¡´ÉÇÑ ´Ù¸¥ À¯ÇüÀ¸·Î´Â hash(Berkeley DB)¿Í dbm(NDBM)ÀÌ Àִµ¥, Å×À̺íÀÌ ¹æ´ëÇÒ °æ¿ì È¿À²Àº btree(Berkeley DB) > hash(Berkeley DB) > dbm(NDBM) ¼øÀÌ´Ù. ¼Óµµ°¡ ºü¸¥ btree¿Í hash¸¦ »ç¿ëÇϱâ À§Çؼ­´Â Berkeley DB(FreeBSD¸¦ ºñ·ÔÇØ ¸î¸î Unix¿¡´Â ±âº»À¸·Î Æ÷ÇԵȴÙ)°¡ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß Çϸç, sendmail°ú makemap ÄÄÆÄÀϽà -DNEWDB Ç÷¡±×(Berkeley DB°¡ ¼³Ä¡µÇ¾î ÀÖ´Ù¸é ÀÚµ¿À¸·Î -DNEWDB Ç÷¡±×°¡ »ç¿ëµÈ´Ù)¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

Berkeley DB°¡ ¼³Ä¡µÇ¾î ÀÖÁö ¾ÊÀ» °æ¿ì¿£ -DNDBM Ç÷¡±×(NDBM ¶óÀ̺귯¸®´Â ´ëºÎºÐÀÇ Unix¿¡ ±âº»À¸·Î Æ÷ÇԵȴÙ)·Î ÄÄÆÄÀÏ µÇ´Âµ¥ À̶§¿¡´Â DBMÀ» »ç¿ëÇÏ¿©¾ß ÇÑ´Ù. ¸®´ª½º¿Í °°ÀÌ Berkeley DBÀÇ GNUÆÇÀÎ GDBMÀÌ »ç¿ëµÇ´Â °æ¿ì¿£ º°µµÀÇ ³ë·Â¾øÀÌ ¼¼ Á¾·ùÀÇ DB¸¦ ¸ðµÎ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.

ÀÛ¼ºµÈ freebsd.mc ÆÄÀÏÀº ´ÙÀ½°ú °°ÀÌ m4(Macro Language Processor)¸¦ ÅëÇØ sendmail.cf·Î º¯È¯ÇÑ´Ù.

    # cd sendmail-VERSION/cf/cf
    # m4 ../m4/cf.m4 freebsd.mc > freebsd.cf
    # cp freebsd.cf /etc/sendmail.cf

¸¸¾à ±âÁ¸ÀÇ sendmail.cf°¡ À¯ÁöµÇ¾î¾ß ÇÏ´Â »óȲÀ̶ó¸é, ½ÇÁ¦ º» µÎ Feature°¡ »ý¼ºÇÏ´Â ´ÙÀ½ÀÇ RuleSetÀ» Âü°íÇÏ¿© sendmail.cf¸¦ Á÷Á¢ ¼öÁ¤ÇÏ¿©µµ ÁÁ´Ù. (RuleSetÀÌ »ðÀԵǴ À§Ä¡¸¦ ÆÄ¾ÇÇϱâ À§ÇØ m4·Î sendmail.cf¸¦ »ý¼ºÇÏ¿© ºñ±³Çϱ⠹ٶõ´Ù)

    * FEATURE(virtusertable, btree /etc/domainaliases.db)dnl
    # Virtual user table (maps incoming users)
    Kvirtuser btree /etc/domainaliases.db
    
    # handle virtual users (RuleSet 0ÀÇ Parse1 ¾Æ·¡¿¡ À§Ä¡)
    R$+ < @ $=w . >         $: < $(virtuser $1 @ $2 $@ $1 $: @ $) > $1 < @ $2 . >
    R<@> $+ + $* < @ $* . >
                            $: < $(virtuser $1 + * @ $3 $@ $1 $: @ $) > $1 + $2 < @ $3 . >
    R<@> $+ + $* < @ $* . >
                            $: < $(virtuser $1 @ $3 $@ $1 $: @ $) > $1 + $2 < @ $3 . >
    R<@> $+ < @ $+ . >      $: < $(virtuser @ $2 $@ $1 $: @ $) > $1 < @ $2 . >
    R<@> $+                 $: $1
    R< error : $- $+ > $*   $#error $@ $(dequote $1 $) $: $2
    R< $+ > $+ < @ $+ >     $: $>97 $1
    * FEATURE(genericstable, btree /etc/useraliases.db)dnl
    # Generics table (mapping outgoing addresses)
    Kgenerics btree /etc/useraliases.db
    
    # handle generics database (RuleSet 93 ¾Æ·¡¿¡ À§Ä¡)
    R$+ < @ $=G . > $: < $1@$2 > $1 < @ $2 . > @    mark
    R$+ < @ *LOCAL* >       $: < $1@$j > $1 < @ *LOCAL* > @ mark
    R< $+ > $+ < $* > @     $: < $(generics $1 $: $) > $2 < $3 >
    R< > $+ < @ $+ >        $: < $(generics $1 $: $) > $1 < @ $2 >
    R< $* @ $* > $* < $* >  $@ $>3 $1 @ $2                  found qualified
    R< $+ > $* < $* >       $: $>3 $1 @ *LOCAL*             found unqualified
    R< > $*                 $: $1                           not found

6.5.2. Forward-map Å×À̺í ÀÛ¼º

¸ÕÀú, ÇØ´ç È£½ºÆ®°¡ ¼ö½ÅÇÏ´Â µµ¸ÞÀÎÀ» Ŭ·¡½º w(sendmail.cw)¿¡ ³ª¿­ÇÏ¿©¾ß ÇÑ´Ù.

    * /etc/sendmail.cw ÆÄÀÏ
    nobreak.com
    kr.freebsd.org

domainaliases ÆÄÀÏÀ» ÆíÁý±â·Î ¿­¾î ´ÙÀ½°ú °°ÀÌ Virtual User TableÀ» ÀÛ¼ºÇÑ´Ù.

    * /etc/domainaliases ÆÄÀÏ
    webmaster@nobreak.com           dipper
    moonhunt@nobreak.com            moonhunt@ieee.org
    cjh@nobreak.com                 error:nouser Unknown User
    @nobreak.com                    nobreak
    @kr.freebsd.org                 %1@xfree86.org

¸ÞÀÏÁÖ¼Ò webmaster@nobreak.com ´Â ·ÎÄà »ç¿ëÀÚ dipper·Î ¸ÅÇεǰí, moonhunt@nobreak.com ·Î ¹è´ÞµÇ´Â ÆíÁö´Â moonhunt@ieee.org ·Î Æ÷¿öµù µÈ´Ù. cjh@nobreak.com À¸·Î ¹è´ÞµÇ´Â ÆíÁö¿¡ ´ëÇØ¼­´Â ¿¡·¯¸Þ½ÃÁö 'Unknown User'·Î ´äÇϸç, ±×¿Ü nobreak.com À¸·Î ¼ö½ÅµÇ´Â ¸ðµç ÆíÁö´Â ·ÎÄà »ç¿ëÀÚ nobreak·Î Àü´ÞµÈ´Ù. ¶ÇÇÑ, kr.freebsd.org ·Î ¼ö½ÅµÇ´Â ¸ðµç ÆíÁö´Â xfree86.org ÀÇ °°Àº »ç¿ëÀÚ¿¡°Ô Æ÷¿öµùµÈ´Ù. ´ÙÀ½°ú °°ÀÌ aliases ÆÄÀϰú ¿¬µ¿ÇÏ¿© ´Ù¼öÀÇ »ç¿ëÀÚ¸¦ ¸ÅÇÎÇÏ´Â°Í ¶ÇÇÑ °¡´ÉÇÏ´Ù.

    * /etc/domainaliases ÆÄÀÏ
    announce@kr.freebsd.org         announce.ml
    admin@kr.freebsd.org            admin.ml
    * /etc/aliases ÆÄÀÏ
    announce.ml:            :include:/var/ml/announce.ml
    admin.ml:               nobreak, moonhunt@ieee.org

6.5.3. Reverse-map Å×À̺í ÀÛ¼º

È£½ºÆ®¸íÀÌ kfug2.kr.freebsd.org À϶§, ½Ã½ºÅÛ¿¡¼­ out-boundµÇ´Â ÆíÁö´Â ±âº»ÀûÀ¸·Î user@kfug2.kr.freebsd.org ¸¦ FromÀ¸·Î °®´Â´Ù. ´ÙÀ½ÀÇ Reverse-map Å×À̺íÀº ·ÎÄà »ç¿ëÀÚÀÇ ¸ÞÀÏÁÖ¼Ò¸¦ º¯°æÇÑ´Ù.

    * /etc/useraliases ÆÄÀÏ
    nobreak                 nobreak@nobreak.com
    cjh                     cjh@kr.freebsd.org

6.5.4. Å×ÀÌºí º¯È¯ ¹× ½ÇÇè

ÀÛ¼ºµÈ Å×À̺íÀº makemapÀ» »ç¿ëÇØ dbm/btree/hash ÇüÅ·Πº¯È¯µÇ¾î¾ß ÇÑ´Ù. ¿©±â¼­´Â btree¸¦ »ç¿ëÇÏ¿´À¸¹Ç·Î ´ÙÀ½°ú °°ÀÌÇÑ´Ù.

    # makemap btree /etc/domainaliases.db < /etc/domainaliases
    # makemap btree /etc/useraliases.db < /etc/useraliases
    # ls /etc/domainaliases* /etc/useraliases*
    /etc/domainaliases      /etc/useraliases
    /etc/domainaliases.db   /etc/useraliases.db

ÀÌÁ¦ SendmailÀ» Çà¾÷ÇÏ°í µ¿ÀÛÀ» È®ÀÎÇÏÀÚ.

    # kill -HUP `cat /var/run/sendmail.pid`
    
    # sendmail -bv webmaster@nobreak.com
    webmaster@nobreak.com... deliverable: mailer local, user dipper
    
    # sendmail -bv cjh@nobreak.com
    cjh@nobreak.com... Unknown User
    
    # sendmail -bv anybody@kr.freebsd.org
    anybody@kr.freebsd.org... deliverable: mailer esmtp,
    host xfree86.org., user anybody@xfree86.org