Solaris

Sun Mail Server 구축하기

알 수 없는 사용자 2008. 3. 1.
728x90

1. 목 적


Solaris에 기본적으로 제공하는, Sun Sendmail 을 사용하여 , 로밍
사용자를 위한 ,'동적 Access pop3 멜 서버'를 구축하여 본다.


www.sendmail.org에서 제공하는 , 샌드 메일을 사용할 경우, 재 컴파일을
해야 하고, 또한 Sun OS Recommend Patch 시 마다.


기존의 샌드메일의 구성변경을 신경 쓰는 불편함을 없애고자, 선에서 기본적으로 제공되어
지는 샌드 메일을 사용 해 본다.


pop3는 qproper을 사용하며, ip 기반의 Acess 허용을 하기 위하여, 예전
Linux에서 많이 사용되던 DRAC를 사용하여, 사용자 인증을


한다. 


요즘에는 SMTP 인증 방법을 많이 사용하고, sendmail 8.12.11 을
이용하여, SSL , 인증키 기법까지 사용하는 방법까지 많이 소개되고


있으나,  샌드메일 소스를 받아서 컴파일 해야 하고, 인증키니 모니 어쩌니
하면서, 도통 무슨 소리 인지 모르겠기에, 썬을 믿어 보기로


하고, 썬에서 제공되어 지는 기본 샌드 메일을 최대한 활용하는 방법을 소개한다.


 


2. 준 비 물


 * Sendmail 8.11.7p1+Sun  : Solaris에
기본적으로 제공되는 Sendmail + Recommend Patch


 * qproper 4.05 : pop3 :

ftp://ftp.qualcomm.com/eudora/servers/unix/popper/


 * RDAC 1.2  :
http://mail.cc.umanitoba.ca/drac/


 * 컴파일러 등등 , 귀찮으면 기냥 컴패니언 씨디를 통채로 깔아 둔다.


 * Sendmail 관련 기본 지식 :
http://www.superuser.co.kr/  ,
http://www.oops.org/ 등등..


 * RDAC 관련 지식 :

http://coffeenix.net/board_view.php?cata_code=59&bd_code=13


 


3. Sun Sendmail


Sol8 : 8.11.7p1+ Sun ,  Sol9 : 8.12p1 +
Sun


  * /etc/mail    : 구성 정보


  * /usr/lib/sendmail : 엔진


  * /usr/lib/mail : 설정 변경을 위한  구성 파일
및 도움말


;썬에서는, 오리지날 샌드 메일을 조금 수정하여, Solaris 내에
포함하여 배포 한다.


Sun 샌드메일을 사용하지 않았을 때, 발생하는 ,보안을 비롯한 여러 가지 문제에
대해선, 썬이 책임지지 않는다고, 호언 하고


있으나, 과연 믿어야 할지....,..


2004.02 Recommaned Patch 설치시의 메일 버전은 아래와 같으며


오리지날 샌드메일과 Sun 샌드메일의 차이점은

http://www.sendmail.org/vendor/sun/differences.html
에서 확인할수 있다


 


  3.1 Sun sendmail의 두가지 모드


  internal 모드 : /etc/mail/subsidiary.cf  
--> sendmail.cf


  internet 모드 : /etc/mail/main.cf      
--> sendmail.cf


;Sun Sendmail의 기본 모드는 internal 이기 때문에, DNS 구성하고
어쩌구 해 봐여, 외부로 멜이 가지 않는다.


 DNS Mx 설정시에, 멜을 받을수만 있고, 내부 사용자들끼리, 멜을 보낼 수 있고,
자체적으로 멜을 외부로 발송할수 없다.


 외부로 멜을 보낼려면, internet 모드로 구성하거나, 다른 외부의 멜 서버에
Relay 해야 한다.


  3.2 기본 동작을 위한 구성


 /etc/hosts : 10.0.0.10   ultra2
ultra2.itsem.net loghost


; sendmail 이 작동하기 위해서는, hosts 파일에 , 풀 도메인 이름이
있어야만 작동한다.


   3.3 멜 작동 Test


 # tail -f /var/log/syslog ; 새창 하나 띄워 놓고,
멜 상태를 항상 모니터링 한다.


 # mailx -v user1  or /usr/lib/sendmail
-v user1 < /dev/null 
; 멜 보내기


  3.4 외부에서 멜 받기 ( DNS MX 설정 )


  ; DNS 설정이 잘 되어 있으면 된다.


    nslookup; set type=any ;
itsem.net   <-- dns 구성을 확인 한다. ( set type=q :mx 레코더 확인 )


    DNS Master Zone Sample







 

$ORIGIN itsem.net.

$TTL 8h                 
<-- 이게 없으면, /var/adm/messages가 지저분해 진다.

;

@ IN SOA ns.itsem.net. root.ns.itsem.net. (

20040215 ;serial

10800 ;refresh(3h)

3600 ;retry(10min)

604800 ;expire(7day)

86400 ;ttl(24h)

)

IN A 10.0.0.1            
<--이게 없으면,itsem.net 으로는 멜이 안 온다.

IN NS ns.itsem.net.

IN MX 10 mail.itsem.net.

;

ns IN A 10.0.0.1

mail IN A 10.0.0.10

;loop back

localhost. IN A 127.0.0.1

;cname

ultra2 IN cname mail


  3.5 외부로 멜 보내기


 ; internet 멜 모드로 변경한다.


 # ( /etc/mail ) cp sendmail.cf sendmail.cf_org ;
cp main.mc sendmail.cf


 ; 멜 받을 도메인을 정의한다.


 # vi /local-host-names

     itsem.net

     ultra2.itsem.net   <--두 이름으로 다 오게 한다.


 ; 샌드메일을 재 시작하고,  로컬호스트 25번에 연결하여 테스트 한다.


 # telnet localhost 25 ; MAIL From: 보내는 놈 ; RCPT
To:받는 놈;Data ; gogo ; .


; 로그를 잘 봐라... internal 모드랑 internet 모드랑 모가 틀린지...


 


요기까지 했으면, 기본적인 설정은 끝났지만, 현재 구성으로는, 메일 서버에 직접
연결해서만 , 멜을


이용할 수 있지, outlook 같은 메일 클라이언트를 사용해서 멜을 이용할 수 없다.
따라서 pop3 을 사용할려고


qproper 같은 놈을 사용하는 것이다.


하지만, sendmail 8.9 버전 부터, 메일 릴레이가 기본적으로 막혀 있어서, 
클라언트가 멜 서버에 릴레이 할려면


/etc/hosts 에 클라언트의 ip가 미리 등록되어 있거나, 아니면, access
파일에 일일히 클라이언트를 등록해야


한다. 따라서 이런 번거러움을 없애기 위하여, RDAC를 이용하여, pop3로 연결된
사용자들의 ip를 자동으로


사용가능 하게 해 준다.


 


4. RDAC , qproper 설정


; 박재호 님이 작성하신 "DRAC
설치와 활용 가이드 - 첫번째 판" 을 먼저 꼬옥..잘 보도록 하고,,


 위의 문서가 Linux의 것이므로, Sun에서 적용되는 부분만 언급하도록 하겠다.


 더 자세한 것은
RDAC 소스를 푼뒤 맨들어 지는 INSTALL 파일 및 README를 본다..


 4.1 Sun sendmail 에서 사용하는 BerkeyDB 구해 놓기


  ; RDAC는 샌드메일에서 사용되는 버클리 DB를 사용해서, Access
파일을 맨들기 때문에, 현재 sendmail


   이 사용하는  버클리 DB버전을 알아 둔다. 버전이
틀리면 안 된다구 한다.


   ( 컴패이언 씨디를 설치하지 않는 이상, 기본적으로 버클리 DB
패키지는  Solaris에 들어 있지 않다.


    근디, Access map 만들때, makemap
hash 는 잘 지원된다. makemap dbm 도 돼고..


    그렇다면, 솔라리스 어딘가에 버클리 DB가 있단
말인가? 아니면 없단 말인가? 난 모르겠다..)


   #  `strings /usr/lib/sendmail |
grep -i sleepy'   --> sol8 경우엔 db2.2.7 버전이당


   
http://www.sleepycat.com 에서 해당 버전의 소스를 가져
와서 풀어 두고( ex /temp/DB-2.2.7 )


    # cd dist; configure ; make
;make all  해서 


    컴파일 하면 /usr/local/BerkeleyDB에
설치 된다.


 4.2 RDAC 설치 하기


 ;/temp/drac 에 잘 풀어 두고, Makefile을 다음과 비교
하면서 수정한다..






# Compiler flags

CC = gcc

RANLIB = :



CFLAGS = $(DEFS) -g -I/usr/local/BerkeleyDB/include



LDLIBS = -L/usr/local/BerkeleyDB/lib -lnsl -ldb

 

 # make; make install  하면  /usr/local/sbin에
rpc.dracd가 맨들어 진다.


 ; 솔라리스에서는 portmap 같은 놈이 필요 없으므로, 기냥 사용 하면 된다.


  /temp/drac에 있는 "dracd-setup"을  /etc/init.d에
복사해서 시동 스크립으로 사용하고,


  링크를 잘 걸어서, 시스템 시작시 잘 뜨게 한다.


  dracd-setup start 해서, 잘 뜨나 확인하고, 
/etc/mail/dracd.db가 만들어 짐을 확인 한다.


 


4.3 qproper4.05 설치 하기


 ;/temp/qproper4.05 에 잘 풀어 두고, DRAC가 지원 되게 컴파일
한다.


 # configure --with-drac=/temp/drac 


 -->  "Can't use DRAC: dracauth not found in -ldrac"


  라고 에러가 뜨면  Makefile 을 뒤져서


  LIBS="-ldrac $LIBS" --> LIBS="-ldrac -lnsl
$LIBS"


  로 수정해서 하면 된다. 이상 없으면 make; make install 
해서 /usr/local/sbin에 popper


  가 생성됨을 확인하고, inetd.conf에 서비스 추가해 주고, inetd
재 시작한다.


  # vi /etc/inetd.conf

    pop3 stream tcp nowait root /usr/local/sbin/popper popper -s


 


4.4 RDAC, qproper 연동 test


; /etc/mail/dracd.db 시간 확인


; # telnet localhost 110 ; user user1 ; pass
user1_pass ; quit  후, dracd.db 파일 시간 바뀜 확인


; #/usr/local/Ber*DB/bin/db_dump -p /etc/mail/dracd.db 
에서 Local ip가 보이는지 확인


; 여기서 시간이 안 변하면, qproper에서 DRAC지원이 안되게 컴파일 되어서
그렇다.


 


5. Sendmail 설정 하기


; Acess list 및 DRAC 가 지원되도록, Sun Sendmail 설정 파일을
, m4 로 다시 맨들어 준다.


 Sun Sendmail의 더 많은 추가적인 기능은 /usr/lib/mail/README을
참조 한다.


cf > sun sendmail은 기본적으로 Access list 사용하지 않고,
/etc/hosts 나 /etc/mail/relay-domains


     을 사용하게 되어 있다.  메일
클라이언트의 ip를 /etc/hosts에 등록해 두거나, 메일 수신자의


     도메인 이름을 relay-domains에
적어 두면 , 릴레이가 허용된다.


 


 # cd /usr/lib/mail/cf ;  cp main-v7sun.mc 
drac_relay.mc


 # vi rdac_relay.mc






FEATURE(access_db,` hash /etc/mail/access')dnl  <--access DB 할려면 추가

MAILER(`local')dnl

MAILER(`smtp')dnl



LOCAL_CONFIG

# dynamic relay authorization control map

Kdrac btree -o /etc/mail/dracd
             <--drac acess 사용하기

  # m4 ../m4/cf.m4 drac_relay.mc >
drac_relay.cf 


 생성된 cf 파일을 다음과 같이 수정한다. ( 라인 번호는 틀릴수 있다.)


 #vi drac_realy.cf ; set nu  






31 etivert(-1)      
<-- 이 라인 제거한다.

.................


190 # dynamic relay authorization control map    


191 Kdrac btree -o /etc/mail/dracd          
<-- 만들어져 있음을 확인


1160 # check IP address

1161 R$* $: $&{client_addr}

1162 R$@ $@ RELAYFROM originated locally

1163 R0 $@ RELAYFROM originated locally

1164 R$=R $* $@ RELAYFROM relayable IP address

1165 R$* $: $>LookUpAddress <$1> <?> <$1> <+Connect>

1166 R<RELAY> $* $@ RELAYFROM relayable IP address

1167 R<$*> <$*> $: $2

1168 R$* $: [ $1 ] put brackets around it...

1169 R$=w $@ RELAYFROM ... and see if it is local

1170




1171 #allow recent POP/IMAP mail clients to relay   <-- 이
부분을 추가해 준다.


1172

1173 R$* $: $&{client_addr}

1174 R$+ $: $(drac $1 $: ? $)

1175 R? $:

1176 R$+ $@ RELAY_drac_FROM

1177


1178                                                        
<-- 위치를 주의한다. 다른 위치에 있으면 안된다




1179 # check client name: first: did it resolve?

1180 R$* $: < $&{client_resolve} >

1181 R<TEMP> $#error $@ 4.7.1 $: "450 Relaying temporarily denied. Canno t
resolve PTR record for " $&{client_addr}

1182 R<FORGED> $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly
forged " $&{client_name}

1183 R<FAIL> $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed
" $&{client_name}

 


; 이제 다 했당.


  access list 필요하면 맨들고 ( 거부용으로...), 
외부의 다른 클라이언트에서 실험 해 보면 잘 된다.


 안되면......, 다시 해 본다..ㅠ.ㅠ


 


 


 


 


 

728x90

댓글