BBUWOO'S [ LIKE UNIX ] WORLD Home > Lecture > Sendmail > Sendmail-4  

HOME
WHAT's BBUWOO?
LInux AnNyung
Open Source
    GitHUB
    GitHUB (for PHP)
LECTURE
MINI LECTURE
QnA BOARD
ENGLISH POEM


WARNNING

강좌의 모든 권리는 본인 김정균에게 있으며 이 강좌를 상업적 목적 으로 이용
하거나 다른 곳으로 옮길시에는 본인의 허락이 있어야 한다. 이글의 가장 최신글은
http://oops.org 에서 확인할수 있다.



5. Virtusertable (가상 메일 설정)


이 part는 virtual hosting시에 여려명의 user가 서로 같은 계정을 요구할때의 곤란함을 해결하기 위한 방법을 제시한다. 이 방법은 sendmail의 virtual user table을 이용하며 sendamil의 compile 방법 및 기본 설정에 대해서는 에 한글 자료가 있으니 참고하기를 바라고, 이 강좌에서 설정할 virtual user table 기능을 추가하기 위해서는 sendmail의 공식 홈페이지에서 관련 page를 참고하기 바란다. 또는 FTP 의 sendmail을 이용하는 것도 가능하다. 또한 요즘의 왠만한 배포본에 들어 있는 sendmail 의 경우에는 기본적으로 지원을 하는 추세이다.



Hanterm - cat /etc/mail/virtusertable

[root@oops mail]# cat virtusertable

 # 이 file은 virtual user를 설정하는 file이다.
 # 실제로 없는 계정을 mapping 할수 있으며, 같은 이름 역시
 # domain 별로 다르게 mapping 할수 있다.
 #                                                                      
 # 작성후 
 # makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
 # 명령을 실행 해 줘야 한다.
 #
 #                  작성  김정균. <admin at oops.org>      
 
 admins@oops.org		bbuwoo@chollian.net
 sales@oops.org		oops
 help@oops.org		oops
                                                    
 admins@abc.co.kr		abc
 sales@abc.co.kr		abc
 help@abc.co.kr			abc@abc-kr.co.kr      
 @abc.co.kr			error: nouser Unknown User // 8.9 and ealry
 @abc.co.kr			error:5.1.1:550 Unknown User // 8.10 and after

 @asdf.com			asdf
 @bbc.co.kr			%1@other.oops.org

 [root@oops mail]# 



이 file은 sendmail의 virtual user를 이용하기 위한 설정 file이다. virtual user table을 이용하기 위해서 즉, 이 file을 이용하기 위해서는 에서

    Kvirtuser hash /etc/mail/virtusertable

virtual user handle 이 정의 되어 있어야 하며 FTP 에서 받은 package에는 미리 이 설정들을 정의를 해 놓았으니 걱정할 필요는 없다.

그럼 위의 file에서 설정한 것들에 대해 간단하게 설명을 하겠다. 이 설정으로 보아 이 설정 file이 존재하는 host에는 oops.org 이라는 domain과 abc.co.kr 이라는 2개의 domain을 가지고 있는 것으로 예상을 할수가 있다. 그리고 대충 눈치를 보아서 oops라는 계정과 abc라는 계정을 가지고 있다는 것도 눈치가 빠른 사람이라면 금방 알수 있을 것이다.

그럼 간단하게 세 줄을 가지고 이 file에 대해서는 설명을 할수가 있다.

보통 sendmail에서 위의 하나의 host에 여러개의 account를 가지고 있다고 해도 e-mail address의 ID가 같다면 모두 동일한 계정으로 가게된다. 하지만 sendmail 의 Virtual User Table을 사용하여 위와 같이 설정을 함에 따라 admin이라는 계정이 없음에도 불구하고 또한 같은 account 임에도 불구하고 mail address의 domain에 따라서 admins@oops.org으로 가는 mail은 bbuwoo@chollian.net 으로 mapping 하며, admins@abc.co.kr 으로 가는 mail을 abc 라는 계정으로 갈수 있게 하는 것이다. 앞부분은 가상의 e-mail account가 되는 것이며 뒷부분은 가상의 e-amil address로 오는 mail을 실제로 받는 계정이 된다. 또한 마지막 예는 asdf.com으로 보내는 메일은 어떤 계정으로 보내더라도 모두 asdf 라는 계정으로 메일을 가게 하는 것을 뜻한다.

localhost의 account로 mapping을 할수도 있으며, 다른 host의 account로도 mapping이 가능하다. 이 virtual user table을 잘만 이용한다면 aliases는 별 사용할 필요가 없어 지기도 한다.

그럼 다음의 예를 보도록 한다.


   @abc.co.kr		error: nouser Unknown User // 8.9 and early
   @abc.co.kr		error:5.1.1:550 Unknown User // 8.10 and after
   @bbc.co.kr		%1@other.oops.org

위에서 이 설정들의 용도를 살펴 보자면 일단 첫번째줄 부터 설명을 하겠다. 첫번째 줄의 경우 admins@abc.co.kr, sales@abc.co.kr, help@abc.co.kr 외에 abc.co.kr 이라는 도메인으로 오는 메일들은 virtusertable에서는 해당 설정이 없기 때문에 다음 단계인 aliases file로 넘어가게 되며 aliases에서도 해당 설정이 없으면 실제 계정을 찾게 된다. 그럼 문제는 대형 메일 서버일경우 이렇게 실제 계정을 찾는 단계까지 갔음에도 불구하고 없는 계정이라면 상당한 서버 부하를 가져 올수도 있는 문제가 발생한다. 그래서 이 설정을 함으로서 admin, sales, help 외의 계정으로 abc.co.kr이라는 도에민으로 오는 메일들은 virtusertable 차원에서 return을 시켜 버리는 역할을 하게 되는 것이다. 잘 사용하면 그만큼 부하를 낯출수도 있는 것이다.

그럼 다음줄을 보면 이상한 것을 볼수 있다. 즉 "%1" 이라는 표현법을 볼수 있다. 이 %1은 실제 메일 header에 들어 있는 메일 주소의 account부분(정확하게는 email의 localpart) 즉 admins@abc.co.kr로 온 메일이라면 이중 admin 을 %1에 match를 하게 된다.

magic cookie에 대해서 좀 더 설명을 하자면, email 주소의 localpart에 "+문자열" 를 사용하면 기본적으로 "+문자열"은 무시가 된다. 예를 들어 admin+zzz@domain.com 으로 메일을 보내면, admin@domain.com 으로 메일이 간다는 의미이다. 이 "+문자열" 표현을 이용하여 재미있는 액션을 할 수 있다.


   A+*@abc.co.kr		A_%2
   B+*@abc.co.kr		B%3

위의 주소를 보자면 "%2"와 "%3"이 등장을 한다. "%2"는 localpart에서 "+" 문자 뒤의 문자열을 의미하며, "%3"은 "+"를 포함한다. 즉, 위의 룰에서 A+zzz@abc.co.kr로 메일을 보내면 A_zzz account로 배달이 되고, B+zzz@abc.co.kr로 보내면 B+zzz account로 배달이 된다는 의미이다.

그리고, virtusertable 설정의 RHS에는 "+*"와 "++"를 사용할 수 있는데, 이 차이는 다음의 예제로 설명을 할 수 있다.


   A+*@abc.co.kr		A_%2
   A++@abc.co.kr		A_%2

위와 같이 A+*@abc.co.kr 로 설정을 할 경우에는 A+zzz은 A_zzz account로 배달이 되는데, "+" 뒤에 아무런 문자열이 없을 경우 즉, A+@abc.co.kr로 메일을 보낼 경우에는 A_ account에서 받게 된다. 하지만 "+*" 대신에 "++"를 사용하면 A+@abc.co.kr로 메일을 보낼 경우, A account가 메일을 받게 된다는 차이가 있다.

이 file의 설정을 끝냈다고 해서 설정이 그대로 적용되지는 않는다. sendmail에서는 대체로 text 설정 file들을 DB화 하여 db file들을 이용하여 설정을 적용시킨다. 이 virtusertable file을 db화 하여 놓은 file이 /etc/mail/virtusertable.db 이다. virtusertable을 db file로 적용시키기 위하여 virtusertable을 저장한 후에 shell에서

명령으로서 virtusertable.db file을 갱신 시켜 줘야 한다. 만약 NDBM으로 sendmail을 compile했다면 모든 설정 file들의 hash를 dbm 으로 바꾸어 줘야 한다. hash는 버클리 DB(NEWDBM)을 의미한다.

이곳의 패키지를 설치를 했다면 좀더 쉽게 할수가 있다. /etc/mail밑에 보면 makemap.sh 라는 file이 존재를 한다. 그럼 /etc/mail 로 이동을 하여 SHELL> ./makemap.sh virt 를 실행하면 위의 방법과 동일한 결과를 가져 온다.

이 정도면 virtual user table에 대한 설명은 끝났다. 좀더 정밀한 setting은 이 page의 상단에 link되어 있는 sendmail page의 virtual hosting 문서를 살펴 보기 바란다.



>> 이전 : Relay 설정
>> 다음 : local-host-names & DNS



    



 Home > Lecture > Sendmail > Sendmail-4

Copyright 1997-2021 JoungKyun Kim 
LAST MODIFIED: 2017/01/18