참고 ~ http://www.oops.org/lecture.php?n=4&sb=sendmail


이 part는 virtual hosting시에 여려명의 user가 서로 같은 계정을 요구할때의 곤란함을 해결하기 위한 방법을 제시한다. 이 방법은 sendmail의 virtual user table을 이용하며 sendamil의 compile 방법 및 기본 설정에 대해서는 KLDP에 한글 자료가 있으니 참고하기를 바라고, 이 강좌에서 설정할 virtual user table 기능을 추가하기 위해서는 sendmail의 공식 홈페이지에서 virtual hosting 관련 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

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

[root@oops mail]#





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


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

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

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


admins@oops.org bbuwoo@chollian.net
admins@abc.co.kr abc
@asdf.com asdf


보통 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
  @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부분 즉 admins@abc.co.kr로 온 메일이라면 이중 admin 을 %1에 match를 하게 된다.

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


makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
명령으로서 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 문서를 살펴 보기 바란다.


facebook posting twit

  • cgi File Downloading Module
  • AES (Advanced Encryption Standard) Source Code
  • Simple Socket Server based on C
  • UNIX에서 LOCALTIME 구하는 방법 & GetTicketCount()
  • how to lock workstation? seems like shutdown
  • 웹서버 및 웹메일 설정 방법
  • 음력-양력 변환기
  • PHP에서 메일 함수가 동작하지 않을때
  • 웹페이지 긁어서 타이틀 뿌려주는 소스
  • PHP로 객체지향 프로그래밍 하는 방법
    Tagged on:         
  • Leave a Reply