메일 서버 · 5 min read · Sep 27, 2025

Postfix, Courier, MySQL 및 SquirrelMail을 이용한 가상 사용자 및 도메인 (Debian Lenny)

Postfix, Courier, MySQL 및 SquirrelMail을 이용한 가상 사용자 및 도메인 (Debian Lenny)

버전 1.0
저자: Falko Timme

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

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

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

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

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

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

1 사전 참고

이 튜토리얼은 Debian Lenny를 기반으로 하므로, 이 튜토리얼을 계속 진행하기 전에 기본 Debian Lenny 서버 설치를 설정해야 합니다(예: 이 튜토리얼의 1-7장: 완벽한 서버 - Debian Lenny (Debian 5.0) [ISPConfig 2]에서 보여준 대로). 시스템은 정적 IP 주소를 가져야 합니다. 이 튜토리얼에서는 192.168.0.100을 IP 주소로 사용하고 server1.example.com을 호스트 이름으로 사용합니다.

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 postfix-tls 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 인증서 필요 <– 확인
작업 그룹/도메인 이름: <– WORKGROUP
DHCP의 WINS 설정을 사용하도록 smb.conf 수정? <– 아니요
자동으로 재구성할 웹 서버: <– apache2

3 Postfix에 쿼터 패치 적용

Postfix 소스를 가져오고, 쿼터 패치로 패치한 후, 새로운 Postfix.deb 패키지를 빌드하고 설치해야 합니다:

apt-get build-dep postfix
cd /usr/src  
apt-get source postfix

(다음 명령에서 올바른 Postfix 버전을 사용하고 있는지 확인하십시오. 이 튜토리얼에서는 Postfix 2.5.5가 설치되어 있습니다. Postfix 버전을 확인하려면 다음 명령을 실행하십시오.

postconf -d | grep mail_version

출력은 다음과 같아야 합니다:

server1:/usr/src# postconf -d | grep mail_version  
mail_version = 2.5.5  
milter_macro_v = $mail_name $mail_version  
server1:/usr/src#

)

wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz  
gunzip postfix-2.5.5-vda-ng.patch.gz  
cd postfix-2.5.5  
patch -p1 < ../postfix-2.5.5-vda-ng.patch  
dpkg-buildpackage

dpkg-buildpackage 명령의 끝에서 다음과 같은 경고가 표시될 수 있습니다:

dpkg-buildpackage: warning: Failed to sign .dsc and .changes file

이 메시지는 무시할 수 있습니다.

이제 한 디렉토리 위로 이동하면 새로운 .deb 패키지가 생성된 곳입니다:

cd ..

명령

ls -l

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

server1:/usr/src# ls -l  
total 5880  
drwxr-xr-x 19 root root 4096 2009-02-20 14:15 postfix-2.5.5  
-rw-r--r-- 1 root src 236910 2009-02-20 14:12 postfix_2.5.5-1.1.diff.gz  
-rw-r--r-- 1 root src 1178 2009-02-20 14:12 postfix_2.5.5-1.1.dsc  
-rw-r--r-- 1 root src 3695 2009-02-20 14:17 postfix_2.5.5-1.1_i386.changes  
-rw-r--r-- 1 root src 1233138 2009-02-20 14:17 postfix_2.5.5-1.1_i386.deb  
-rw-r--r-- 1 root src 3157877 2008-09-02 23:18 postfix_2.5.5.orig.tar.gz  
-rw-r--r-- 1 root src 58389 2008-09-06 05:02 postfix-2.5.5-vda-ng.patch  
-rw-r--r-- 1 root src 41572 2009-02-20 14:17 postfix-cdb_2.5.5-1.1_i386.deb  
-rw-r--r-- 1 root src 141394 2009-02-20 14:17 postfix-dev_2.5.5-1.1_all.deb  
-rw-r--r-- 1 root src 915978 2009-02-20 14:17 postfix-doc_2.5.5-1.1_all.deb  
-rw-r--r-- 1 root src 48934 2009-02-20 14:17 postfix-ldap_2.5.5-1.1_i386.deb  
-rw-r--r-- 1 root src 43512 2009-02-20 14:17 postfix-mysql_2.5.5-1.1_i386.deb  
-rw-r--r-- 1 root src 43448 2009-02-20 14:17 postfix-pcre_2.5.5-1.1_i386.deb  
-rw-r--r-- 1 root src 43586 2009-02-20 14:17 postfix-pgsql_2.5.5-1.1_i386.deb  
server1:/usr/src#

postfix 및 postfix-mysql 패키지를 선택하고 다음과 같이 설치합니다:

dpkg -i postfix_2.5.5-1.1_i386.deb postfix-mysql_2.5.5-1.1_i386.deb

4 Postfix/Courier용 MySQL 데이터베이스 생성

이제 mail이라는 데이터베이스를 생성합니다:

mysqladmin -u root -p create mail

다음으로 MySQL 셸로 이동합니다:

mysql -u root -p

MySQL 셸에서 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) )  
TYPE=MyISAM;
CREATE TABLE forwardings (  
source varchar(80) NOT NULL,  
destination TEXT NOT NULL,  
PRIMARY KEY (source) )  
TYPE=MyISAM;
CREATE TABLE users (  
email varchar(80) NOT NULL,  
password varchar(20) NOT NULL,  
quota bigint(20) DEFAULT '10485760',  
PRIMARY KEY (email)  
) TYPE=MyISAM;
CREATE TABLE transport (  
domain varchar(128) NOT NULL default '',  
transport varchar(128) NOT NULL default '',  
UNIQUE KEY domain (domain)  
) TYPE=MyISAM;
quit;

보시다시피 quit; 명령으로 MySQL 셸을 종료하고 리눅스 셸로 돌아왔습니다.

domains 테이블은 Postfix가 이메일을 수신해야 하는 각 가상 도메인을 저장합니다(예: example.com).

domain
example.com

forwardings 테이블은 하나의 이메일 주소를 다른 이메일 주소로 별칭을 지정하는 데 사용됩니다. 예를 들어, [email protected]의 이메일을 [email protected]로 전달합니다.

sourcedestination
[email protected][email protected]

users 테이블은 모든 가상 사용자(즉, 이메일 주소, 이메일 주소와 사용자 이름이 동일함) 및 비밀번호( 암호화된 형태!)와 각 메일 박스의 쿼타 값을 저장합니다(이 예제에서는 기본 값이 10485760 바이트로 10MB를 의미합니다).

emailpasswordquota
[email protected]No9.E4skNvGa. (암호화된 형태의 “비밀“)10485760

transport 테이블은 선택 사항이며, 고급 사용자용입니다. 단일 사용자, 전체 도메인 또는 모든 메일을 다른 서버로 전달할 수 있습니다. 예를 들어,

domaintransport
example.comsmtp:[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을 사용하여 메일 서버를 관리할 수 있습니다.

Share: X/Twitter LinkedIn

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

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