집에서 Mac으로 메일서버 운영하기 (1)
1/5  준비와 계획 : 현상을 이해하고 그에 맞는 계획짜기

Prologue

사용자 삽입 이미지작년 5월에 집에서 Mac mini를 가지고 서버를 구축하기 시작했습니다.  개인적으로 두가지 목적이 있었죠.  하나는 오픈소스의 위력을 직접 체험해 보는 것이었습니다.  두번째는 개인적인 Life Log를 가지고 싶었던 것이었죠.   첫번째 목적은 저의 직업과도 관계가 있었고 두번째 목적은 싸이월드나 다른 동호회 활동을 하면서 많은 글을 남겼지만 지금에 와서는 제가 실제로 가지고 있는게 하나도 없어서 그걸 모아두기 위함이었습니다. 서비스업체들의 간섭을 받지 않고 말이죠.

현재 사용중인 MySQL이나 태터툴스의 완성도나 기능에 진짜 많이 놀랬습니다. 또한 MAMP같은 유용한 오픈소스 툴이 공짜로 돌아다니는 걸 보고 감탄했죠.  정말 새로운 세상에 들어온 것이었습니다.  처음에 서버를 구축할 때 헤매기도 많이 헤맸습니다. 처음부터 끝까지 Step-By-Step으로 쉽게 구축을 도와주는 문서들이 없어서 더 그랬죠.  그래도 어쨋든 1차적 목표인 블로그를 구축했고 그걸 구축하면서 저와 같은 일반 유저들에게 조금이라도 기여를 해봐야겠다는 생각을 가지게 되었습니다.   그래서 ‘Mac으로 집에서 서버를 운영하고자 하는 분들에게 유용한 가이드를 만들자’라고 생각을 하게 되었고 이미 제 블로그를 통해 블로그를 구축하는 방법을 제시했습니다.

그러나 여기가 끝은 아닙니다. 앞으로 Mac OS X에서 가동할 수 있는 많은 솔루션들의 설치와 사용방법에 대한 가이드를 제작할 예정입니다.   오늘은 오랜 공백을 깨고 메일서버에 대한 가이드를 시작합니다.   사실 작년에 한번 도전했다가 여러가지 시행착오를 겪으면서 실패한 이후로 회사일때문에 바빠서 시간을 내지 못했었습니다.
그랬다가 한달쯤 전부터 매일 밤 퇴근해서 인터넷을 항해하고 제 Mac mini와 씨름을 한 끝에 메일서버를 성공적으로 구축하게 되었습니다.

현재 메일서버말고도 컨텐츠 관리나 커뮤니티를 구축하기 위한 솔루션인 PunBB와 Drupal을 테스트중입니다. 이 녀석들을 위해 지난달 제 Mac mini의 메모리도 2GB로 업그레이드 해두었죠.

사용자 삽입 이미지메일서버를 설치하면서 특히 애를 먹었던 것은 최악의 네트워크 환경 때문이었습니다.  저는 ISP로 유아시스를 이용중인데 특정 아파트 단지에서만 사용하는 ‘LAN’입니다.  유아시스에서는 고정 IP서비스를 하지 않을 뿐만 아니라 웹서버나 메일 서버를 가동하기 위해 일반적으로 사용되는 TCP포트인 80번, 25번포트 등을 모두 막아 놓아서 그것을 우회하는 꽁수가 필요했습니다.   만약 여러분이 집에서 서버를 구동하는데 좌절한 경험이 있다면 거의 대부분이 이때운일 것입니다.

우여곡절을 겪으면서 이 문제를 모두 해결했기 때문에 아마 제가 발행하는 가이드가 여러 경우의 수를 모두 커버하는 유용한 가이드가 될 것이라고 생각됩니다.  이번 메일서버 구축하기 가이드는 5회에 걸쳐 연재될 예정입니다.  설치와 세팅등은 지난번 블로그 때보다 더 복잡하다고 할 수 있습니다만 차근차근 따라만 오시면 100% 성공할거라 생각됩니다. 그럼 이번 연재시리즈의 타이틀을 먼저 살펴볼까요?

1. 준비와 계획 (오늘)
2. Postfix & Server Setting
3. DynDNS Setting
4. Squirrel Mail 설치와 세팅
5. 전체 기능 맛보기

이미 Gmail등의 확고한 메일 서비스를 이용하고 있는데 자신만의 메일서비스가 왜 의미가 있을까요 ?    저의 경우엔 두가지 이유가 있습니다.  제 자신만의 도메인인 demitrio.com이 자랑스럽게 붙어 있는 나만의 메일 서비스란 것과 용도에 따라 여러 계정을 동시에 운영할 수 있다는 것이죠.    두번째는 태터툴스, Drupal, PunBB등 앞으로 소개할 서비스들이 자체적인 SMTP서비스를 요구한다는 점입니다.    커뮤니티에 등록한 모든 회원들에게 자동으로 메시지를 보내거나 단체메일등을 보낼 때 유용하죠.

물론 용량압박도 없고 사용중인 서비스가 사라져 버리는 경우에도 남아있을 수 있죠.  저 역시 지난 10여년 동안 3-4차례 메일서비스를 옮겨다닌 기억이 있습니다.  모두 지금은 사라져버린 서비스들입니다.

구축계획

먼저 저 스스로의 요구사항을 정리해 보고 이 요구사항에 합당한 대안을 찾아보도록 합시다.

저는 집과 회사에서 메일을 사용하고 싶고 급한일로 PC를 가지지 않았을 때 가까운 PC방에서 WEB을 통해 집에 있는 서버의 웹메일로 접근해 메일을 확인하고 싶습니다. 

1.집에는 두대의 Mac과 한대의 윈도우즈 머신이 있는데 두대의 Mac에서는 Mail app를 이용할 계획이고  IMAP계정이나 POP3계정을 만드려고 합니다. 

2. 회사에서는 Windows XP가 설치된 노트북을 가지고 있는데 모질라 재단의 Mail 어플리케이션인 선더버드를 이용하려고 합니다.  물론 IMAP이나 POP3 계정을 만드려고 합니다.

3. 외부에서 긴급하게 메일을 확인할 일이 있을 지 몰라서 가까운 PC방을 이용해 WEB으로 제 메일함을 확인하고 싶습니다.

4. 태터툴스, PunBB, Drupal은 각각 회원인증과 초대 등의 기능을 수행하기 위해 로컬서버에 설치된 SMTP서버를 찾는데 이를 위해 외부서버가 아닌 Mac mini서버에 SMTP서비스가 가동되어야 합니다.

저는 demitrio@demitrio.com이란 메일 주소를 사용할 겁니다.  그리고 사용목적에 따라 여러개의 계정을 더 만들어서 운영할 예정입니다.

이 요구사항을 그림으로 그려보니 아래와 같은 형태가 되겠습니다.

사용자 삽입 이미지

구축계획의 향후 이미지


그림으로 요구사항을 정리해보니 인터넷을 통해 오픈소스를 뒤져 어떤 것을 찾아내야 하는지 명확해 졌습니다.
위의 그림을 보면 크게 4개 지역으로 구분되는데 색깔이 다른것은 옵션사항으로 저와 같이 메일서비스에 필요한 25번 포트가 ISP에 의해 막혀 있을 때만 해당됩니다.  (마지막 시나리오 부분에서 자세히 다룹니다)

우리가 찾아 내야할 것들은 크게 세가지입니다. 
먼저 엔진이 될 Mail Server를 어떤 것으로 할지 선정해야 합니다.  
두번째는 웹메일 솔루션입니다.  아마 이 웹메일은 Mail 엔진과 연동하여 메일을 보여주고 보내는 기능을 하게 될 것 같습니다.  마지막으로는 옵션사항으로 업계 표준인 25번 포트가 아닌 비표준 포트로 메일을 릴레이 해줄 DNS서비스 업체입니다.

다음절에서 이 세가지 대안을 찾아 선정하고 추가로 준비해야 할 사항들이 무엇인지 알아보기로 하죠.    아 참 여러분들은 이미 MAMP를 설치했다고 가정하고 PHP, MySQL, Apache의 설치등에 대해서는 이번 시리즈에서 다루지 않습니다. 자세한 사항은 제 블로그의 예전 포스트를 참조하시기 바랍니다.

세가지 대안선정

1) Mail Server를 찾아서…

사용자 삽입 이미지SMTP 기능과 IMAP, POP3 서비스를 담당할 서버를 찾기 시작했는데 의외로 싱겁게 끝나버렸습니다.  이미 OS X내에 내장이 되어 있다는 겁니다.  저는 처음에 OS X Server에만 내장이 되어 있고 일반 OS X에는 없는 줄 알았습니다만 일반 OS X에도 위의 기능들을 수행할 녀석들이 이미 모두 설치되어 있어서 출격채비를 갖추고 있었습니다.

Postfix란 녀석이 그 주인공인데 예전에는 Sendmail이 기본으로 설치되어 있다가 보안이나 속도의 문제로 인해 몇년전 부터 Postfix로 대체 되었다고 하더군요.  이 녀석을 조정해서 메일을 보내고 받고하는 일이 모두 가능하겠습니다. 

물론 찾는 과정중에 이런 저런 대안들이 저의 소나와 레이다에 걸려들었지만 이미 설치되어 있다는 사실을 발견하고 막바로 다 잊어버렸습니다.  그래서 다른 대안들은 아예 소개하지도 않겠습니다.   게다가 Postfix란 녀석이 여러 사람들의 글을 읽어보니 여러면에서 아주 깔끔하게 임무를 잘 수행하는 모양입니다.

반면에 세팅과 구동은 까다로운 것으로 알려져 있습니다 -.-

2) WEB Mail은 어떤걸로? …

사용자 삽입 이미지Postfix를 찾는 과정에서 그와 어울리는 add-in과 추가기능을 소개하는 페이지를 발견했는데 여기에 Squirrel Mail이 소개되어 있었습니다. 홈페이지에 찾아가서 시스템 요구조건등을 보니까 이미 MAMP를 통해 모두 설치한 것들이었습니다.  그리고 매우 심플하고 간단했습니다. 

모양도 좋고 기능도 파워풀하면 더 좋겠지만 딱 이정도면 충분하다고 판단했습니다.  게다가 Squirrel Mail은 오픈소스 웹메일계에서는 가장 널리 쓰이는 대안중 하나더군요

자 이건 Mac OS X에 기본으로 설치되어 있지 않은 패키지이기 때문에 설치를 위해 다운로드 받아야 합니다.  여기에서 이리 다운로드 받아 놓으시는 것이 좋겠습니다.

3) Mail Relay Service (Optional)

사용자 삽입 이미지뒤에서 우리는 두가지 시나리오에 따라서 그 중 나의 환경에 맞는 하나의 시나리오를 택하게 될텐데 최악의 시나리오 일때 필요한 대안입니다.  25번 포트가 막혔을 때 그것을 돌파할 수 있게 해주는 우회로를 제공해 주는 서비스죠. 

이런 서비스를 제공하는 업체로 DynDNS가 가장 신뢰도도 높고 유명합니다.  그러나 릴레이서비스는 공짜가 아니죠.  이 시점이 여러분이 유료로 이 서비스를 이용하여 메일서버를 구축할 것인지 결정을 내려야 할 순간입니다.  DynDNS는 일반적인 도메인 등록 서비스뿐 만 아니라 홈페이지 리디렉션(WEBHop) 서비스와 Dynamic DNS(DDNS), 메일 릴레이와 포워딩 등을 종합적으로 제공하는 회사입니다.

우리가 필요한 서비스는 Outbound Mail(Mailhop Outbound)과 Inbound Mail(Mailhop Relay) 두종류이며 각각 9.95$(1년간 하루 150통까지), 39.95$(1년간, 한번에 10M까지 무한대, 스팸차단 및 바이러스검색 무료) 입니다.  쉽게 말해 년간 메일서버를 운영하는데 5만원 정도 낸다고 생각하시면 됩니다. 

아쉽게도 위와 같은 서비스를 무료로 제공하는 업체는 발견하지 못했습니다. 

작업진행을 위한 추가준비물

자 이제 몇가지 도구만 더 챙기면 됩니다.  주로 메일서버의 세팅에 관련된 것들입니다.  위의 여섯가지를 자주 사용할 건데 두가지는 이미 우리가 가지고 있는 것들입니다.
 
사용자 삽입 이미지Postfix는 일반적으로 설정하기 힘들다고 알려져 있고 실제로도 처음 접하는 분들은 까다롭게 느끼실 수도 있습니다.  저 역시 Postfix의 세팅을 위해 여러가지를 들쑤시다가 결국 전용유틸리티인 Postfix Enabler를 발견하고는 막바로 구매해 버렸습니다. (Shareware로서 9.99$입니다.  여기에서 구하시면 됩니다)
사실 이제와서 보니 인터넷에서 Postfix에 대한 정보를 많이 뒤지고 다니고 또 만지고 해서 이제 저는 이 유틸리티가 그닥 필요하지 않지만 처음 Postfix를 만지는 분들이라면 거의 암담 그 자체입니다.

사용자 삽입 이미지이제부터 이런저런 Mac OS X를 건드리려면 Finder에서는 Hidden으로 되어 있는 화일들을 터미널 등을 통해 수정해야 하는데 UNIX와 내장된 에디터에 익숙치 않은 분들은 이마저도  어려울 수 있기 때문에 Onyx라는 간단한 유틸리티를 통해 보이지 않게 설정된 화일들을 Finder상에서 나타나게 하여 탐색, 수정하는 것이 가장 쉬워보이는 길 같습니다. 
다행히 Onyx는 무료이며 Mac OS X Download Page를 통하여 쉽게 구할 수 있습니다.
제작사는 Titanum Software 이고  물론 그 홈페이지에서도 다운로드 하실 수 있습니다.

사용자 삽입 이미지설정화일이나 소스화일을 수정하기 위해서는 괜찮은 에디터가 있는 것이 여러모로 편리한데 Smultron과 TextMate가 그런 역할을 합니다.  Smultron은 무료이고 역시 Mac OS X Download Site 에서 구할 수 있지만 Textmate는 상용소프트웨어 입니다.  저는 지난번 MacHeist 공구때 싸게 구매해서 처음 사용해 봤는데 정말 파워풀한 에디터더군요.  원래 가격은 39유로로서 선뜻 구매하기가  만만찮습니다(?)    무료인 Smultron도 상용 못지 않게 파워풀한 기능을 자랑합니다. 둘중 하나만 선택하시면 됩니다.

Mac OS X에 내장된 ‘텍스트편집기’같은 간단한 에디터는 왜 안되냐고 하시겠지만,  특정 인코딩으로 되어 있는 문서들은 아예 열리지도 않기 때문에 에디터가 필요하긴 필요합니다.

일단 무료인 Smultron을 사용해 보시는 것이 아무래도 좋겠죠

사용자 삽입 이미지네트워크 유틸리티는 Applications/유틸리티에 기본으로 들어있는데 TCP서비스 포트를 확인하기 위해 수시로 사용될 겁니다.  자그마한 유틸리티답지 않게 꽤나 다양한 기능을 가지고 있습니다.
이러한 PortScan기능 말고도 Ping이나 Lookup, TraceRoute등 8가지 기능을 가지고 있습니다.
세팅을 하면서 하도 자주 사용하다 보니 이제는 Dock에 올려놔 버렸습니다.   처음엔 이런게 기본으로 있는줄도 몰랐네요.  조금만 찾아봤으면 금방 알아냈을 텐데…ㅉㅉ

사용자 삽입 이미지.Mail App역시 설치와 작동이 잘 되었는지 Test하기 위해 자주 사용하게 될겁니다.    조금 더 독특한 걸 원하시면 모질라재단의 Thunderbird도 좋습니다.    저 역시 최근에 메일서버 세팅을 끝내고 이 두개의 App사이에서 갈등하고 있습니다.

이렇게 우리의 대안선정과 준비물 마련은 모두 끝났습니다.  이제 다음절에서 두개의 시나리오 중 어느것이 나에게 맞는 건지를 알아볼 차례입니다.

두개의 시나리오

ISP에서 25번 포트를 막아놓은 여부에 따라 시나리오는 두개로 나뉩니다.   25번 포트가 막히지 않은 분들이라면 정말 복받으신 겁니다.  지금부터 제가 설명하려고 하는 전체 분량의 1/4만 읽으시면 막바로 적용이 가능하거든요.

먼저 내 컴퓨터에서 어느 포트가 열려있는지 확인해보죠.   네트워크 유틸리티를 이용해 아래 그림과 같이 1~500번까지의 포트들을 스캔해 보세요.  IP는 127.0.0.1로 하시면 됩니다.  이러면 열려있는 포트들의 리스트가 나타나죠.
사용자 삽입 이미지
물론 ISP에서 어떤 포트를 막았는지는 나타나지 않습니다.   나중에 메일서버 세팅을 마치고  Postfix를 구동시키고 다시 스캔해보면 25번 포트가 열려있다고 나와야 정상적으로 서비스가 나가고 있는 겁니다.    서비스를 시작하지 않은 상태에서는 포트가 열려있다고 나오지 않습니다. 

그럼 이번엔 DynDNS에서 내 서버쪽으로 스캔을 해보도록 하죠.   지난번 포스팅에서 알려드렸지만 오늘 다시 알아보겠습니다.  로그인을 하시고 나서 Support/Tool/Network Port Tool에 들어가서 아래 그림과 같이 자신의 서버주소와( IP를 입력하셔도 됩니다) 포트를 입력합니다.

사용자 삽입 이미지
그리고 나서 Send 버튼을 누르면 뭔가 메시지가 나올겁니다.  경우의 수는 3가지입니다.  저의 경우에는 아래와 같이 나왔죠.

An attempted connection to www.demitrio.com:25 timed out. This typically
indicates that traffic to that port is being actively blocked by
either a firewall or your ISP.

ISP에서 25번 포트를 막은 것 같다고 메시지가 나왔죠.  그럼 제가 우회하기 위해 만들어 놓은 10025번 포트로 다시 스캔을 해보죠.   그렇게 하니까 아래와 같은 메시지가 나왔습니다.


www.demitrio.com:10025 is open and accepting connections. This indicates
the port is not being blocked by either a firewall or your ISP and
is currently operational.

포트가 오픈되어 있다는 메시지입니다.  이제 다시 587번 포트로 스캔을 해보도록 하죠.

An attempted connection to www.demitrio.com:587 was refused. This typically indicates
that there are no services available on that port, but that it is
NOT being blocked by a firewall or your ISP.

587번 포트는 ISP에서 막지는 않았지만 그렇다고 제 서버에서 서비스되고 있지 않다고 나오죠.   메시지는 이렇게 3종류고 Port 스캔을 통해 알아낼 수 있습니다.
만약 여러분이 25번 포트를 스캔하여 ‘Timeout’ 메시지가 나타난다면 시나리오2에 해당합니다.   ‘Open’이나 ‘Refused’ 메시지가 보인다면…축하합니다 시나리오1에 해당합니다.

자 이제 자신이 어느 시나리오를 따라가야 할지 알았다면 각 시나리오별로 작전을 짜야겠습니다.

시나리오 1 : 25번 포트가 막히지 않은 상태

DynDNS등을 통하여 메일 릴레이 서비스를 받을 필요도 없고 비표준 포트를 사용하기 위하여 서버의 세팅을 바꿔야 할 일도 없습니다.    현재 OS에 설치된 Postfix를 가동시키고 도메인업체의 네임서버에 자신의 MX레코드를 올리면 바로 끝납니다.  

인바운드 메일의 경우 MX레코드는 곧바로 나의 메일서버를 가리키도록 설정하면 되기 때문에  외부의 empal.com과 같은 웹메일과 막바로 메일을 주고받을 수가 있게 되죠.   아웃바운드 메일은 MX레코드 설정과 상관없습니다.

앞으로 설명할 Postfix, Squirrel Mail, Relay DNS설정, 서버 설정등에서 상당부분이 필요없어 집니다.  한마디로 행복한 케이스죠.  

사용자 삽입 이미지

시나리오2 : 25번 포트가 ISP에 의해 막힌 상태

이렇게 되면 문제가 복잡해집니다.   모든 메일서버들은 25번 포트를 표준으로 사용하고 있기 때문에 그 포트가 막혀있으면 직접적으로 메일을 주고 받을 수가 없습니다. 
그래서 나온 대안이 Relay서비스 인데 한마디로 ISP 밖의 서비스 업체가 비표준 포트로 나의 메일을 대신 가져와주고 또한 배달해 줘야 합니다.

DyDNS같은 기관에서 그런 서비스를 제공하는데 말씀드렸듯이 유료이고 용량이나 건수제한 등 여러가지 제약사항이 있습니다.  그러나 비표준 포트로 메일을 주고 방아야 할 사람들에게는 가뭄에 단비와 같은 서비스죠.

먼저 Outbound 메일의 경우를 보시죠.  붉은색 화살표로 표시된 부분인데.   저는 집의 메일서버를 이용해 anybody@empal.com으로 메일을 보내고 싶습니다.     먼저 Mac mini의 설정을 고쳐 SMTP서비스 포트를 25번에서 10025포트로 고쳐줍니다.  그리고 막바로 emapl에 발송하지 못하고 DynDNS에 있는 Outbound.mailhop.org서버에 메일을 릴레이 해달라고 요청합니다.
이미 DynDNS와는 비표준 포트인 10025번 포트로  메일을 주고 받는다고 약속이 되어 있는 상태이죠.     outbound.mailhop.org 메일서버는 저의 릴레이요청을 수락하여 표준포트인 25번을 통하여 empal에 저의 메일을 전달합니다.     그러나 받을 사람인 anybody@empal.com은 마치 demitrio.com에서 직접 날아온 메일로 인식을 하게되죠.  이것이 DynDNS의 Mailhop Outbound서비스입니다. 

Inbound메일의 경우는 조금 더 복잡한데 anybody@empal.com이 demitrio@demitrio.com에게 답장을 보내면 먼저 DNS서비스에서 demitrio.com의 MX가 뭔지를 묻습니다. (파란화살표1)  그럼 DynDNS는 MX1.mailhop.org라고 가르쳐 주죠. (파라화살표 2)  emapl에서는 그 조소가 demitrio.com의 주소로 인식을 하고 그쪽 서버의 25번포트로 메일을 발송합니다. (파란화살표 3)   마지막으로 mx1.mailhop.org서버는 저와 약속한 대로 그 메일을 릴레이 시켜서 demitrio.com의 10025번 포트로 메일을 발송합니다.

이렇게 해서 결국 ISP가 블로킹해 놓은 25번 포트를 우회할 수 있는 것이지요.
하지만 복잡하고 DynDNS에 추가 서비스 비용까지 지불해야 합니다.    그래도 저는 그 정도 비용을 지불할만한 가치가 있다고 판단했죠.

사용자 삽입 이미지
이제 준비물도 다 마련하고 자신의 시나리오도 결정되었으니 다음에는 본격적으로 메일서버를 설치해 보도록 하죠.    전략이 명확하게 섰으니 이제부터는 일사천리입니다.
다음시간엔 Postfix를 설치하고 서버의 세팅도 바꾸어  보도록하죠.

오늘 포스트는 주저리주저리 정말 길군요…죄송합니다 -.-

Facebook Comments