메일 서버 · 5 min read · Oct 03, 2025

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

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

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

이 튜토리얼은 Falko Timme의 저작권(c) 2011에 의해 보호됩니다. 이 튜토리얼은 http://workaround.org에서 찾을 수 있는 Christoph Haas의 튜토리얼을 기반으로 합니다. 이 튜토리얼은 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 Squeeze를 기반으로 하므로, 이 튜토리얼을 계속 진행하기 전에 기본 Debian Squeeze 서버 설치를 설정해야 합니다(예: 이 튜토리얼의 처음 8장에 설명된 대로: 완벽한 서버 - Debian Squeeze (Debian 6.0) [ISPConfig 2]). 시스템은 정적 IP 주소를 가져야 합니다. 이 튜토리얼에서는 192.168.0.100을 내 IP 주소로 사용하고 server1.example.com을 호스트 이름으로 사용합니다.

/bin/sh를 /bin/bash에 대한 심볼릭 링크로 만드는 것이 매우 중요합니다:

dpkg-reconfigure dash

dash를 기본 시스템 셸(/bin/sh)로 사용하시겠습니까? <– 아니요

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

몇 가지 질문이 있을 것입니다:

메일 구성의 일반 유형: <– 인터넷 사이트
시스템 메일 이름: <– server1.example.com
MySQL “root” 사용자에 대한 새 비밀번호: <– yourrootsqlpassword
MySQL “root” 사용자에 대한 비밀번호 반복: <– yourrootsqlpassword
웹 기반 관리용 디렉토리 생성? <– 아니요
SSL 인증서 필요 <– 확인
작업 그룹/도메인 이름: <– WORKGROUP
자동으로 재구성할 웹 서버: <– apache2
phpmyadmin을 위한 데이터베이스를 dbconfig-common으로 구성하시겠습니까? <– 아니요

3 Postfix에 쿼타 패치 적용

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

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

(다음 명령에서 올바른 Postfix 버전을 사용하고 있는지 확인하십시오. 나는 Postfix 2.7.1을 설치했습니다. Postfix 버전을 확인하려면 다음 명령을 실행하십시오:

postconf -d | grep mail_version

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

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

)

wget http://vda.sourceforge.net/VDA/postfix-vda-2.7.1.patch  
 cd postfix-2.7.1  
 patch -p1 < ../postfix-vda-2.7.1.patch  
 dpkg-buildpackage

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

cd ..

명령

ls -l

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

root@server1:/usr/src# ls -l  
 total 6416  
 drwxr-xr-x 19 root root 4096 Feb 28 15:33 postfix-2.7.1  
 -rw-r--r-- 1 root root 3980 Feb 28 15:33 postfix_2.7.1-1_amd64.changes  
 -rw-r--r-- 1 root root 1419128 Feb 28 15:33 postfix_2.7.1-1_amd64.deb  
 -rw-r--r-- 1 root root 234708 Feb 28 15:31 postfix_2.7.1-1.diff.gz  
 -rw-r--r-- 1 root root 1181 Feb 28 15:31 postfix_2.7.1-1.dsc  
 -rw-r--r-- 1 root root 3418747 Jun 21 2010 postfix_2.7.1.orig.tar.gz  
 -rw-r--r-- 1 root root 42086 Feb 28 15:33 postfix-cdb_2.7.1-1_amd64.deb  
 -rw-r--r-- 1 root root 146770 Feb 28 15:33 postfix-dev_2.7.1-1_all.deb  
 -rw-r--r-- 1 root root 1003542 Feb 28 15:33 postfix-doc_2.7.1-1_all.deb  
 -rw-r--r-- 1 root root 50510 Feb 28 15:33 postfix-ldap_2.7.1-1_amd64.deb  
 -rw-r--r-- 1 root root 44160 Feb 28 15:33 postfix-mysql_2.7.1-1_amd64.deb  
 -rw-r--r-- 1 root root 44252 Feb 28 15:33 postfix-pcre_2.7.1-1_amd64.deb  
 -rw-r--r-- 1 root root 44214 Feb 28 15:33 postfix-pgsql_2.7.1-1_amd64.deb  
 -rw-r--r-- 1 root root 59667 Nov 5 15:05 postfix-vda-2.7.1.patch  
 root@server1:/usr/src#

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

dpkg -i postfix_2.7.1-1_amd64.deb postfix-mysql_2.7.1-1_amd64.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 INT(10) 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 셸을 종료하고 Linux 셸로 돌아왔습니다.

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

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

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