Postfix(SMTP)와 Dovecot(IMAP,POP3)그리고 Roundcube(Webmail Interface)를 이용하여 웹메일 시스템을 구축해 봅시다.

사전 준비

  • OS는 CentOS 7 x64
  • 메일로 사용할 도메인의 DNS서버에 MX레코드 설정
  • apache, php, mysql 설치

postfix 설치

yum 패키지 관리자로 간단하게 설치 할 수 있습니다.

yum install postfix

postfix 설정파일 수정

/etc/postfix/main.cf 파일에서 다음을 찾아 수정 합니다.

myhostname = mail.mydomain.com # 서버의 hostname
mydomain = mydomain.com # 메일 주소로 사용할 도메인
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8, [::1]/128, 10.10.20.27/32 # 서버에 부여된 IP에 맞게 적절하게 설정함.
home_mailbox = Maildir/

환경에 따라서 mynetworks[::1]/128(ipv6용 loopback 주소)이 없으면 maillog에 postfix/smtpd[10402]: NOQUEUE: reject: RCPT from localhost[::1]: 454 4.7.1 account@mydomain.com: Relay access denied; from=
account@mydomain.com to=account@mydomain.com proto=ESMTP helo=<mail.mydomain.com>
에러를 뿜을 수 있다.

postfix 데몬 구동

systemctl enable postfix.service
systemctl start postfix.service

postfix 테스트

# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 mail.mydomain.com ESMTP Postfix
ehlo localhost
250-mail.mydomain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from: account@mydomain.com
250 2.1.0 Ok
rcpt to: account@mydomain.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
test
.
250 2.0.0 Ok: queued as 34ED52012043
quit
221 2.0.0 Bye
Connection closed by foreign host.

위 노란색으로 강조된 부분이 사용자가 직접 입력 하는 부분이고, 위와 같이 테스트가 완료 되면 /home/account/Maildir/new디렉토리에 수신된 메일을 확인 할 수 있다.

dovecot 설치

postfix는 메일전송에이젼트(MTA) 즉 메일 전송하는 역할을 하는 데몬이고, 이메일 수신을 위해서는 pop3, imap서버 역할을 하는 프로그램이 동작해야 한다. dovecot이 그 역할을 합니다.

설치는 postfix와 마찬가지고 yum을 통해 설치한다.

yum -y install dovecot

dovecot 설정 파일 수정

다음 파일들의 내용을 수정합니다.

/etc/dovecot/dovecot.conf

protocols = imap pop3 lmtp

/etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir

/etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no
auth_mechanisms = plain login

/etc/dovecot/conf.d/10-master.conf

unix_listener auth-userdb {
    #mode = 0666
    user = postfix
    group = postfix
  }

dovecot 데몬 구동

systemctl enable dovecot.service
systemctl start dovecot.service

roundcube 설치

roundcube는 오픈소스 웹메일 인터페이스 입니다. 직접 소스파일을 다운받아 설치한다.

roundcube 설치 요구사항
https://github.com/roundcube/roundcubemail/wiki/Install-Requirements

roundcube 다운로드

wget https://github.com/roundcube/roundcubemail/releases/download/1.3.1/roundcubemail-1.3.1-complete.tar.gz
tar xvzf roundcubemail-1.3.1-complete.tar.gz -C /var/www/html/
ln -s /var/www/html/roundcubemail-1.3.1 /var/www/html/roundcube

데이터베이스 준비

mysql> CREATE DATABASE roundcube /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
mysql> GRANT ALL PRIVILEGES ON roundcube.* TO 'roundcube'@'localhost' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;

설치 Step 1
브라우져에서 http://mail.mydomain.com/roundcube/installer/ 로 접속하면 아래와 같이 환경을 체크하는 화면이 뜬다.

설정상 문제가 없으면 화면 하단에 next을 눌러 다음으로 진행.

설치 Step 2
config 파일 설정하는 화면입니다. 데이터베이스 설정 부분에 위에서 만든 데이터베이스 정보에 맞게 값을 넣은 후 CREATE CONFIG버튼을 눌러 다음으로 넘어갑니다.

CREATE CONFIG버튼을 눌러 넘어온 화면에 다음 그림과 같이 config 파일이 성공적으로 저장되었다는 메시지가 표시되면 CONTINUE버튼을 눌러 다음으로 이동한다.

설치 Step 3
마지막으로 생성된 config를 테스트 하는 화면입니다. 중간에 Check DB configDB Schema: NOT OK(Database not initialized)로 표시가 되어 있는데 아직 데이터베이스에 roundcube가 사용할 테이블이 생성되지 않아서 입니다. Initialize database버튼을 눌러 테이블을 생성합니다.

Initialize database버튼을 누르면 다음 그림과 같이 Check DB config 부분에 OK로 표시됩니다.

설치 완료
설치 완료 후 http://mail.mydomain.com/roundcube/ 접속하면 다음과 같은 화면을 볼 수 있습니다.

로그인은 리눅스 시스템 계정으로 로그인 하면 됩니다.


2개의 댓글

윤지우 · 2018년 5월 8일 2:54 오후

안녕하세요! 정말 좋은 글 잘 읽었습니다!
혹시 Roundcube에서 identity를 추가하는 것 말고 실제 이메일 계정을 추가할 수는 없나요?

    onlab · 2018년 5월 21일 3:45 오후

    에고! 답이 늦었습니다.
    identity 라고 칭하신 부분이 시스템계정(ID)을 말씀 하시는건가요??
    메일서버를 설치하면 기본적으로 시스템 계정이 이메일 계정이 됩니다.
    위 글을 바탕으로 메일서버를 설정하셨다고 가정했을때
    메일 계정을 추가하기 위해서는 useradd 명령으로 계정을 생성하시면 ( 예를 들어 useradd webmaster )
    webmaster@mydomain.com 계정으로 메일을 수발신 할 수 있습니다.
    물론 시스템 계정이 아닌 mysql 같은 데이터베이스를 연동해서 계정관리를 할 수 있기도 합니다.
    그부분은 추가적인 설정이 더 필요 합니다.
    감사합니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다