메일 서버 구성 · 8 min read · Nov 12, 2025
ISP 메일 서버를 가상 사용자/도메인으로 구성하는 방법 - Centos 5.0에서 Postfix, Dovecot, MySQL, phpMyAdmin, TLS/SSL 사용 - 페이지 2
구성:
SMTP-AUTH/TLS
먼저 SMTP-AUTH와 TLS를 구성합니다. 이를 위해 /usr/lib/sasl2/smtpd.conf를 좋아하는 편집기로 엽니다.
vi /usr/lib/sasl2/smtpd.conf아래와 같이 변경합니다.
pwcheck_method: saslauthd
mech_list: plain login디렉토리를 생성한 후 개인 키를 만들고 마지막으로 인증서를 만듭니다.
mkdir -p /etc/postfix/ssl/mailserver
cd /etc/postfix/ssl/mailserver
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650개인 키와 인증서가 생성되었습니다. 나중에 postfix에 이를 사용하도록 지시할 것입니다.
MySQL:
이제 mail이라는 데이터베이스를 생성할 것입니다. 이를 위해 아래의 명령을 실행합니다;
mysql -u root -p비밀번호를 입력하면 MySQL 프롬프트(mysql>)에 도달합니다.
CREATE DATABASE mail;mail 사용자에게 mail에 대한 모든 권한을 부여합니다.
GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';
FLUSH PRIVILEGES;
quitmail 사용자에 대한 비밀번호를 설정합니다. 이는 다음 문장을 통해 수행됩니다.
mysqladmin -u mail password newpassword그런 다음 도메인, 사용자, 별칭 및 메일박스 정보를 포함하는 새로운 데이터베이스(mail)에 필요한 테이블을 생성합니다.
mysql -u mail -p비밀번호를 입력한 후 MySQL 프롬프트에 도달합니다.
show databases;모든 데이터베이스가 표시되며, 여기에는 “mail” 데이터베이스가 포함됩니다. 우리는 “mail”을 사용할 것입니다.
USE mail;- 도메인 테이블을 생성합니다.
CREATE TABLE domain ( domain varchar(255) NOT NULL default '', description varchar(255) NOT NULL default '', aliases int(10) NOT NULL default '0', mailboxes int(10) NOT NULL default '0', maxquota int(10) NOT NULL default '0', transport varchar(255) default NULL, backupmx tinyint(1) NOT NULL default '0', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (domain), KEY domain (domain) ) TYPE=MyISAM COMMENT=' Virtual Domains';- 두 번째로 중요한 테이블은 메일박스이므로 메일박스를 생성합니다.
CREATE TABLE mailbox ( username varchar(255) NOT NULL default '', password varchar(255) NOT NULL default '', name varchar(255) NOT NULL default '', maildir varchar(255) NOT NULL default '', quota int(10) NOT NULL default '0', domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (username), KEY username (username) ) TYPE=MyISAM COMMENT='Virtual Mailboxes';- 별칭 테이블을 생성합니다.
CREATE TABLE alias ( address varchar(255) NOT NULL default '', goto text NOT NULL, domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (address), KEY address (address) ) TYPE=MyISAM COMMENT='Virtual Aliases';필요한 테이블을 생성했으므로 MySQL을 종료합니다.
quitPostfix MySQL:
Postfix는 모든 메일박스 관련 정보를 어떻게 조회할 수 있는지 알아야 합니다. 이를 위해 /etc/postfix 아래에 다음 파일을 생성합니다. 최신 버전의 Postfix는 다른 문장 대신 이를 사용할 수 있으며, 이 경우 모든 줄을 주석 처리하고 마지막 줄의 주석을 제거합니다.
- 이메일을 한 이메일 주소에서 다른 이메일 주소로 전달하기 위한 mysql_virtual_alias_maps.cf 파일을 생성합니다.
vi /etc/postfix/mysql_virtual_alias_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'- 가상 도메인 매핑을 위한 mysql_virtual_domains_maps.cf 파일을 생성합니다. 가상 도메인은 이 파일에 제공된 정보를 사용하여 조회됩니다.
vi /etc/postfix/mysql_virtual_domains_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'- 사용자의 메일박스 위치에 대한 이메일 주소 매핑인 mysql_virtual_mailbox_maps.cf 파일을 생성합니다. Postfix의 내장 가상 배달 에이전트를 사용하여 수신 이메일을 하드 디스크에 저장한 경우 메일박스 경로를 찾기 위해 조회됩니다.
vi /etc/postfix/mysql_virtual_mailbox_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = CONCAT(domain,'/',maildir)
where_field = username
additional_conditions = and active = '1'
#query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'- 마지막으로 사용자 메일박스 쿼타 제한을 매핑하는 데 사용될 mysql_virtual_mailbox_limit_maps.cf 파일을 생성합니다.
vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
#query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'- mysql_virtual 파일에 적절한 소유권과 권한을 부여합니다.
chown root:postfix *.cf
chmod 644 *.cfPostfix:
Postfix 구성 섹션에서 /etc/postfix의 구성 디렉토리에 있는 main.cf 파일을 편집하여 Postfix에 필요한 기본 정보를 입력합니다.
mv /etc/postfix/main.cf /etc/postfix/main.cf.orig
vi /etc/postfix/main.cf############## Postfix###############
#수정 날짜 2008년 6월 17일
#-------------------------------------------------------
smtpd_banner = $myhostname
biff = no
append_dot_mydomain = no
relayhost =
mynetworks = 192.168.49.0/24
inet_interfaces = 192.168.49.81
mailbox_size_limit = 0
recipient_delimiter = +
alias_database = hash:/etc/postfix/aliases
alias_maps = $alias_database
myhostname = example.co.tz
mydomain = rnd
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, $transport_maps
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
disable_vrfy_command = no
readme_directory = /usr/share/doc/postfix-2.2.10/README_FILES
sample_directory = /usr/share/doc/postfix-2.2.10/samples
sendmail_path = /usr/sbin/sendmail
html_directory = no
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/share/man
daemon_directory = /usr/libexec/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 450
####################postfix 섹션 종료###############Postfix 가상 사용자 정보:
다시 main.cf 파일을 편집하여 가상 사용자에 대한 지원을 추가합니다. “virtual_minimum_uid”와 “virtual_uid_maps”는 제 경우에 사용자 ID 150을 가리키며, 이는 가상 메일 처리를 위해 특별히 생성한 사용자입니다. 이는 기본 gid 12를 가진 표준 “mail” 그룹을 사용합니다. 따라서 useradd 명령 또는 adduser를 사용하여 사용자를 먼저 생성합니다.
useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual mailbox" vmail
chmod 770 /var/vmail/ (디렉토리가 존재하지 않으면 생성)
chown vmail:mail /var/vmail
vi /etc/postfix/main.cf#######################가상 도메인 사용자 및 메일박스###############
virtual_mailbox_domains = mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 150
virtual_uid_maps = static:150
virtual_gid_maps = static:12
##############################main.cf의 가상 섹션 종료##############Postfix SASL/TLS 인증:
마지막으로 main.cf 파일을 다시 편집하여 SASL/TLS 인증을 활성화합니다. 이전에 생성한 인증서를 여기에서 사용하여 메일 서버를 보호합니다.
vi /etc/postfix.main.cf#################### SASL/TLS 인증###########################
######SASL 부분#########
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
######TLS 부분###########
smptpd_tls_cert_file = /etc/postfix/ssl/mailserver/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/mailserver/smtpd.key
smtpd_tls_CAfile = /etc/postfix/ssl/mailserver/cacert.pem
smtp_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_received_header = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_recieved_header = yes
###########################SASL/TLS 인증 종료#############편의를 위해 main.cf를 세 섹션으로 나누었습니다 { Postfix, virtual-Domains-Users-and-mailboxes, SASL/TLS-Authentication}. SASL/TLS-Authentication은 ( SASL-PART 및 TLS-PART)로 추가로 나뉩니다. 각 섹션과 그 매개변수를 보여주기 위해 같은 파일을 세 번 편집했습니다. 이제 /etc/aliases와 /etc/aliases.db를 /etc/postfix/로 복사하고 newaliases를 실행합니다.
cp /etc/aliases* /etc/postfix/
newaliasesDovecot v1.x IMAP 및 POP:
Dovecot을 구성하여 POP3 및 IMAP 서비스를 제공합니다. Dovecot의 구성 파일은 /etc/dovecot.conf입니다. 원본 파일을 dovecot.conf.orig로 백업하고 실행 중인 파일을 우리의 필요에 맞게 수정합니다. Dovecot으로 가상 사용자를 처리하기 위해 /etc/dovecot-mysql.conf 파일을 생성합니다.
vi /etc/dovecot-mysql.conf######dovecot-mysql.conf는 다음과 같아야 합니다##########
# 주의: '\' 줄 분할은 가독성을 위해 사용되며, 현재 Dovecot은 이를 지원하지 않습니다.
# mysqld.sock 소켓은 시스템에 따라 다른 위치에 있을 수 있습니다.
driver = mysql
default_pass_scheme = plain
#connect = host=/var/run/mysqld/mysqld.sock dbname=mail user=root password=default
# 또는 localhost에 연결할 수도 있습니다:
connect = host=localhost dbname=mail user=mail password=mail
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 12 AS gid, concat('dirsize:storage=',quota) AS quota FROM mailbox WHERE username ='%u' AND active ='1'
####################여기서 종료####################이제 dovecot.conf를 구성하여 mysql_auth 방법을 사용하여 가상 사용자를 인증합니다. 일반 Linux 사용자는 메일 서버에 로그인할 수 없음을 명심하십시오. 왜냐하면 dovecot 구성에서 Pam 인증 방법을 활성화하지 않았기 때문입니다. 또한 first_valid_uid와 last_valid_uid는 150으로 설정되어 있어 uid 150을 가진 사용자만 로그인할 수 있습니다. Pop3 및 pop3s 프로토콜이 사용 가능하게 설정됩니다.
cp -p /etc/dovecot.conf /etc/dovecot.conf.orig
vi /etc/dovecot.conf(다음 줄만 편집)
##############가상 사용자와 함께 작동하도록 구성된 dovecot############
base_dir = /var/run/dovecot/
protocols = imap pop3 imaps pop3s
listen = [::]
login_dir = /var/run/dovecot-login
mail_location = mbox:/var/vmail/%d/%n
mbox_read_locks = fcntl
log_timestamp = "%Y-%m-%d %H:%M:%S "
log_path = /var/log/maillog
mail_extra_groups = mail
first_valid_uid = 150
last_valid_uid = 150
maildir_copy_with_hardlinks = yes
userdb sql {
args = /etc/dovecot-mysql.conf
}
passdb sql {
args = /etc/dovecot-mysql.conf
}
####################################여기서 종료######################이후 /etc/dovecot-mysql.conf에 대한 소유권 및 접근 권한을 설정합니다.
chmod 600 /etc/dovecot/*.conf
chown vmail /etc/dovecot/*.confRoundcube 설치 및 구성:
설치 노트(Roundcube)를 기반으로
- 압축을 풀고 이 폴더를 문서 루트(/var/www/html/mail) 내의 어딘가에 배치합니다.
- 다음 디렉토리(및 그 안의 파일)가 웹 서버에 의해 쓰기 가능하도록 설정되어 있는지 확인합니다.
- /temp
- /logs
- RoundCube를 위한 새로운 데이터베이스와 데이터베이스 사용자를 생성합니다(데이터베이스 설정 참조).
- 브라우저를 http://url-to-roundcube/installer/로 이동합니다.
- 설치 스크립트의 지침을 따릅니다(또는 수동 구성 참조).
- 구성 생성 및 테스트 후 설치 디렉토리를 제거합니다.
- 완료!
데이터베이스 설정
- MySQL 4.1.x/5.x
MySQL 버전 4.1 이상에서는 utf-8 문자 집합으로 RoundCube의 데이터베이스를 생성하는 것이 권장됩니다. 초기 절차의 예는 다음과 같습니다:
mysql -u root -pCREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';
quitmysql -u mail -p roundcubemail < SQL/mysql5.initial.sql참고: ‘password’는 roundcube 사용자의 마스터 비밀번호입니다. 더 안전한 비밀번호로 교체하는 것이 강력히 권장됩니다. 이 비밀번호는 나중에 ‘config/db.inc.php’에서 지정해야 합니다.
HTTP 섹션:
메일 서버 웹 프론트 엔드를 사용하기 시작하려면 /etc/httpd/conf/httpd.conf 파일을 편집합니다.
vi /etc/httpd/conf/httpd.conf아래의 문장을 추가합니다.
#Roundcube를 사용한 프론트 엔드 메일 접근
DocumentRoot /var/www/html/mail
ServerName mail.example.co.tz
구성을 저장하고 종료합니다.
가상 사용자 및 도메인 생성:
- 이제 메일 데이터베이스에서 가상 도메인과 가상 사용자를 생성합니다.
mysql -u mail -p- 비밀번호를 입력하면 mysql> 프롬프트에 도달합니다.
USE mail;- 먼저 도메인 테이블에 가상 도메인(example.co.tz)을 생성합니다.
INSERT INTO domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,active) VALUES ('example.co.tz','Virtual domain','10','10', '0','virtual', '0','1');- 이제 메일박스 테이블에 두 개의 가상 사용자를 생성합니다. kiiza와 hoboka의 사용자 이름으로 ( [email protected] & [email protected])를 생성했습니다.
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','mwamaLis', 'Hoboka Mwamakunge ','hoboka/', '0','example.co.tz','1');
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','gekman', 'Kiiza Mutungi','kiiza/', '0','example.co.tz','1');
quit이제 가상 사용자와 가상 도메인을 생성했으므로 한 사용자 계정에서 다른 사용자 계정으로 로그인하고 메일을 보내어 메일 서버를 테스트하고자 합니다. 따라서 Dovecot, Postfix, MySQL 및 웹 서버 데몬을 시작합니다. 또한 다음 부팅 시 자동으로 시작되도록 하기를 원합니다. 이를 위해 다음 명령을 실행합니다.
chkconfig -level 235 mysqld on
chkconfig -level 235 saslauthd on
chkconfig -level 235 postfix on
chkconfig -level 235 dovecot on
chkconfig -level 235 httpd on
/etc/init.d/saslauthd start
/etc/init.d/mysqld start
/etc/init.d/postfix start
/etc/init.d/dovecot start
/etc/init.d/httpd start새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.