지금 이순간에도 수십만통의 메일 또는 광고메일, 스팸메일이 인터넷을 통해 전달되고 전달을 받습니다.
그러므로 실제 외부로 부터 메일이 도착하거나 스스로 메일을 발신할때 해당 메일은 어딘가에 저장되어야 합니다.

메일이 저장되는 장소를 메일함(mailbox)라고 합니다.

메일함은 mbox와 maildir 두가지 유형이 있습니다.
왼쪽의 유형이 mbox방식이고 maildir방식이 오른쪽입니다.

차이점은 mbox는 메일박스에 메일을 한번에 몽창 가둬서 관리하는 방식이고, maildir은 메일함 하단에 cur, new, tmp로 구분하여 읽거나 송신한 메일은 cur디렉토리에, 읽지 않은 메일은 new디렉토리에, 작성중인 메일은 tmp에 보관하는 방식입니다.

성능상 maildir 방식이 더 유리하고, maildir이 좀 더 현대적인 방식이라고 합니다. 메일함의 결정은 dovecot 프로그램 패키지를 설치할때 결정됩니다. 물론 maildir방식으로 진행될 것 입니다.

메일함과 관련하여 아래의 글을 한번 읽어보시면 큰 도움이 될 것 입니다.
http://www.linuxmail.info/images/illustration-mbox.png

또 하나 고민해야 할 것이, 리눅스유저메일 방식을 취할 것이냐, 가상메일함(Virtual mailbox)방식을 취할 것이냐를 결정해야 합니다.

이게 무슨 말이고하면, 리눅스는 기본적으로 다중사용자 운영체제 입니다. 시스템 관리자는 다수의 사용자의 계정을 만들어 낼 수 있습니다.

postfix에 별다른 설정을 하지 않는다면, postfix는 리눅스유저메일 방식을 지향 합니다.(지향이라기 보다 따로 설정을 하지 않았기 때문이죠.)

2부에서 main.cf 설정시 home_mailbox = Maildir/ 이라고 되어 있었습니다.

이렇게 설정하면 리눅스 유저메일방식입니다.

즉, NAS에 설치된 Ubuntu 리눅스에 사용자가 Johnson , Mike 이렇게 2명이 있다면, 각각의 사용자의 home 디렉토리 하단에 Maildir이라는 디렉토리 밑으로 메일이 수발신이 이뤄지는 방식 입니다.

직관적이라 단순하긴 하지만, 이런 리눅스유저메일 방식은 실제 운용에 문제가 있습니다.

첫째, 메일서버를 운용하여 실제 여러 사용자에게 메일계정을 배분하고자 할때 리눅스 계정까지 배분해줘야 합니다. NAS가 호스팅을 목적으로한다면 문제가 없겠지만, 호스팅의 목적은 전혀 없이 단순히 메일계정만을 주고 싶은데 리눅스 계정을 생성해줘야하는 것이지요.

둘째, 메일 계정의 아이디와 비밀번호는 리눅스 계정명과 비밀번호와 똑같기 때문에 이는 결국 원하지 않는 사용자가 자신의 NAS에 시스템적으로 접근가능하다는 소리고 결국 보안관리 측면에서 상당히 난이도가 높아집니다.

셋째, 용량적인 문제로 하드디스크의 재배치 또는 교체 및 추가 등의 파일시스템 수준의 작업이 필요 할때 메일서버로 인하여 사용자 계정이 너무 많으면 그 관리가 너무 복잡해집니다.

이러한 리눅스유저메일 방식의 단점을 한방에 해결해 줄 수 있는 방식이 바로 가상메일함(Virtual mailbox)방식이며 postfix는 이것을 완벽히 지원합니다.

Ubuntu 리눅스에 vmail이라는 사용자 계정을 하나 만들고 메일계정을 통한 메일은 사용자 vmail 디렉토리 하단에 모두 모아놓는 것이죠. 각 메일의 개별 계정들은 MySQL을 통해 사용자 계정을 인증하고, 각 인증된 사용자는 자신의 메일에만 접근이 가능하게 하는 방식 입니다.

tree 커맨드를 이용하여 가상메일함으로 구성된 메일박스 디렉토리를 열거해보면 아래와 같습니다.
(tree 커맨드가 실행이 되지 않는다면 , sudo apt install tree 를 통해 설치하세요)

Copy to Clipboard

vmail디렉토리 밑에 good-daddy.com 과 bad-daddy.com 이라는 두가지 메일 도메인이 있고, good-daddy 메일 도메인에는 kildong.kim이라는 사용자 1명이 있습니다. 그리고 bad-daddy.com 메일 도메인에는 kildong.kim과 namyoung.kim 이라는 두명의 사용자가 있는게 직관적으로 확인이 됩니다.

사용자 계정은 MySQL에 저장되어 관리되고, 사용자의 실제 메일은 vmail 하단에 물리적인 디렉토리로 나뉘게 되는 것 입니다. 그러므로 사용자가 많아져 메일함의 크기 때문에 하드디스크를 늘려하는 경우, 큰용량의 하드디스크를 장착후 /home/vmail 디렉토리로 마운팅 시키면 NAS에서 메일서버 관리가 아주 용이하겠지요?

Configuration Parameter 변경(Changed)
virtual_alias_maps proxy:mysql:/etc/postfix/mysql/virtual_alias_maps.cf
virtual_mailbox_domains proxy:mysql:/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_maps proxy:mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_mailbox_base /home/vmail
virtual_mailbox_limit 5120000000
virtual_minimum_uid 5000
virtual_transport virtual
virtual_uid_maps static:5000
virtual_gid_maps static:5000
local_transport virtual
local_recipient_maps $virtual_mailbox_maps

2부 postfix 설치 main.cf 에서 이미 지정해 놓은 파일명들이 있는데요.

virtual_alias_maps, virtual_mailbox_domains , virtual_mailbox_maps에 대한 변수값을 설정해 줬었습니다. 2부에서 설명하기에는 너무 복잡해서 이에 대한 설명이 없었지만 여기서 설명드리겠습니다.

/etc/postfix/mysql/virtual_alias_maps.cf
/etc/postfix/mysql/virtual_domains_maps.cf
/etc/postfix/mysql/virtual_mailbox_maps.cf

해당 변수값들은 위에 같이 각각의 파일명을 가르키고 있으며, 아래에 나올 설명을 통해 해당 파일들을 해당 경로에 만들어 두셔야 합니다.

Copy to Clipboard

첫번째, 이메일주소 별칭에 대한 매핑파일 입니다.
/etc/postfix/mysql/virtual_alias_maps.cf

Copy to Clipboard

두번째, 이메일주소 별칭에 대한 매핑파일 입니다. /etc/postfix/mysql/virtual_domains_maps.cf 위와 거의 똑같지만, 쿼리문이 약간 달라졌습니다.
도메인주소를 찾는 쿼리문 같죠?

Copy to Clipboard

세번째, 이메일주소 별칭에 대한 매핑파일 입니다. /etc/postfix/mysql/virtual_mailbox_maps.cf
이것도 다 똑같은데 쿼리문이 메일디렉토리를 찾는 쿼리문 같습니다.

Copy to Clipboard

여기까지 잘 따라오셨습니다. 일단 설정파일을 저렇게 만들긴 했지만, 정작 MySQL에서 데이터베이스를 만들지 않았습니다.
그러므로 데이터베이스를 만들어야 겠죠?

Copy to Clipboard

눈치 채셨겠지만, 위에 설정파일에 적어 놓은 데이터베이스명으로 지금 MySQL에서 데이터베이스를 만들고 데이터베이스의 사용자와 비밀번호를 정해주고 있는 겁니다.

실제 이메일은 파일시스템(하드디스크)에 저장됩니다. 우리가 구축하는 메일서버는 리눅스 NAS로 부터 계정을 부여받은 사용자들의 메일서버가 아니고, Virtual Domain 메일서버 입니다. 따라서, 메일 계정하나하나에 리눅스 ID를 배포하지 않을 것 입니다. 기본적으로 이메일 사용자들은 리눅스 시스템에 접근할 필요가 없습니다. 하지만, 사용자들의 메일은 파일시스템상에 저장되어야 하므로, 이메일이 저장될 공간을 마련해 줘야 합니다.

그러므로, 시스템계정으로 쓰지는 않을 것이지만, 메일들을 보관한 vmail이라는 계정을 만들고 그 계정밑에 메일을 저장하도록 하겠습니다.
(그래서 postfix의 main.cf 설정에서 virtual_mailbox_base = /home/vmail 이라는 파라메터가 있는 것 입니다.)

그러므로 vmail이라는 계정을 아래와 같이 만듭니다. 이는 일반적인 리눅스 계정이 아니고, 시스템 로그인이 되지 않는 특수 계정으로 만듭니다.

Copy to Clipboard

1강에서 이미 말씀드렸지만, 메일서버의 설치는 그 과정히 좀 고통스럽습니다. 하지만, 메일서버는 일단 구축에 성공만 하면 계정관리 빼고는 크게 신경 쓸 부분이 없고 무엇보다 자신의 고유한 도메인을 이용한 이메일의 이용과 사용자 관리로 실제 비지니스에서 활용하신다면 매우 유용하게 활용하실 수 있으므로 사업적 목표가 있으신 분이라면 꼭 도전하셔서 성공하시기를 기원합니다.

여기까지 따라오셨다면, 귀하의 메일서버 구축에 대한 열정은 확인된 것 입니다. 반드시 성공하실 수 있도록 포스트를 끝까지 해내겠습니다.

다음 포스트는 postfixAdmin을 설치하여 생성해놓은 데이터베이스의 콘텐츠를 채워 나가보겠습니다.