본문 바로가기

StoreHouse/Server

RedHat sendmail 의 access 파일 사용법

HOW-TO Configuration 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를 이용하는 것을 허락한다.
다른 rule이 거부하는 경우에도 지정된 도메인에서 오는 메일을 받아 들인다.

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파일 설정 예이다.
[root@rootman mail]# cat 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 파일의 설정예를 보면서 이해하도록 하자. 하기 싫음 말고..
[root@rootman mail]# cat 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을 실행해서 갱신해 줘야 된다.
[root@rootman root]# makemap hash /etc/mail/access < /etc/mail/access

이것으로 access 파일 강좌는 끝.. !!!!!
출처 www.superuser.co.kr