메일 서버 · 5 min read · Nov 08, 2025
Postfix, Courier, MySQL 및 SquirrelMail을 이용한 가상 사용자 및 도메인 (Ubuntu 12.04 LTS)
이 튜토리얼은 2012년 Falko Timme의 저작권이 있습니다. 이는 Christoph Haas의 튜토리얼에서 파생된 것으로 http://workaround.org에서 확인할 수 있습니다. 이 튜토리얼은 Creative Commons 라이선스 2.5 또는 이후 버전 하에 자유롭게 사용할 수 있습니다.
이 문서는 MySQL 데이터베이스에 있는 가상 사용자 및 도메인을 기반으로 하는 Postfix 메일 서버를 설치하는 방법을 설명합니다. 또한 Courier(Courier-POP3, Courier-IMAP)의 설치 및 구성을 시연하여 Courier가 Postfix가 사용하는 동일한 MySQL 데이터베이스에 대해 인증할 수 있도록 합니다.
결과적으로 생성된 Postfix 서버는 SMTP-AUTH 및 TLS 및 쿼터를 지원합니다(쿼터는 기본적으로 Postfix에 내장되어 있지 않으며, Postfix를 적절하게 패치하는 방법을 보여드리겠습니다). 비밀번호는 데이터베이스에 암호화된 형태로 저장됩니다(내가 찾은 대부분의 문서는 보안 위험이 있는 일반 텍스트 비밀번호를 다루고 있었습니다). 이 튜토리얼은 또한 이메일이 스팸 및 바이러스를 검사할 수 있도록 Amavisd, SpamAssassin 및 ClamAV의 설치를 다룹니다. 사용자가 이메일을 읽고 보내고 비밀번호를 변경할 수 있도록 웹메일 인터페이스로 SquirrelMail을 설치하는 방법도 보여드리겠습니다.
이러한 “가상” 설정(가상 사용자 및 도메인이 MySQL 데이터베이스에 있는)은 “실제” 시스템 사용자를 기반으로 하는 설정보다 훨씬 더 성능이 뛰어납니다. 이 가상 설정을 통해 메일 서버는 수천 개의 도메인과 사용자를 처리할 수 있습니다. 또한 새로운 사용자/도메인을 추가하거나 기존 것을 편집할 때 MySQL 데이터베이스만 처리하면 되므로 관리가 더 쉽습니다. 더 이상 db 파일을 생성하기 위한 postmap 명령이나 Postfix를 다시 로드할 필요가 없습니다. MySQL 데이터베이스 관리를 위해 phpMyAdmin과 같은 웹 기반 도구를 사용할 수 있으며, 이 방법서에서도 설치됩니다. 세 번째 장점은 사용자가 사용자 이름으로 이메일 주소를 가지므로(사용자 이름 + 이메일 주소 대신) 이해하고 기억하기가 더 쉽다는 것입니다.
이 방법서는 실용적인 가이드를 목적으로 하며, 이론적 배경은 다루지 않습니다. 이론적 배경은 웹의 많은 다른 문서에서 다루어집니다.
이 문서는 어떤 종류의 보증 없이 제공됩니다! 이러한 시스템을 설정하는 유일한 방법이 아니라는 점을 말씀드리고 싶습니다. 이 목표를 달성하는 방법은 여러 가지가 있지만, 이것이 제가 선택한 방법입니다. 이것이 귀하에게 작동할 것이라는 보증을 제공하지 않습니다!
1 사전 주의 사항
이 튜토리얼은 Ubuntu 12.04 LTS 서버(Precise Pangolin)를 기반으로 하므로, 이 튜토리얼을 계속 진행하기 전에 기본 Ubuntu 12.04 서버 설치를 설정해야 합니다(예: 이 튜토리얼의 1 - 3페이지에 표시된 대로: 완벽한 서버 - Ubuntu 12.04 LTS (Apache2, BIND, Dovecot, ISPConfig 3)). 시스템은 정적 IP 주소를 가져야 합니다. 이 튜토리얼에서는 192.168.0.100을 IP 주소로 사용하고 server1.example.com을 호스트 이름으로 사용합니다.
루트로 로그인했는지 확인하십시오(루트가 되려면
sudo su입력하십시오), 이 튜토리얼의 모든 단계를 루트 사용자로 실행해야 합니다.
/bin/sh를 /bin/bash에 대한 심볼릭 링크로 만드는 것이 매우 중요합니다…
dpkg-reconfigure dashdash를 기본 시스템 셸(/bin/sh)로 사용하시겠습니까? <– 아니오
… 그리고 AppArmor를 비활성화해야 합니다:
/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils
2 Postfix, Courier, Saslauthd, MySQL, phpMyAdmin 설치
Postfix, Courier, Saslauthd, MySQL 및 phpMyAdmin을 설치하려면 간단히 다음을 실행합니다.
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass몇 가지 질문이 있을 것입니다:
MySQL “root” 사용자에 대한 새 비밀번호: <– yourrootsqlpassword
MySQL “root” 사용자에 대한 비밀번호 반복: <– yourrootsqlpassword
웹 기반 관리용 디렉토리 생성? <– 아니오
메일 구성의 일반 유형: <– 인터넷 사이트
시스템 메일 이름: <– server1.example.com
SSL 인증서 필요 <– 확인
자동으로 재구성할 웹 서버: <– apache2
phpmyadmin의 데이터베이스를 dbconfig-common으로 구성하시겠습니까? <– 아니오
3 Postfix에 쿼타 패치 적용
Postfix 소스를 가져오고, 쿼타 패치로 패치한 후, 새로운 Postfix.deb 패키지를 빌드하고 설치해야 합니다:
apt-get build-dep postfixcd /usr/src
apt-get source postfix
(다음 명령에서 올바른 Postfix 버전을 사용하고 있는지 확인하십시오. 나는 Postfix 2.9.1을 설치했습니다. Postfix 버전을 확인하려면 다음을 실행하십시오.
postconf -d | grep mail_version출력은 다음과 같아야 합니다:
root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.9.1
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#
)
wget http://vda.sourceforge.net/VDA/postfix-vda-v11-2.9.1.patch
cd postfix-2.9.1
patch -p1 < ../postfix-vda-v11-2.9.1.patch
다음으로 debian/rules를 열고 DEB_BUILD_HARDENING을 1에서 0으로 변경합니다:
vi debian/rules| [...] export DEB_BUILD_HARDENING=0 [...] |
이 작업을 수행하지 않으면 다음과 같은 오류 메시지와 함께 빌드가 실패합니다:
maildir.c: In function âdeliver_maildirâ:
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c: In function âsql2fileâ:
maildir.c:404:25: warning: ignoring return value of âreadâ, declared with attribute warn_unused_result [-Wunused-result]
maildir.c:417:26: warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]
cc1: some warnings being treated as errors
make: [maildir.o] Error 1
make: Leaving directory `/usr/src/postfix-2.9.1/src/virtual’
make[1]: [update] Error 1
make[1]: Leaving directory `/usr/src/postfix-2.9.1’
make: * [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
root@server1:/usr/src/postfix-2.9.1#
이제 새로운 Postfix.deb 패키지를 빌드할 수 있습니다:
dpkg-buildpackage이제 한 단계 위로 이동하면 새로운 .deb 패키지가 생성된 위치입니다:
cd ..명령
ls -l은 사용 가능한 패키지를 보여줍니다:
root@server1:/usr/src# ls -l
total 6932
drwxr-xr-x 24 root root 4096 Apr 27 11:20 linux-headers-3.2.0-23
drwxr-xr-x 7 root root 4096 Apr 27 11:20 linux-headers-3.2.0-23-generic
drwxr-xr-x 18 root root 4096 May 7 15:57 postfix-2.9.1
-rw-r–r– 1 root root 3814 May 7 15:58 postfix_2.9.1-4_amd64.changes
-rw-r–r– 1 root root 1497792 May 7 15:58 postfix_2.9.1-4_amd64.deb
-rw-r–r– 1 root root 246141 May 7 15:51 postfix_2.9.1-4.diff.gz
-rw-r–r– 1 root root 1492 May 7 15:51 postfix_2.9.1-4.dsc
-rw-r–r– 1 root root 3768329 Mar 22 05:05 postfix_2.9.1.orig.tar.gz
-rw-r–r– 1 root root 46620 May 7 15:58 postfix-cdb_2.9.1-4_amd64.deb
-rw-r–r– 1 root root 160196 May 7 15:58 postfix-dev_2.9.1-4_all.deb
-rw-r–r– 1 root root 1080772 May 7 15:58 postfix-doc_2.9.1-4_all.deb
-rw-r–r– 1 root root 55478 May 7 15:58 postfix-ldap_2.9.1-4_amd64.deb
-rw-r–r– 1 root root 48550 May 7 15:58 postfix-mysql_2.9.1-4_amd64.deb
-rw-r–r– 1 root root 48718 May 7 15:58 postfix-pcre_2.9.1-4_amd64.deb
-rw-r–r– 1 root root 48686 May 7 15:58 postfix-pgsql_2.9.1-4_amd64.deb
-rw-r–r– 1 root root 55009 Apr 11 14:54 postfix-vda-v11-2.9.1.patch
root@server1:/usr/src#
postfix 및 postfix-mysql 패키지를 선택하고 다음과 같이 설치합니다:
dpkg -i postfix_2.9.1-4_amd64.deb postfix-mysql_2.9.1-4_amd64.deb4 Postfix/Courier용 MySQL 데이터베이스 생성
이제 mail이라는 데이터베이스를 생성합니다:
mysqladmin -u root -p create mail다음으로 MySQL 셸로 이동합니다:
mysql -u root -pMySQL 셸에서 mail 데이터베이스에 대해 SELECT, INSERT, UPDATE, DELETE 권한을 가진 사용자 mail_admin을 생성합니다(자신의 비밀번호로 교체하십시오). 이 사용자는 Postfix와 Courier가 메일 데이터베이스에 연결하는 데 사용됩니다:
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;
여전히 MySQL 셸에서 Postfix와 Courier에 필요한 테이블을 생성합니다:
USE mail;CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) ENGINE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) ENGINE=MyISAM;
quit;보시다시피 quit; 명령으로 MySQL 셸을 종료하고 Linux 셸로 돌아왔습니다.
domains 테이블은 Postfix가 이메일을 수신해야 하는 각 가상 도메인을 저장합니다(예: example.com).
| domain |
| example.com |
forwardings 테이블은 하나의 이메일 주소를 다른 이메일 주소로 별칭을 지정하는 데 사용됩니다. 예를 들어, [email protected]의 이메일을 [email protected]로 전달합니다.
| source | destination |
| [email protected] | [email protected] |
users 테이블은 모든 가상 사용자(즉, 이메일 주소, 이메일 주소와 사용자 이름이 동일함) 및 비밀번호( 암호화된 형태!)와 각 메일 박스의 쿼타 값을 저장합니다(이 예제에서는 기본값이 10485760 바이트, 즉 10MB입니다).
| password | quota | |
| [email protected] | No9.E4skNvGa. (암호화된 형태의 “비밀“) | 10485760 |
transport 테이블은 선택 사항이며, 고급 사용자용입니다. 이는 단일 사용자, 전체 도메인 또는 모든 메일을 다른 서버로 전달할 수 있도록 합니다. 예를 들어,
| domain | transport |
| example.com | smtp:[1.2.3.4] |
는 example.com의 모든 이메일을 SMTP 프로토콜을 통해 IP 주소 1.2.3.4의 서버로 전달합니다(대괄호 []는 “MX DNS 레코드 조회를 하지 마십시오”를 의미합니다(이는 IP 주소에 대해 의미가 있습니다…). 대신 완전한 도메인 이름(FQDN)을 사용하는 경우 대괄호를 사용하지 않습니다.).
참고로, (귀하의 메일 서버 시스템의 IP 주소가 192.168.0.100이라고 가정합니다) 브라우저에서 http://192.168.0.100/phpmyadmin/를 통해 phpMyAdmin에 접근하고 mail_admin으로 로그인할 수 있습니다. 그러면 데이터베이스를 확인할 수 있습니다. 나중에 phpMyAdmin을 사용하여 메일 서버를 관리할 수 있습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.