메일 서버 · 6 min read · Nov 10, 2025

Postfix, Courier, MySQL 및 SquirrelMail을 이용한 가상 사용자 및 도메인 (CentOS 6.2 x86_64)

Postfix, Courier, MySQL 및 SquirrelMail을 이용한 가상 사용자 및 도메인 (CentOS 6.2 x86_64)

버전 1.0
저자: Falko Timme
Twitter에서 나를 팔로우하세요

이 튜토리얼은 Falko Timme에 의해 저작권(c) 2012로 보호됩니다. 이는 Christoph Haas의 튜토리얼에서 파생된 것으로 http://workaround.org에서 찾을 수 있습니다. 이 튜토리얼은 Creative Commons 라이선스 2.5 또는 이후 버전 하에 자유롭게 사용할 수 있습니다.

이 문서는 가상 사용자 및 도메인을 기반으로 하는 Postfix 메일 서버를 설치하는 방법을 설명합니다. 즉, MySQL 데이터베이스에 있는 사용자 및 도메인입니다. 또한 Courier(Courier-POP3, Courier-IMAP)의 설치 및 구성을 시연하여 Courier가 Postfix가 사용하는 동일한 MySQL 데이터베이스에 대해 인증할 수 있도록 합니다.

결과적으로 생성된 Postfix 서버는 SMTP-AUTHTLS쿼터를 지원합니다(쿼터는 기본적으로 Postfix에 내장되어 있지 않으며, 적절하게 Postfix를 패치하는 방법을 보여드리겠습니다). 비밀번호는 데이터베이스에 암호화된 형태로 저장됩니다(내가 찾은 대부분의 문서는 보안 위험이 있는 일반 텍스트 비밀번호를 다루고 있었습니다). 이 튜토리얼은 또한 이메일이 스팸 및 바이러스를 검사하도록 Amavisd, SpamAssassinClamAV의 설치를 다룹니다. 사용자가 이메일을 읽고 보내고 비밀번호를 변경할 수 있도록 웹메일 인터페이스로 SquirrelMail을 설치하는 방법도 보여드리겠습니다.

이러한 “가상” 설정(가상 사용자 및 도메인이 MySQL 데이터베이스에 있는 경우)의 장점은 “실제” 시스템 사용자를 기반으로 한 설정보다 성능이 훨씬 뛰어나다는 것입니다. 이 가상 설정을 통해 메일 서버는 수천 개의 도메인과 사용자를 처리할 수 있습니다. 또한, 새로운 사용자/도메인을 추가하거나 기존 것을 편집할 때 MySQL 데이터베이스만 처리하면 되므로 관리가 더 쉽습니다. 더 이상 db 파일을 생성하기 위한 postmap 명령이나 Postfix를 다시 로드할 필요가 없습니다. MySQL 데이터베이스 관리를 위해 phpMyAdmin과 같은 웹 기반 도구를 사용할 수 있으며, 이 방법에서도 설치됩니다. 세 번째 장점은 사용자가 사용자 이름으로 이메일 주소를 가지므로(사용자 이름 + 이메일 주소 대신) 이해하고 기억하기가 더 쉽다는 것입니다.

이 방법은 실용적인 가이드를 위한 것이며, 이론적 배경은 다루지 않습니다. 이론적 배경은 웹의 많은 다른 문서에서 다루어집니다.

이 문서는 어떤 종류의 보증 없이 제공됩니다! 이 시스템을 설정하는 유일한 방법이 아니라는 점을 말씀드리고 싶습니다. 이 목표를 달성하는 방법은 여러 가지가 있지만, 이것이 제가 선택한 방법입니다. 이것이 여러분에게 작동할 것이라는 보증을 하지 않습니다!

1. 사전 참고

이 튜토리얼은 CentOS 6.2 x86_64를 기반으로 하므로, 이 튜토리얼을 계속 진행하기 전에 기본 CentOS 6.2 서버 설치를 설정해야 합니다(예: The Perfect Server - CentOS 6.2 x86_64 With Apache2 [ISPConfig 3]의 처음 6장과 같이). 시스템은 정적 IP 주소를 가져야 합니다. 이 튜토리얼에서는 192.168.0.100을 IP 주소로 사용하고 server1.example.com을 호스트 이름으로 사용합니다.

방화벽이 꺼져 있는지(적어도 지금은) 및 SELinux가 비활성화되어 있는지 확인해야 합니다(이것은 중요합니다!).

2. 추가 리포지토리 활성화 및 소프트웨어 설치

먼저 소프트웨어 패키지에 대한 GPG 키를 가져옵니다:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

그런 다음 CentOS 시스템에서 RPMforge 및 EPEL 리포지토리를 활성화합니다. 이 튜토리얼에서 설치할 많은 패키지가 공식 CentOS 6.2 리포지토리에서 제공되지 않기 때문입니다:

rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
cd /tmp  
 wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm  
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

(위 링크가 더 이상 작동하지 않으면 현재 버전의 rpmforge-release를 여기에서 찾을 수 있습니다: http://packages.sw.be/rpmforge-release/)

rpm --import https://fedoraproject.org/static/0608B895.txt  
 wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm  
rpm -ivh epel-release-6-5.noarch.rpm
yum install yum-priorities

/etc/yum.repos.d/epel.repo를 편집합니다…

vi /etc/yum.repos.d/epel.repo

… 그리고 [epel] 섹션에 priority=10을 추가합니다:

| [epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 [...] |

그런 다음 시스템의 기존 패키지를 업데이트합니다:

yum update

이제 나중에 필요할 소프트웨어를 설치합니다:

yum groupinstall 'Development Tools'

3. Apache, MySQL, phpMyAdmin 설치

이 모든 것은 한 번의 명령으로 설치할 수 있습니다(여기에는 Courier-IMAP을 빌드하는 데 필요한 패키지도 포함됩니다):

yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpMyAdmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel libidn-devel db4-devel mod_ssl telnet

4. Courier-IMAP, Courier-Authlib 및 Maildrop 설치

불행히도 Courier-IMAP, Courier-Authlib 및 Maildrop에 대한 rpm 패키지가 없으므로, 우리는 직접 빌드해야 합니다.

RPM 패키지는 root로 빌드해서는 안 됩니다. courier-imap은 컴파일이 root 사용자로 실행되는 것을 감지하면 컴파일을 거부합니다. 따라서 이제 일반 사용자 계정을 생성하고(falko라는 예시) 비밀번호를 설정합니다:

useradd -m -s /bin/bash falko  
 passwd falko

sudo 명령이 나중에 필요하므로 falko가 rpm 패키지를 컴파일하고 설치할 수 있도록 모든 명령을 sudo로 실행할 수 있도록 허용해야 합니다:

실행:

visudo

열리는 파일에서 root ALL=(ALL) ALL이라는 줄이 있습니다. 그 줄 바로 아래에 falko에 대한 유사한 줄을 추가합니다:

| [...] ## Allow root to run any commands anywhere root ALL=(ALL) ALL falko ALL=(ALL) ALL [...] |

이제 rpm 패키지를 빌드할 준비가 되었습니다. 먼저 falko 사용자로 전환합니다:

su falko

다음으로 빌드 환경을 생성합니다:

mkdir $HOME/rpm  
 mkdir $HOME/rpm/SOURCES  
 mkdir $HOME/rpm/SPECS  
 mkdir $HOME/rpm/BUILD  
 mkdir $HOME/rpm/BUILDROOT  
 mkdir $HOME/rpm/SRPMS  
 mkdir $HOME/rpm/RPMS  
 mkdir $HOME/rpm/RPMS/i386  
 mkdir $HOME/rpm/RPMS/x86_64
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

이제 다운로드 디렉토리를 만들고 http://www.courier-mta.org/download.php에서 소스 파일을 다운로드합니다:

mkdir $HOME/downloads  
 cd $HOME/downloads
wget https://sourceforge.net/projects/courier/files/authlib/0.63.0/courier-authlib-0.63.0.tar.bz2/download  
wget https://sourceforge.net/projects/courier/files/imap/4.9.3/courier-imap-4.9.3.tar.bz2/download  
wget https://sourceforge.net/projects/courier/files/maildrop/2.5.5/maildrop-2.5.5.tar.bz2/download

(여기서 나는 더 새로운 4.10.0 대신 Courier-IMAP 4.9.3을 사용합니다. 왜냐하면 4.10.0은 Fedora에 존재하지만 CentOS에는 존재하지 않는 systemctl에 의존하기 때문입니다.)

이제($HOME/downloads에 있는 동안) courier-authlib를 빌드할 수 있습니다:

sudo rpmbuild -ta courier-authlib-0.63.0.tar.bz2

빌드 프로세스 후, rpm 패키지는 /root/rpmbuild/RPMS/x86_64에 있습니다(/root/rpmbuild/RPMS/i386는 i386 시스템인 경우). 명령

sudo ls -l /root/rpmbuild/RPMS/x86_64

는 사용 가능한 rpm 패키지를 보여줍니다:

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
 total 528  
 -rw-r--r-- 1 root root 124032 Jan 26 17:09 courier-authlib-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root 270900 Jan 26 17:09 courier-authlib-debuginfo-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  35068 Jan 26 17:09 courier-authlib-devel-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  17372 Jan 26 17:09 courier-authlib-ldap-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  13928 Jan 26 17:09 courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  13080 Jan 26 17:09 courier-authlib-pgsql-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root   8316 Jan 26 17:09 courier-authlib-pipe-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  34068 Jan 26 17:09 courier-authlib-userdb-0.63.0-1.el6.x86_64.rpm  
 [falko@server1 downloads]$

설치할 패키지를 선택하고 다음과 같이 설치합니다:

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/courier-authlib-0.63.0-1.el6.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-0.63.0-1.el6.x86_64.rpm

이제 다운로드 디렉토리로 돌아갑니다:

cd $HOME/downloads

다음 명령을 실행하여 필요한 디렉토리를 생성하고 디렉토리 권한을 변경합니다(그렇지 않으면 Courier-Imap의 빌드 프로세스가 실패합니다):

sudo mkdir -p /var/cache/ccache/tmp  
sudo chmod o+rwx /var/cache/ccache/  
sudo chmod 777 /var/cache/ccache/tmp

이제 sudo 없이 rpmbuild를 다시 실행합니다. 그렇지 않으면 컴파일이 root로 실행되었기 때문에 실패합니다:

rpmbuild -ta courier-imap-4.9.3.tar.bz2

빌드 프로세스 후, rpm 패키지는 $HOME/rpm/RPMS/x86_64에 있습니다($HOME/rpm/RPMS/i386는 i386 시스템인 경우):

cd $HOME/rpm/RPMS/x86_64

명령

ls -l

는 사용 가능한 rpm 패키지를 보여줍니다:

[falko@server1 x86_64]$ ls -l  
 total 1088  
 -rw-r--r-- 1 falko falko 333540 Jan 26 17:27 courier-imap-4.9.3-1.x86_64.rpm  
 -rw-r--r-- 1 falko falko 776100 Jan 26 17:27 courier-imap-debuginfo-4.9.3-1.x86_64.rpm  
 [falko@server1 x86_64]$ 

다음과 같이 courier-imap을 설치할 수 있습니다:

sudo rpm -ivh courier-imap-4.9.3-1.x86_64.rpm

이제 다운로드 디렉토리로 돌아갑니다:

cd $HOME/downloads

그리고 maildrop 패키지를 빌드하기 위해 rpmbuild를 다시 실행합니다:

sudo rpmbuild -ta maildrop-2.5.5.tar.bz2

빌드 프로세스 후, rpm 패키지는 /root/rpmbuild/RPMS/x86_64에 있습니다(/root/rpmbuild/RPMS/i386는 i386 시스템인 경우). 명령

sudo ls -l /root/rpmbuild/RPMS/x86_64

는 사용 가능한 rpm 패키지를 보여줍니다:

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
 total 1712  
 -rw-r--r-- 1 root root 124032 Jan 26 17:09 courier-authlib-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root 270900 Jan 26 17:09 courier-authlib-debuginfo-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  35068 Jan 26 17:09 courier-authlib-devel-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  17372 Jan 26 17:09 courier-authlib-ldap-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  13928 Jan 26 17:09 courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  13080 Jan 26 17:09 courier-authlib-pgsql-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root   8316 Jan 26 17:09 courier-authlib-pipe-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  34068 Jan 26 17:09 courier-authlib-userdb-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root 286480 Jan 26 17:32 maildrop-2.5.5-1.x86_64.rpm  
 -rw-r--r-- 1 root root 751348 Jan 26 17:32 maildrop-debuginfo-2.5.5-1.x86_64.rpm  
 -rw-r--r-- 1 root root 102108 Jan 26 17:32 maildrop-devel-2.5.5-1.x86_64.rpm  
 -rw-r--r-- 1 root root  65940 Jan 26 17:32 maildrop-man-2.5.5-1.x86_64.rpm  
 [falko@server1 downloads]$

이제 다음과 같이 maildrop을 설치할 수 있습니다:

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/maildrop-2.5.5-1.x86_64.rpm

모든 필요한 패키지를 컴파일하고 설치한 후, 다음을 입력하여 다시 root가 될 수 있습니다:

exit

5. Postfix에 쿼타 패치 적용

Postfix 소스 rpm을 가져와 쿼타 패치로 패치한 후, 새로운 Postfix rpm 패키지를 빌드하고 설치해야 합니다.

cd /usr/src  
 wget http://vault.centos.org/6.2/os/Source/SPackages/postfix-2.6.6-2.2.el6_1.src.rpm  
rpm -ivh postfix-2.6.6-2.2.el6_1.src.rpm

마지막 명령은 무시할 수 있는 몇 가지 경고를 표시합니다:

warning: user mockbuild does not exist - using root  
 warning: group mockbuild does not exist - using root
cd /root/rpmbuild/SOURCES  
 wget http://vda.sourceforge.net/VDA/postfix-2.6.5-vda-ng.patch.gz  
gunzip postfix-2.6.5-vda-ng.patch.gz  
 cd /root/rpmbuild/SPECS/

이제 postfix.spec 파일을 편집해야 합니다:

vi postfix.spec

| [...] # Patches Patch0: postfix-2.6.5-vda-ng.patch Patch1: postfix-2.6.1-config.patch Patch2: postfix-2.6.1-files.patch Patch3: postfix-alternatives.patch Patch8: postfix-large-fs.patch Patch9: pflogsumm-1.1.1-datecalc.patch Patch10: postfix-2.6.6-CVE-2011-0411.patch Patch11: postfix-2.6.6-CVE-2011-1720.patch [...] %prep %setup -q # Apply obligatory patches %patch0 -p1 -b .vda-ng %patch1 -p1 -b .config %patch2 -p1 -b .files %patch3 -p1 -b .alternatives %patch8 -p1 -b .large-fs [...] |

그런 다음 쿼타 및 MySQL 지원이 있는 새로운 Postfix rpm 패키지를 빌드합니다:

rpmbuild -ba postfix.spec

우리의 Postfix rpm 패키지는 /root/rpmbuild/RPMS/x86_64에 생성됩니다(/root/rpmbuild/RPMS/i386는 i386 시스템인 경우), 따라서 그곳으로 이동합니다:

cd /root/rpmbuild/RPMS/x86_64

명령

ls -l

는 사용 가능한 패키지를 보여줍니다:

[root@server1 x86_64]# ls -l  
 total 10728  
 -rw-r--r-- 1 root root  124032 Jan 26 17:09 courier-authlib-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  270900 Jan 26 17:09 courier-authlib-debuginfo-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root   35068 Jan 26 17:09 courier-authlib-devel-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root   17372 Jan 26 17:09 courier-authlib-ldap-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root   13928 Jan 26 17:09 courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root   13080 Jan 26 17:09 courier-authlib-pgsql-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root    8316 Jan 26 17:09 courier-authlib-pipe-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root   34068 Jan 26 17:09 courier-authlib-userdb-0.63.0-1.el6.x86_64.rpm  
 -rw-r--r-- 1 root root  286480 Jan 26 17:32 maildrop-2.5.5-1.x86_64.rpm  
 -rw-r--r-- 1 root root  751348 Jan 26 17:32 maildrop-debuginfo-2.5.5-1.x86_64.rpm  
 -rw-r--r-- 1 root root  102108 Jan 26 17:32 maildrop-devel-2.5.5-1.x86_64.rpm  
 -rw-r--r-- 1 root root   65940 Jan 26 17:32 maildrop-man-2.5.5-1.x86_64.rpm  
 [root@server1 x86_64]#

시스템에 이전에 설치된 Postfix 버전이 없는지 확인하려면:

yum remove postfix

Postfix 패키지를 선택하고 다음과 같이 설치합니다:

rpm -ivh postfix-2.6.6-2.2.el6.x86_64.rpm
Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.