CentOS7 sendmail + dovecot + roundcube 연동

| 2019년 7월 4일 | 0 Comments

안녕하세요. 스마일서브 기술지원팀 신규철입니다.

CentOS 7에서 메일서버를 구축해보도록 하겠습니다. 본인 소유의 도메인이 없다고 가정하고 네임서버를 구축해 임시로 사용할 도메인을 만들겠습니다.

 

테스트 환경

서버 A[네임서버 및 메일서버 역할]

CentOS 7, APM 각각 2.4, 7.0, 5.7

도메인 – smile.com

 

서버 B[메일 서버 역할]

CentOS 7, APM 각각 2.4, 7.0, 5.7

도메인 – serv.com

 

 
서버 A에서 네임 서버를 구축하겠습니다. 
 
1. bind 설치
#yum install -y bind bind-utils
 
 
2. 설정 파일 수정
#vi /etc/named.conf
네모 박스로 표시한 부분을 수정합니다.
listen-on port 53 { any; };
listen-on-v6 port 53 { none; };
allow-query { any; };
recursion no;
 
 
3. zone 파일 기본 설정
#vi /etc/named.rfc1912.zones
하단에 다음과 같이 추가해줍니다.
zone “smile.con” IN {
   type master;
   file “smile.con.zone”;
   allow-update { none; };
};
 
zone “serv.com” IN {
   type master;
   file “serv.com.zone”;
   allow-update { none; };
};
 
설정이 완료되었으면 문법 체크를 해봅니다.
#named-checkconf /etc/named.conf
 
아무런 메시지도 나오지 않으면 문법이 제대로 된 것입니다.

 

4. zone 파일 설정

#vi /var/named/smile.com.zone

$TTL 86400

@   SOA   @   root.   ( 20190704   3H   15M   1W   1D )

   IN   NS   @

   IN   A   [서버 A의 IP]

   IN   MX   10 mail.smile.com.

mail   IN   A   [서버 A의 IP]

 

설정을 했으면 문법상 에러가 없는지 확인해봅니다.

#named-checkzone smile.com /var/named/smile.com.zone

OK가 나오면 문법상으론 오류가 없는 것입니다.

smile.com에 대한 zone 파일을 생성해줬으니 serv.com에 대한 zone 파일도 생성해주겠습니다.

smile.com.zone 파일을 복사해서 일부만 수정해줍니다.

 

#cp /var/named/smile.com/zone /var/named/serv.com.zone

#vi /var/named/serv.com.zone

$TTL 86400

@   SOA   @   root.   ( 20190704   3H   15M   1W   1D )

   IN   NS   @

   IN   A   [서버 B의 IP]

   IN   MX   10 mail.serv.com.

mail   IN   A   [서버 B의 IP]

 

5. 질의 테스트

우선 방화벽에서 53번 포트를 허용해줍니다.(tcp/udp 모두)

방화벽을 허용해줬으면 1차 nameserver를 서버 A의 IP로 설정해줍니다. 저는 reslov.conf 파일에서 임시로 수정해주도록 하겠습니다.(서버 A와 서버 B 모두 수정해주세요.)

#vi /etc/resolv.conf

nameserver [서버 A의 IP]

기존에 설정되어있는 nameserver 설정 위에 서버 A의 IP를 추가해줍니다.

이제 네임서버를 실행하고 nslookup 명령어로 제대로 질의가 되는지 테스트 해봅니다.

#systemctl enable named

#systemctl start named

#nslookup

>mail.smile.com

>mail.serv.com

 

질의 테스트를 했을 때 네임서버가 서버 A의 IP로 설정되어있고 mail.smile.com과 mail.serv.com의 IP가 각각 서버 A, 서버 B의 IP로 확인되면 제대로 설정된것입니다.

 

  
이제 메일 서버를 구축해보도록 하겠습니다. 서버 A와 서버 B에서의 설정은 동일합니다. sendmail을 설정하고 telnet 을 통해 송수신 테스트를 할 것이기 때문에 서버 A와 B에서
동시에 설정을 진행해주세요.
 
CentOS 7부터는 기본 SMTP로 Postfix를 제공하는데, 만약 설치되어 있다면 이를 삭제해줍니다.
#rpm -qa | grep postfix
#yum remove -y postfix
 
우선 메일 계정먼저 생성해주겠습니다.(서버 A, 서버 B에서 사용할 메일 계정을 각각 생성해주세요.)
#useradd -s /bin/false kyu
#passwd kyu
 
sendmail을 설치합니다.
#yum install -y sendmail sendmail-cf
 
 
1. local-host-names 설정
해당 파일에 서버 A가 사용할 도메인을 추가해줍니다.
#vi /etc/mail/local-host-names
서버 B에서는 serv.com을 추가해줬습니다.

 

2. sendmail.mc 설정

sendmail의 설정파일은 sendmail.cf이나 sendmail.mc에서 설정을 해주고 m4 명령어를 통해 sendmail.cf에 반영해줄 수 있습니다.

#vi /etc/mail/sendmail.mc

52, 53번 라인의 주석(dnl)을 제거 해줍니다. smtp 인증을 사용하겠다는 설정부분입니다.

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
define(`confAUTH_MECHANISMS’, `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
 
그리고 118번 라인의 127.0.0.1을 0.0.0.0으로 변경합니다. 127.0.0.1로 설정되어있으면 로컬에서만 메일을 발송할 수 있기 떄문입니다.
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA’)dnl
 
설정이 완료 되었으면 m4 명령어를 통해 수정된 mc 파일을 cf 파일로 재 생성 해줍니다.
 
 
 
3.access 파일 설정
RELAY를 허용하거나 거부할 도메인, ip 등에 대해 설정할 수 있는 파일입니다.
#vi /etc/mail/access

smile.com과 serv.com의 RELAY를 허용해주도록 하겠습니다.

설정 내용을 적용해줍니다.

#makemap hash /etc/mail/access < /etc/mail/access (리다이렉션 방향에 주의 하세요.)

설정이 완료되었으면 방화벽에 sendmail 의 포트에 해당하는 25번 포트를 추가해줍니다.
 
이제 센드메일이 제대로 설정되어 수신되는지 telnet 명령어를 통해 확인해보겠습니다. 만약 telnet 명령어가 존재하지 않으면 yum intall telnet 으로 설치해주세요.
 
4. sendmail 발송 테스트
#systemctl enable sendmail
#systemctl start sendmail
#telnet localhost 25

mail from:송신지 주소 (아무렇게나 지정해줘도 상관은 없습니다.)
rcpt to:수신지 주소 (저는 cheol계정에 메일을 발송할 것이기 때문에 cheol@serv.com으로 설정해줬습니다.)
data : 메일을 보내겠다는 명령어입니다. (점(.)을 찍으면 전송이 됩니다.)
subject : 메일 제목 ( 제목 부분입니다.)
haha : 메일내용입니다. 그냥 적은겁니다.
. : 메일 작성 종료
 
메일이 보내졌으니 quit 명령어로 빠져나온 뒤 서버 B의 /var/spool/mail 디렉토리안에 있는 메일계정 이름으로 된 파일을 열어봅니다.
#vi /var/spool/mail/cheol

정상적으로 수신된 것을 확인할 수 있습니다.

 

  
이제 dovecot 설정을 하겠습니다. dovecot 은 클라이언트에서 메일을 수신할 수 있는 imap, pop3 프로토콜을 지원하는 패키지입니다.
 
#yum install -y dovecot
 
1. dovecot.conf 파일 설정
#vim /etc/dovecot/dovecot.conf

protocols 부분의 주석(#)을 제거해줍니다. lmtp 프로토콜은 사용하지 않으니 제거해도 상관 없습니다.
listen 부분의 주석도 제거하며 *, :: 으로 설정하여 모든 ipv4, ipv6 네트워크에서 메일을 받겠다는 의미 입니다.
 base_dir 부분도 주석을 제거합니다. 저장하고 빠져나옵니다.
 
2.10-ssl.conf 파일 수정
#vim /etc/dovecot/conf.d/10-ssl.conf

ssl 은 사용하지 않을 것이기 때문에 ssl = no 로 설정해주고
밑의 인증서 경로 부분은 주석처리 하겠습니다.
ssl = no
#ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
#ssl_key = </etc/pki/dovecot/private/dovecot.pem

 

3.10-mail.conf 수정
총 세 부분의 주석을 제거하고 설정해줘야합니다.
#vim /etc/dovecot/conf.d/10-mail.conf

저는 /var/spool/ 디렉토리의 계정명으로 된 파일에 메일을 저장되는 경로로 지정하겠습니다.
mail_location = mbox:~/mail:INBOX=/var/mail/%u

보안관련 설정 부분입니다. 주석을 제거해줍니다.
 
lock_method = fcntl

메일에 접근 가능한 그룹을 mail 로 설정해줍니다. 저장하고 빠져나옵니다.
mail_access_groups = mail
 
4. 10-auth.conf 수정
인증 설정을 하는 파일입니다. 일반 텍스트 인증을 사용할 건지 여부를 설정할 수 있습니다.

ssl 인증을 사용하지 않기 때문에 plain_text 인증을 허용해줍니다.
disable_plaintext_auth = no
 
설정이 완료 되었으면 방화벽을 허용해줍니다. dovecot은 110번(IMAP)과 143번(POP3) 포트를 사용합니다.
해당 부분을 허용해주고 방화벽을 재시작해줍니다.
 
방화벽 설정까지 완료되었으면 dovecot 을 실행해줍니다.
#systemctl enable dovecot
#systemctl start dovecot
#netstat -nltp
 

정상적으로 실행중인 점을 확인할 수 있습니다.
 

 
sendmail과 dovecot 설치 및 설정이 끝났으니 roundcubemail을 설치해보도록 하겠습니다. 현재 저는 php 7.0.4가 설치되어있는데요.
php 7버전과 호환이 되는 roundcube 1.3.0 버전을 설치하여 연동해보겠습니다. 서버 A에서만 진행해보겠습니다.
 
라운드 큐브 URL
complete 패키지의 Donwload 링크 주소를 복사하여 wget으로 설치해줍니다.
 
#cd /usr/local/src
#tar xvfz roundcubemail-1.3.9-complete.tar.gz
 
압축을 해제한 뒤 웹 사이트의 DocumentRoot 경로로 복사를 해줄건데요. 그 전에 아파치에서 vhost에 도메인에 대한 설정부터 해주겠습니다.
 
#vi /usr/local/apache/conf/httpd.conf
 
설정파일에서 아래 내용의 주석(#)을 제거해줍니다.
LoadModule vhost_alias_module modules/mod_vhost_alias.so
Include conf/extra/httpd-vhosts.conf
 
#vi /usr/local/apache/conf/extra/httpd-vhost.conf

<VirtualHost *:80>
    DocumentRoot “/home/kyu/public_html/webmail”
    ServerName mail.smile.com
    ErrorLog “logs/mail.smile.com-error_log”
    CustomLog “logs/mail.smile.com-access_log” combined
</VirtualHost>
 
이제 위의 DocumentRoot 로 설정해준 경로에 압축해제한 roundcube 디렉토리를 webmail이란 이름으로 옮겨주겠습니다.
#mkdir /home/kyu/public_html
#mv roundcubemail-1.3.9 /home/kyu/public_html/webmail
#/usr/local/apache/bin/apachectl -t
 
문법검사를 해준뒤 OK가 나오면 아파치를 재시작해줍니다.
#/usr/local/apache/bin/apachectl restart
 
이제 roundcubemail에서 사용할 DB와 사용자를 추가해주겠습니다. DB명은 roundcubemail, 사용자명은 roundcube, 패스워드는 123456으로 설정해주겠습니다.
#/usr/local/mysql -uroot -p
mysql > create database roundcubemail;
mysql > grant all privileges on roundcubemail.* to ’roundcube’@’localhost’ identified by ‘123456’;
mysql > flush privileges;

이제 윈도우 환경에서 네임서버를 서버 A로 설정해준 뒤 사이트에 접속해보겠습니다.

다음과 같이 기본 설정 DNS 서버에 서버 A의 IP를 넣어줍니다. 그리고 mail.smile.com으로 접속해보겠습니다.

접속했을 때 다음과 같이 Forbidden 에러가 발생할 수 있는데요. 접근 권한이 없다고 합니다.
 
#vi /usr/local/apache/conf/httpd.conf
<Directory />
    AllowOverride none
    Require all granted
</Directory>
 
Require 부분이 denied 로 되어있다면 granted로 변경해준 뒤 아파치를 재시작해줍니다. 이후에도 동일 한 증상이 발생한다면 /home/kyu 디렉토리의 권한 부분을 확인해봅니다.
만약 권한이 700으로 설정되어있다면 755로 변경해줍니다.
 
 
#chmod 755 /home/kyu
 
권한설정이 완료됬으면 다시 들어가봅니다.

아직 설치를 진행하지 않아 config.inc.php 파일을 찾을 수 없다고 나오네요. mail.smile.com/installer 로 접속해 설치를 진행하겠습니다.

저는 다음과 같이 나왔는데요. database부분은 MySQL이 OK로 되어있으니 건들지 않고 php 확장부분의 Intl과 LDAP, Imagick 부분만 OK로 변경해주겠습니다.
 
Intl 부터 추가해주겠습니다. php 소스 설치를 진행했던 디렉토리에서 해당 모듈을 추가해줄 수 있습니다. (저와 경로가 다를 수 있습니다.)
#cd /usr/local/src/php-7.0.4/ext/intl
#/usr/local/php/bin/phpize
#./configure –with-php-config –enable-intl
#make && make install
 
make install이 완료되면 intl 모듈이 설치된 경로가 나올텐데요. 해당 모듈을 php 디렉토리 밑의 modules 디렉토리로 옮겨주겠습니다.

저는 위의 경로에 설치되었다고 나오네요.
 
#mkdir /usr/local/php/modules
#mv /usr/local/php/lib/php/extensions/no-debug-zts-20151012/intl.so
 
이제 php.ini 파일에서 설정을 추가해주겠습니다. php.ini 파일의 위치는 모두 다를 수 있습니다. 위치를 모르실 경우 다음 명령어로 찾아주세요.
 
#/usr/local/php/bin/php –ini
#vi /usr/local/lib/php.ini

extension_dir = “/usr/local/php/modules/”
extension = “intl.so”
 
다음과 같이 설정해줍니다. 이후 아파치를 재시작하면 OK로 변경된 것을 확인할 수 있습니다.
#/usr/local/apache/bin/apachectl restart
ldap와 Imageick 모듈도 동일한 방법으로 추가해줍니다.
#cd /usr/local/src/php-7.0.4/ext/ldap
#/usr/local/php/bin/phpize
#./configure –with-php-config=/usr/local/php/bin/php-config
 
configure 도중 ldap.h 파일이 없다는 메시지가 나올수도 있는데요. 다음 패키지를 설치하여 해결합니다.
#yum install -y openldap-devel
 
또한 /usr/lib 디렉토리에 ldap 라이브러리가 없다는 에러가 나올수도 있습니다. 아래의 방법으로 해결합니다.
#cp /usr/lib64/libldap* /usr/lib
 
이후 configure 진행 한 뒤,
#make && make install
 
아마 intl이 설치된 경로와 동일하게 ldap 모듈이생성될텐데요. mv 로 옮겨줍니다.
#mv /usr/local/php/lib/php/extensions/no-debug-zts-20151012/ldap.so /usr/local/php/modules/
#vi /usr/local/lib/php.ini
 
php.ini 파일을 열고 extension = “ldap.so” 를 추가한 뒤 아파치를 재시작해줍니다.
LDAP도 OK로 변한것을 확인할 수 있습니다. 마지막으로 Imagick 모듈을 추가해주겠습니다.
imagick은 아래 URL에서 직접 다운로드 받은 뒤 설치를 진행하겠습니다.
 
imagick 을 클릭한 뒤, 가장 최신의 stable 버전을 다운로드 받겠습니다.
 
#cd /usr/local/src
#wget https://pecl.php.net/get/imagick-3.4.3.tgz
#tar xvfz imagick-3.4.3.tgz
#cd imagick-3.4.3
 
configure 하기 전에 필수 패키지를 먼저 설치해주겠습니다.
#yum install  ImageMagick ImageMagick-devel
#/usr/local/php/bin/phpize
#./configure –with-php-config=/usr/local/php/bin/php-config
#make && make install
#mv /usr/local/php/lib/php/extensions/no-debug-zts-20151012/imagick.so /usr/local/php/modules/
#vi /usr/local/lib/php.ini
extension=”imagick.so”
 
#/usr/local/apache/bin/apachectl restart
페이지 아래 부분에 보면 다음과 같이 되어있을 수 있습니다.
 
php.ini 파일의 설정을 변경해주면 해결할 수 있습니다.
#vi /usr/local/lib/php.ini
allow_url_fopen = Off -> On
date.timezone = Asia/Seoul
 
아파치를 재시작 한 뒤 OK로 변한것을 확인했으면 NEXT를 눌러줍니다.

Database setup에서 이전에 설정해줬던 DB명, 사용자명, 패스워드를 입력해줍니다. Database server와 분리되어있으면 localhost가 아닌 DB 서버 ip를 입력해주면 됩니다.
 
IMAP Settings에 사용할 도메인명을 입력해줍니다.
smile.com을 입력하였습니다.
 
SMTP Settings에 메일 도메인을 입력해줍니다. mail.smile.com을 입력하였습니다.
 
Display settings & user prefs의 language부분에 ko_KR을 해줍니다.
설정이 완료되었으면 하단의 CREATE CONFIG 버튼을 눌러 config 파일을 생성해줍니다.
위와 같은 페이지가 나올텐데요. roundcubemail이 설치되어있는 경로의 config 디렉토리에 config.inc.php파일을 만들어준 뒤( /home/kyu/public_html/webmail/conf/config.inc.php)
해당 내용을 복사 붙여넣기 해줍니다. 그리고 CONTINUE버튼을 누르면 됩니다. 이제 NOT OK로 된 부분들을 OK로 바꿔줘야 되는데요.
 
아래의 NOT OK 부분은 logs 디렉토리와 temp 디렉토리의 권한을 변경해주면 해결가능합니다.
 
#cd /home/kyu/public_html/webmail
#chmod 707 logs temp
 
 
아래의 NOT OK는 Initialize database를 눌러주면 해결됩니다.
 
Mimetype 관련 NOT OK는 config.inc.php 파일에 mime.types 파일의 경로를 적어주면 해결됩니다.
보통 apache의 conf디렉토리 밑에 존재합니다.
 
#ll /usr/local/apache/conf/mime.types
#vi /home/kyu/public_html/webmail/conf/config.inc.php
하단에 아래의 내용을 추가해준 뒤 아파치를 재시작해줍니다.
$config[‘mime_types’] = ‘/usr/local/apache/conf/mime.types’;
 
#/usr/local/apache/bin/apachectl restart
전부 OK가 됬으면 SMTP config 테스트를 진행합니다. OK 가 나오면 잘 연동이된것입니다.
IMAP config 테스트에 메일계정과 패스워드를 입력한 뒤 Check login을 클릭해줍니다. OK가 나오면 연동이 잘 된것입니다.
이제 Installer 디렉토리를 삭제한 뒤 mail.smile.com 도메인으로 다시 접속해보겠습니다.
 
#rm -rf /home/kyu/public_html/webmail/installer
 
http://mail.smile.com
 
위와 같은 페이지가 나올텐데요. 메일계정으로 접속해봅니다.
 
 
다음과 같이 roundcubemail 로 접속되는 것을 확인할 수 있습니다. 또한 이전 설치과정에서 보낸 테스트 메일들이 도착해있는것도 확인가능합니다.
이상으로 sendmail + dovecot + roundcubemail 설치 및 설정에 대해 알아봤습니다. 감사합니다.

 

Category: LINUX

About the Author ()