HOW-TO Configure local-host-names
local-host-names 파일은 메일 수신자를 설정하는 파일이다. 메일 수신자라는 것은 sendmail에서 받아들일 메일의 도메인과 호스트를 의미한다. 즉 ID@dvc.sarang.net으로 오는 메일을 받기 위해서는 dvc.sarang.net을 메일 수신자로 등록해 줘야 된다. 여러 도메인이 운영중인 호스팅 서버에서 각 도메인으로 오는 메일을 수신하기 위해서는 이 설정이 꼭 필요하다.언제 local-host-names 파일을 수정해야 되나요?
하나의 도메인으로 운영을 하는 시스템은 host_name만 도메인명과 같게 설정해 주고 zone파일만 제대로 설정했다면 해당 도메인으로 오는 메일을 아무런 문제없이 받을 수 있을 것이다. 하지만 2개 이상의 도메인이 하나의 시스템에 등록되어 있고 그 도메인으로 메일을 받아야 될 때는 반드시 local-host-names 파일에 도메인을 등록 시켜 줘야 된다. 즉 메일 수신자를 추가 시켜 줘야 되는 것이다.
rootman.co.kr의 서버에는 dvc.dongeui.ac.kr과 dvc.sarang.net 이라는 도메인이 함께 운영중이다. 이 시스템의 host_name은 rootman.co.kr로 설정되어 있어서 ID@rootman.co.kr로 오는 메일은 아무런 설정없이 메일을 받을수 있다. 하지만 ID@dvc.dongeui.ac.kr와 ID@dvc.sarang.net으로 오는 메일은 local-host-names에 dvc.dongeui.ac.kr과 dvc.sarang.net을 등록을 함으로써 메일을 받을 수 있기 때문에 아래와 같이 등록해 놓은 상태이다.
# local-host-names - include all aliases for your machine here.
rootman.co.kr
dvc.dongeui.ac.kr
dvc.sarang.net
rootman.org
위의 설정 방법은 아주 간단하다. 그냥 메일 수신자에 해당하는 도메인을 한줄에 추가하면 된다.
주의할 것은 local-host-names 파일을 수정한 후에는 반드시 sendmail을 restart 해야지 수정 사항이 적용된다.
HOW-TO Configuration virtusertable
약속 : 이 강좌에 사용된 "1차 목적지"는 발신자가 메일을 보낼 때 사용한 받는 사람의 메일 주소를 의미하고 "최종 목적지"는 메일이 최종적으로 배달될 목적지를 의미한다.
virtusertable은 여러개의 도메인이 운영중인 호스팅 서버에서 아주 유용하게 사용할 수 있는 가상 유저 설정과 메일 포워딩에 관한 설정파일이다. 시스템에 여러개의 도메인이 운영중이고 각각의 도메인별로 메일 서비스를 하고 있다면 꼭 이 강좌를 읽어 봐야 될 것이다.
virtusertable 파일과 /etc/aliases 파일과의 차이점은 뭔가요?
사용자간의 메일 포워딩에 대한 설정과 가상 메일 유저 설정은 /etc/aliases 파일로도 가능하지만 /etc/aliases 파일의 "1차 목적지" 설정은 메일 아이디에 대해서만 설정할 수 있기 때문에 들어오는 메일의 도메인까지 인식을 해서 메일을 포워딩 해야 될 경우에는 virtusertable을 사용해야 되는 것이다. 하나의 도메인만 운영하고 있다면 메일 포워딩과 가상 메일 유저등의 설정은 /etc/aliases 파일을 수정해서 사용하는 것이 편리할 것이다.
virtusertable 파일의 설정 형식은 다음과 같이 아주 간단하다.
[1차 목적지]에 설정할 수 있는 것들
1. /etc/passwd 파일에 존재하는 실제 시스템 사용자명
2. /etc/passwd에 등록되어 있지 않은 가상 유저
3. 가상 유저 또는 실제 시스템 유저명을 포함한 완벽한 mail 주소(admin@rootman.org, virtuser@dvc.dongeui.ac.kr)
[최종 목적지]에 설정할 수 있는 것들
1. /etc/passwd 파일에 존재하는 실제 시스템 사용자명
2. 메일이 포워딩 될 외부 메일 주소(il-yoon@hanmail.net, yunil@dreamwiz.com)
그럼 지금부터 설정 예를 보면서 어떻게 설정이 이루어 지는지, 또 virusertable이 어떠한 경우에 사용되는지 살펴보자
admin rootman
yunil rootman
network purmae
wonjae purmae
위의 설정중에 처음 두줄이 의미하는 것은 수신자가 admin@rootman.org와 yunil@rootman.org로 되어 있는 메일은 모두 계정 사용자 rootman의 메일 박스로 포워딩됨을 의미하다. 그 다음 두줄도 마찬가지로 수신자가 network@rootman.org와 purmae@rootman.org로 되어 있는 메일은 모두 계정 사용자 purmae의 메일 박스로 포워딩 된다.
그런데 만약 하나의 서버에 rootman.org와 dongeui.ac.kr이라는 두개의 도메인이 운영되고 있을 때는 약간 황당한 경우가 생기게 된다. 계정 사용자 rootman은 rootman.org와 관련이 있는 사용자고 purmae는 dongeui.ac.kr과 관련이 있는 사용자라고할 때 계정 사용자 rootman은 당연히 admin@rootman.org와 yunil@rootman.org라는 메일 주소를 사용할 것이고 계정 사용자 purmae는 network@dongeui.ac.kr과 wonjae@dongeui.ac.kr이라는 메일 주소를 사용할 것이다. 하지만 rootman은 원하지도 않는 admin@dongeui.ac.kr과 yunil@dongeui.ac.kr를 사용해도 메일은 모두 rootman의 메일 박스로 포워딩 되게 된다. 위의 설정은 메일 아이디로만 설정해 놓았기 때문에 @(at)뒤의 호스트 네임 즉 도메인까지는 신경을 쓰지 않기 때문이다.
이러한 문제는 하나의 도메인만 운영하거나 여러개의 도메인을 운영하더라도 중복되는 메일 아이디를 설정할 일이 없는 시스템에서는 별 문제가 안 되겠지만 여러개의 도메인이 운영되고 있는 시스템에서 같은 메일 아이디를 도메인별로 제공해야 될때 문제가 될 수 있다. 예를 들면 호스팅 서버에서 각 도메인별로 admin@domain.com이라는 메일 아이디를 해당 사용자에게 부여해야 될때가 있을 것이다. 이러한 문제를 해결하기 위해 virtusertable에서는 [1차 목적지] 설정에 완전한 메일 주소 즉 호스트까지 표기를 해서 설정을 할 수 있게 되어 있다.
virtusertable의 이러한 기능 때문에 메일 주소의 @(at)뒤의 도메인만 다르다면 같은 메일 아이디를 여러 사용자에게 설정할 수 있을 것이다. 바로 이것이 virtusertable의 핵심 기능이다. 다시 설정예를 보고 이해하도록 하자
admin@rootman.org rootman
admin@dongeui.ac.kr purmae
위의 설정이 뭘 의미하는 지는 이제 입 아프게 얘기 안해도 알 것이라고 믿지만 다시 한번더 잔소리를..
수신자가 admin@rootman.org로 된 메일은 rootman의 메일 박스로 admin@dongeui.ac.kr로 오는 메일은 purmae의 메일 박스로 포워딩 되게 설정한 것이다.
이제 마지막으로 [최종 목적지]를 시스템 내부의 사용자가 아니라 외부의 smtp 즉 한메일등으로 포워딩 시키는 설정을 잠깐 살펴보자.
yunil yunil@dreamwiz.com
purmae purmae@thrunet.com
admin@rootman.org yunil@dreamwiz.com
너무 쉽죠! 그냥 [최종 목적지]에 메일 주소만 적어 주면 됩니다.
[정말 중요] virtusertable 파일을 수정후 반드시 makemap 명령을 해 줘야 된다. sendmail을 restart시킬 필요는 없다.
HOW-TO Configure access file
이 파일은 sendmail로의 접근 제한을 하는 아주 중요한 파일이다. sendmail은 기본적으로 localhost에 대해서만 RELAY를 허용하고 있다. 윈도우의 아웃룩이나 리눅스의 kmail 같은 메일 클라이언트에서 메일을 보낼 때 외부의 smtp서버를 사용하는 일이 있을 것이다. 사용자가 원격지의 smtp서버를 사용할려면 그 smtp 서버에서 사용자의 IP에 대해 RELAY를 허용해야 된다. 하지만 많은 IP에 대해서 무작위로 RELAY를 허용 하게 되면 SPAM에 이용될 수 있는 위험이 따르게 된다. RELAY 대상이 고정 아이피일 경우는 /etc/mail/access또는 호스트에 대해서만 RELAY를 허용해서 사용하고 유동 아이피에 대해서는 SMTP AUTH 기능을 이용하기 바란다. 참고로 SMTP AUTH 기능을 사용하면 POP3에서 메일 받듯이 아이디와 암호를 입력해서 메일을 보낼수 있게 하는 기능이다. SMTP AUTH에 대한 자세한 내용은 SMTP AUTH 강좌를 참고하세요.
RELAY가 뭐에요?
RELAY는 메일 중계를 허용한다는 의미이다. sendmail은 메일 중계 역활을 하는데 메일 중계의 대상은 메일을 발송하는 client와 메일의 목적지 "SMTP"가 된다. 이렇게 말하니까 더 모르겠죠? 헤헤헤..
지금부터 쉽게 설명을..
RELAY.. 어디서 많이 들어본 용어가 아닌가요? 육상 종목 중에 릴레이 경주가 있죠~! 똑같은 뜻입니다. sendmail에서 보내는 메일을 바톤(릴레이 경주할 때 주고 받는 짝대기)으로 생각할 수가 있다. 이 짝대기는 1번 주자에서 3번 주자에게 전달해야되는데 1번 주자가 다이렉트로 3번 주자에게 짝대기를 전달하지는 못하고 2번 주자를 거쳐서 3번 주자로 짝대기을 전달해야된다. 위의 예에서 1번 주자는 메일을 발송하는 발신자이고 2번 주자는 sendmail의 SMTP, 3번 주자는 메일의 목적지가 되는 것이다. 2번 주자(sendmail의 SMTP)는 자기 팀 1번 주자가 주는 짝대기만 3번 주자에게 전달할 것이다. 즉 정해진 주자로 부터 전달받은 짝대기(메일)만 3번 주자에게 배달할 수 있는것이다. 바로 2번 주자가 1번 주자로 부터 바톤을 받아서 3번 주자에게 넘겨주는 과정이 RELAY를 의미한다. 이제 이해가 좀 되시는지.. ?????
이처럼 sendmail은 /etc/mail/access 파일의 설정에 따라서 RELAY를 허용하는지 또는 거부하는지를 설정할 수 있는것이다.
다음은 rootman.co.kr의 /etc/mail/access 파일이다.

localhosts.localdomain과 localhost, 127.0.0.1의 RELAY 설정까지는 기본적으로 설정되어 있는 것이다.
그다음에 나오는 203.241.205.94 ~ 95 까지의 설정은 제가 설정해 준 것인데 설정의 의미는 IP주소 203.241.205.94 ~ 95를 RELAY 허용한다는 의미이다. 이 설정은 아이피 주소 203.241.205.94 ~ 95에서 루트맨의 sendmail을 이용해 메일을 보내는 것을 허락하기 위해 설정해 놓은 것이다. access 파일의 설정 형식은 다음과 같다.
[ 호스트 ] [ 접근 제어 옵션 ]
[ 호스트 ]에는 IP주소와 도메인, e-mail 주소를 설정할 수 있다. 단, 도메인을 설정할 경우 reverse mapping이 가능한 도메인을 설정해 줘야 된다. 각 호스트에 설정할 수 있는 [ 접근 제어 옵션 ]은 RELAY 설정 이외에도 아래와 같은 설정을 할 수 있다.
|
OK |
다른 rule이 거부하는 경우에도 들어오는 메일을 받아 들인다. |
|
RELAY |
메일 중계(RELAY)를 허용한다. 즉 지정된 호스트에서 Sendmail의 SMTP를 이용하는 것을 허락한다. |
|
REJECT |
메일의 수신과 발신을 거부한다. |
|
DISCARD |
좀 특이한 설정이다. sendmail은 메일을 수신하지만 받은 메일을 아무런 통보없이 페기 처분한다. |
|
"501 message" |
지정된 메일(ID@mail_address)주소 또는 도메인에 대해 발신자의 주소가 전체 또는 부분적으로 일치할 경우 메일을 거부한다. message에는 포함할 에러 메시지를 설정할 수 있다. |
|
"550 message" |
특정 도메인에 관련된 메일을 거부한다. message에는 포함할 에러 메시지를 설정할 수 있다. |
|
"571 message" |
특정 도메인 또는 메일 주소에 대해 경고 메시지를 보내고 메일을 거부한다. message에는 포함할 에러 메시지를 설정할 수 있다. |
저같이 복잡한걸 싫어하시는 분들이 위의 옵션들을 보고 분명 이런말을 할 것이다. "뭐야! 그냥 간단하게 허락하고 거부하면 되지 뭐가 저렇게 복잡해" 라고 분명히 말할 것이다. 하지만 짜증내지 마시길...
이런 복잡한걸 단순히 생각하게 만드는 것이 나의 몫이 아닌가!!.....
짜증나게 위의 옵션을 계속 읽어 보면서 루트맨 욕하지 마시고 지금부터 설명하는 것만 제대로 읽으시면 됩니다.
위의 설정들은 간단히 두 종류로 나눌 수 있다. RELAY를 허용하느냐, 또는 거부하는냐...(간단해 지는것 같나요?)
그럼 RELAY를 허용하는것과 RELAY를 거부하는 것으로 나눠 보도록 하겠다.
RELAY 허락 : OK, RELAY
RELAY 거부 : REJECT, DISCARD, "[오류번호] [문자열]"
먼저 RELAY를 허락하는 경우부터 살펴 보겠다. RELAY를 허락하는 설정은 'OK' 와 'RELAY' 이 두 설정을 사용하면 되는데 'OK'는 약간 무대포 같은 성격을 지니고 있다. 무대포. 아지죠!! 영화 "넘버3"에 나오는 송강호의 무대포 정신..
'OK'로 설정되어 있는 것을 무조건 RELAY를 허용한다고 생각하면 된다. 다른 설정은 신경쓰지 않고 무조건 RELAY...
그럼 어떤 경우에 'OK'를 설정해서 무대포 설정을 사용해야 되는지 살펴 보자. 다음은 access파일 설정 예이다.
# localhost에 대한 RELAY 설정
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
# 여기부터 추가적인 설정
rootman.org REJECT
rootman@linux.rootman.org OK
purmae@linux.rootman.org OK
위의 설정에 대한 설명을 하기 전에 잠깐 짚고 넘어가야 될 부분이 있다. access파일의 [호스트] 설정에는 도메인, IP주소, 사용자가 포함된 도메인 또는 IP주소를 설정할 수 있다. 위의 설정중에 rootman@linux.rootman.org는 메일 주소로 생각하지 말고 linux.rootman.org 시스템의 사용자 rootman에 대한 설정이라고 이해하는 것이 바른 이해다. 잘못 이해하면 안되요..
다시 본론으로 들어가서 "OK" 옵션에 대해 설명하겠다. 추가 설정 부분의 첫행에 linux.rootman.org에 "REJECT" 옵션이 설정되어 있고 그 다음 두줄에서 rootman@linux.rootman.org 와 purame@linux.rootman.org가 "OK" 설정되어 있다. 이 설정들이 뜻하는 것은 linux.rootman.org에 대해 RELAY를 허용 하지 않지만 예외적으로 rootman.org의 사용자 rootman과 purmae만 RELAY를 허락한다는 의미이다.
마지막으로 RELAY를 거부하는 옵션들에 대해서 설명하겠다. 사실 저는 RELAY를 거부하는 설정중에 REJECT 말고는 사용하는 것이 없다. 구차하게 여러 설정을 하는 것을 별로 안 좋아 하기 때문에.. 게을러서 그런가.. ^^;;
사실 sendmail의 현재 버젼에서는 기본적으로 localhost에서만 RELAY를 허용하기 때문에 REJECT와 같은 RELAY 거부를 설정할 일이 없다. 어차피 RELAY를 허용하지 않은 호스트는 거부 되기 때문에.. 그냥. 어떤것인지만 알고 넘어 가도록 하자.
이것 또한 access 파일의 설정예를 보면서 이해하도록 하자. 하기 싫음 말고..
# localhost에 대한 RELAY 설정
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
# 여기부터 추가적인 설정
linux.rootman.org REJECT
linux.rootman.org "501 Oh.. No.. linux.rootman.org"
linux.rootman.org "571 You are spammer.. "
간단하게 설정해 놓았다. 위의 RELAY 거부에 대한 설정은 중복되는 설정들이다. 그냥 설명을 위해서 임의로 설정한 것이다.
REJECT는 이제 설명 안해도 알 것이라고 믿고 오류번호와 오류 문자열을 설정한 것만 설명할께요..
linux.rootman.org에 대해 "501 Oh.. No.. linux.rootman.org"이라고 설정한 부분의 501의 위의 옵션 설명을 읽어 보시고 뒤의 문자열들은 설정하고 싶은 문자열을 설정하면 된다. 단 오류 숫자에 따라서 거부하는 방법이 조금씩 다르다.
" " 안에 오류 번호를 설정하지 않으면 기본적으로 오류 번호 550으로 설정된다.
주의사항: access 파일을 수정한 후 반드시 다음과 같이 makemap을 실행해서 갱신해 줘야 된다.
이것으로 access 파일 강좌 끝.. !!!!!
출처 : superuser.co.kr




