메뉴 건너뛰기

Dev tips

http://cafe.naver.com/linuxjjangclub/1776

Postfix SMTP 서버를 이용한 IPv6 메일(SMTP) 서버 구성

 

E-Mail 서비스는 인터넷 핵심 애플리케이션 중 하나이며, IPv6 초기부터 전환 작업이 충실하게 진행된 분야입니다. 그러나 이메일의 특성상 서버간 상호 정보교환이 많고 SMTP, POP3, IMAP4 등 다양한 프로토콜이 사용되는 관계로, IPv6 기반의 E-Mail 서비스는 타 서비스에 비해 그다지 활성화되어 있지 않습니다.

 

본 문서는 E-Mail 서비스중 SMTP(Simple Mail Transport Protocol)을 IPv6로 전환하는 방법을 설명합니다. ( POP3, IMAP 등의 프로토콜에 대해서는 향후 별도의 문서로 설명할 예정입니다. )

 

SMTP[에셈티피]는 전자우편을 보내고 받는데 사용되는 TCP/IP 프로토콜이다. 그러나, 수신 측에서의 큐 메시지능력의 제한으로 인해, 대개 수신을 위해서는 POP3나 IMAP 중의 하나의 프로토콜을 쓰는 것이 보통이며, 이러한 프로토콜은 서버에 각자의 우편함을 두고 사용자 메시지를 저장한 다음, 주기적으로 서버에 접속하여 편지를 다운로드 하는 식으로 운영된다.

다른 말로 설명하면, 사용자들은 SMTP를 메일을 보내는데 주로 사용하며, POP3나 IMAP 프로토콜은 자신의 서버에 수신되어 있는 메시지를 받아보는데 사용한다는 말이다.

유도라와 같은 대부분의 메일 프로그램은 SMTP 서버와 POP 서버를 모두 설정할 수 있도록 허용한다. 유닉스 기반의 시스템에서 sendmail은 전자우편용으로 가장 광범위하게 사용되는 SMTP 서버이다.

출처 :: 텀즈(www.terms.co.kr)

 

현재 IPv6를 지원하는 SMTP 서버(데몬)는 Sendmail, QMail, ZMailer, Postfix, Courier 등이 있습니다. 자세한 정보는 deepspace6.net의 문서를 참고하시기 바랍니다.

 

본 강좌에서는 Sendmail에 비해 보안 취약성이 적고, 설정이 간편한 Postfix를 이용하여 IPv6 SMTP 서버를 구성합니다.

 

필자가 사용한 OS는 RedHat Linux 9.0 버전입니다.

 

 

1. Postfix SMTP 데몬의 IPv6 환경 설정

 

아래 그림은 Postfix 프로젝트 홈페이지(www.postfix.org) 입니다.

 


< Postfix 홈페이지 >

 

Postfix 홈페이지에서 최신 안정화(stable) 버전을 다운로드 받습니다.

 

여기서 한가지 주의할 점은 보통 Linux 계열의 시스템에는 Sendmail이 기본적으로 설치되어 있습니다. 따라서, Postfix를 설치하기전에 Sendmail 데몬의 동작을 중지시켜야 하며, 시스템이 시작될 때 자동으로 실행되지 않도록 해주어야 합니다.

 


< Postfix 소스파일 다운로드 >

 

아래 명령을 이용하여 소스파일을 다운로드 받고, 압축을 해제 합니다. 필자는 Text 브라우저인 Lynx를 이용하여 소스를 다운로드 받았습니다.

 

$ lynx http://postfix.psshee.com/pub/official/postfix-2.3.5.tar.gz

$ gzip -d postfix-2.3.5.tar.gz

$ tar xvf postfix-2.3.5.tar

 

압축을 해제한 소스 파일를 컴파일하기 전에, 보안상의 이유로 아래 내용과 같이 Postfix 동작에 필요한 그룹과 사용자를 생성해야 합니다.

 

$ groupadd postfix

$ groupadd postdrop

$ useradd -g postfix postfix

 

그리고 소스 파일 컴파일하고 설치 합니다.

 

$ make

$ make install

 

make install 실행중에 아래 그림 처럼 각종 설정과 관련된 질문을 받게 됩니다.  기본값으로 문제가 없기 때문에, 쭈~욱 Enter키로 대답 합니다. 필요에 따라 설정을 바꾸셔도 됩니다.

 


< make install 실행 화면 >

 

설치 완료후, 이제 자신의 시스템 환경에 맞도록 설정파일의 내용을 변경합니다.

 

참고로 본 강좌에서는 IPv6와 관련된 설정만을 다룹니다. 일반적인 Postfix 데몬 설정과 관련된 내용은 타 문서를 참고하시기 바랍니다.

 

Postfix와 관련된 설정파일은 /etc/postfix 경로에 설치됩니다. 아래 그림을 보면 main.cf 파일과 main.cf.default 파일을 각각 주목하시기 바랍니다.

 

main.cf.default 파일은 말그대로 기본적인 설정 내용을 담고 있기 때문에 특별한 경우가 아니면 수정할 필요가 없습니다. IPv6와 관련된 사항은 main.cf 파일에 반영을 합니다.

 

< /etc/postfix 디렉토리 내용 >

 

각종 텍스트 에디터로 /etc/postfix/main.cf 파일을 열고 아래 그림과 같이 편집합니다.

 

우선 myhostname과 mydomain을 수정합니다. myhostname은 Mail 서버의 호스트네임을 입력하고, mydomain은 말 그대로 도메인을 입력합니다.

 

< main.cf 파일 수정 >

 

그런데 IPv6 기반의 SMTP 서버를 운영하기 위해서는 DNS 레코드의 수정도 필요합니다. 기존 IPv4 기반의 SMTP 서버는 DNS의 MX 레코드에 IPv4 주소만 기록하였으나 IPv6 기반의 SMTP 서버는 DNS의 MX 레코드에 IPv6 주소도 넣어주여야 합니다.

 

아래 내용은 acme.com 도메인에 대한 MX 레코드 설정 예제로, IPv4, IPv6 듀얼 스택으로 구성한 경우입니다.

 

 

 

이제 가장 중요한 IPv6 프로토콜 설정 단계입니다. inet_protocols 항목은 IPv4, IPv6 중 어느 프로토콜을 메일 송수신에 이용할지 설정하는 부분입니다.

 

자세한 설정 방법은 아래 내용을 참고하시기 바랍니다.

 

필자의 경우 Dusl Stack으로 동작을 하도록 inet_protocols = all 로 설정하였습니다.

 

 

한가지 주의할점은 IPv6 Only로 설정할 경우, 즉 inet_protocols = ipv6 로 설정을 하게되면 IPv6 네트워크로만 메일을 송수신할 수 있습니다. IPv6 메일 서버간에는 문제가 없으나, 만약 상태방이 IPv4 메일 서버인 경우 메일이 오가지 않는 문제가 발생합니다. 따라서 가능하면 Dual Stack으로 구성하는 것이 적절합니다.

 

아래 그림처럼 적당한 위치에 inet_protocols = all 이란 항목을 추가합니다.

( 아예 내용이 없기 때문에 추가해주어야 합니다. )

 

< inet_protocols = all 항목 추가 >

 

다음 단계는 SMTP 서버에 대한 이용 권한을 부여할 네트워크에 대한 내용입니다. 필자의 경우 특정 네트워크에 있는 모든 호스트에게 이용 권한을 부여하기 위해 mynetworks_style=subnet 을 선택하였습니다.

 

그리고, 아래 그림과 같이 이용 권한을 가진 네트워크를 정의하였습니다.

 

여기서 IPv6 서브넷은 [ ] 기호를 이용하여 표시하며, / 기호를 이용하여 서브넷 크기를 표시합니다.

 

** 아래 항목에 오류가 있습니다.

   127.0.0.1/8은 127.0.0.0/8 로 수정되어야 하며
   203.254.38.37/24는 203.254.38.0/24 로 수정되어야 합니다.

 

< IPv4, IPv6 네트워크 영역 설정 >

 

다른 항목에 대한 설정이 완료되었으면, 수정내용을 저장 하고 Postfix 데몬을 시작합니다.

Postfix 데몬을 시작하고 중지하는 방법은 아래와 같습니다.

## Postfix 데몬 시작
$ /usr/sbin/postfix start

## Postfix 데몬 중지
$ /usr/sbin/postfix stop

 

Postfix 데몬을 시작하고 netstat -an 명령을 통해 TCP/IP 정보를 확인해봅니다.

아래 그림과 같이 :::25 항목을 확인할 수 있습니다. 즉 모든 IPv6 주소에 대해 25번 포트가 열려있는 것을 알 수 있습니다. 더불어 IPv4에 대해서도 열려 있습니다. ( SMTP 서버는 25번 포트를 이용합니다. )


< netstat -an 명령 실행 결과 >

보다 구체적인 정보를 확인하기 위해 maillog 파일을 살펴봅니다.

$ tail -f /var/log/maillog

 

아래 그림을 보면, Postfix 데몬이 시작된 것을 확인할 수 있습니다.


< /var/log/maillog 내용 >

또 다른 확인 방법으로 telnet 클라이언트를 이용하여 25번 SMTP 포트에 접속해볼 수 있습니다.


< Telnet 클라이언트를 이용하여 25번 SMTP 포트로 접속 >

이상으로 Postfix SMTP 데몬의 IPv6 환경 설정이 완료되었습니다.

이로써 Postfix SMTP 데몬은 IPv6 네트워크를 통해 메일을 송수신 할 수 있습니다.

 

2. IPv6 지원 메일 클라이언트 설정

현재 IPv6를 지원하는 메일 클라이언트로는 Thunderbird가 가장 유명합니다. Windows XP에 내장된 Outlook Express는 IPv6를 지원하지 않습니다. 그러나 Windows Vista에 내장된 Windows Mail은 IPv6를 지원합니다.

본 문서에서는 Thunderbird 1.5 버전을 이용합니다. 해당 사이트에서 다운로드 받아 설치하시기 바랍니다. 필자는 한글 버전을 설치하였습니다.


< Thunderbird 메일 클라이언트 홈페이지 >

아래 그림은 Thunderbird 메일 클라이언트를 실행시킨 화면입니다.


< Thunerbord 메일 클라이언트 실행 화면 >

도구 -> 옵션 -> 계정 추가 -> 이메일 계정 설정 항목을 이용하여 개인 E-Mail 계정을 설정합니다.


< 개인 메일 계정 설정 >

여기서 중요한 점은 보내는 서버(SMTP)를 설정해야 합니다. Postfix는 SMTP 서버 이므로 SMTP 항목과 관련이 있습니다.

필자는 아래 그림과 같이 6mail.6dns.org 라고 입력했습니다. 이 호스트네임은 AAAA 레코드만 가지고 있는 IPv6 Only 호스트네임입니다.


< SMTP 정보 설정 >

이제 적절한 상대방에 메일을 발송합니다. 이 때 SMTP 서버로 IPv6 네트워크를 통해 전달 됩니다.


< 테스트 메일 발송 >

Postfix SMTP 서버의 로그를 확인해보면 아래 그림과 같이 2001:2b8:80:11:~ 클라이언트에서 메일을 발송한 것을 볼 수 있습니다.


< 메일 발송후 /var/log/maillog 내용 >

Thunderbird 메일 클라이언트가 설치된 Windows XP 단말에서 확인을 해보면 6mail.6dns.org 호스트(2001:2b8:2:fff3::100)와 연결된 것도 볼 수 있습니다.


< 메일 발송후 Windows XP 클라이언트의 네트워크 연결 정보 >

아래 그림은 Thunderbird 메일 클라이언트에서 보낸 메일을 Outlook Express를 이용하여 받은 그림입니다.


< Outlook Express로 수신된 테스트 메일 >

Outlook Express 메일 클라이언트에서 파일 -> 속성 -> 자세히 항목을 이용하면 메일 송수신 정보를 상세하게 확인할 수 있습니다.

아래 그림을 보면 IPv6 호스에서 발송된 메일을 6mail.6dns.org에서 받아, 수신자에게 전달한 것을 알 수 있습니다.


< Outlook Express에서 메일 전송 상세 정보 확인 >

 

이상으로 Postfix SMTP 데몬을 이용하여 IPv6 SMTP 서버 구성 방법을 알아 보았습니다.

Postfix 데몬의 IPv6 설정에 대한 보다 자세한 정보는 아래 링크를 참고하시기 바랍니다.

http://www.postfix.org/IPV6_README.html

http://www.elancer.co.kr/eTimes/page/eTimes_view.html?str=c2VsdW5vPTQyNTA=


번호 제목 글쓴이 날짜 조회 수
473 유용한 함수 pack, unpack, ip2long, long2ip taknim 2009.01.13 33382
472 해커들을 위한 CMD 툴 모음 file taknim 2008.05.22 32564
471 [js & php] 비밀번호 유효성 체크 - 연속 문자, 같은 문자 taknim 2011.11.09 28407
470 [Oracle] ORA-00600, ORA-06544, ORA-06553 오류 발생시 taknim 2009.06.09 23841
469 리눅스 콘솔 단축키 taknim 2009.07.06 21943
468 리눅스 split | 파일 사이즈, 라인 단위 자르기 taknim 2008.06.19 20595
467 mcrypt 암호화/복호화 AES/CBC/PKCS5/PKCS7/PADDING [1] taknim 2010.03.19 19461
466 최고의 웹디자인용 작은 아이콘 다운로드 사이트 모음 : Best Small Icon Sites taknim 2007.07.11 18943
465 [mysql] 동적 쿼리 생성시 변수를 대입하거나 값을 받아오기 taknim 2009.08.17 17198
464 [MSSQL] MS-SQL 동적쿼리 이용하기 taknim 2009.12.28 16981
463 [google map api] 구글 맵스 API 로 지도 가져오기 taknim 2012.02.09 16940
462 [C/C++] prnitf 역슬래쉬 문자 taknim 2008.11.28 16248
461 EUC-KR <-> UTF-8 상호변환 하기 (문자셋charset 변환) taknim 2008.05.27 16114
460 [oracle] isqlplus 에서 특수문자(&) 입력하는 방법 taknim 2012.08.10 16064
459 [mysql] mysqlbinlog 실행시 캐릭터셋(utf8) 오류 taknim 2009.08.25 15765
458 [Oracle] DBNEWID Utility - DBNAME,DBID변경하기 taknim 2009.07.06 15576
457 inode 개념 taknim 2008.07.08 15366
456 UTF-8 을 이용해서 다국어버젼 웹사이트 개발시 고려사항 taknim 2008.10.17 15317
455 누구나 다 아는 네트워크(소켓) 통신시의 함수 pack과 unpack taknim 2008.05.17 14607
» Postfix SMTP 서버를 이용한 IPv6 메일(SMTP) 서버 구성 taknim 2008.02.15 14443