메일 서버 · 2 min read · Oct 05, 2025
가상 도메인 및 사용자와 함께하는 전체 메일 서버 솔루션 (Debian Etch, Postfix, Mysql, Dovecot, DSpam, ClamAV, Postgrey, RBL) - 페이지 9
VI. 안전하지 않은 IMAP
이제 꽤나 방탄 메일 서버 설정이 완료되었습니다. 메일이 들어오고, 다양한 스팸 방지 절차를 거치며, 내부 서버의 가상 사용자 디렉토리에 깔끔하게 저장되기 전에 바이러스 검사를 받습니다. 하지만… 사용자는 어떻게 이메일에 접근하나요?
좋은 질문입니다. 답은 사용자의 위치에 따라 다릅니다. 당분간 사용자가 (A) 로컬(내부) 네트워크에 있거나 (B) 웹 서버에 대한 안전한 연결을 통해 이메일에 접근하고 있다고 가정하겠습니다. 이 경우 둘 다 IMAP이 실행되고 있어야 합니다. 이미 포스트맨 서버에 완전한 기능을 갖춘 IMAP 서버(Dovecot)가 설치되어 있으므로, 해당 서버를 사용하여 접근하도록 하겠습니다.
/etc/dovecot/dovecot.conf에 위치한 Dovecot 구성 파일을 열고 다음과 같이 설정합니다. 기본 구성은 이미 많이 되어 있을 것이므로, 특정 섹션의 주석을 해제하고 약간의 변경만 하면 될 것입니다.
## Dovecot 구성 파일
#
base_dir = /var/run/dovecot/
#
# imap imaps pop3 pop3s (SSL이 구성된 경우 imaps 및 pop3s 사용)
protocols = imap
#
# SSL을 사용하는 경우 ssl_listen 문을 주석 해제하고 listen을 주석 처리
protocol imap {
listen = *:143
# ssl_listen = *:993
}
#protocol pop3 {
#listen = *:110
# ssl_listen = *:995
#}
#
log_timestamp = "%Y-%m-%d %H:%M:%S "
syslog_facility = mail
#
# SSL을 사용하는 경우 주석 해제
#ssl_cert_file = /etc/ssl/mycompany/mailserver/mail-cert.pem
#ssl_key_file = /etc/ssl/mycompany/mailserver/mail-key.pem
#ssl_ca_file = /etc/ssl/mycompany/ca/mycompany.pem
#ssl_verify_client_cert = yes
#ssl_parameters_regenerate = 168
#verbose_ssl = no
#
# 메일박스 위치
mail_location = maildir:/vmail/%d/%u
#
mail_extra_groups = mail
mail_debug = no
first_valid_uid = 150
last_valid_uid = 150
maildir_copy_with_hardlinks = yes
#
protocol imap {
login_executable = /usr/lib/dovecot/imap-login
mail_executable = /usr/lib/dovecot/imap
imap_max_line_length = 65536
}
#protocol pop3 {
#login_executable = /usr/lib/dovecot/pop3-login
#mail_executable = /usr/lib/dovecot/pop3
#pop3_uidl_format = %08Xu%08Xv
#}
protocol lda {
postmaster_address = [email protected]
sendmail_path = /usr/lib/sendmail
auth_socket_path = /var/run/dovecot/auth-master
}
#
auth_verbose = no
auth_debug = no
auth_debug_passwords = no
#
auth default {
mechanisms = plain
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
user = nobody
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0660
user = vmail
group = mail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
#
# 클라이언트 인증서가 필요한 경우, 다음 줄을 사용
# ssl_require_client_cert = yes
# ssl_username_from_cert = yes
}참고: 위 구성을 그대로 복사해서 사용할 수는 없습니다! 위의 변경 사항을 자신의 구성에 통합해야 합니다.
Dovecot 구성은 거의 완료되었지만, Postfix 구성과 마찬가지로 MySQL 설정도 통합해야 합니다.
/etc/dovecot/dovecot-sql.conf 파일을 열고 다음 내용이 포함되어 있는지 확인합니다.
driver = mysql
connect = host=sql-1.internal.example.com dbname=virtual_mail user=vmail_user password=vmail_user_password
# MD5의 새로운 이름은 MD5-CRYPT이므로 버전에 따라 변경해야 할 수 있습니다
default_pass_scheme = MD5
# 메일박스 가져오기
user_query = SELECT '/vmail/%d/%n' AS home, 'maildir:/vmail/%d/%n' AS mail, 150 AS uid, 8 AS gid, CONCAT('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'
# 비밀번호 가져오기
password_query = SELECT username AS user, password, '/vmail/%d/%n' AS userdb_home, 'maildir:/vmail/%d/%n' AS userdb_mail, 150 AS userdb_uid, 8 AS userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
# 클라이언트 인증서를 사용하여 인증하는 경우, 위 내용을 주석 처리하고 다음 내용을 주석 해제
#password_query = SELECT null AS password, '%u' AS user이 문서에 MySQL 비밀번호를 일반 텍스트 형식으로 저장했으므로, 우리가 읽을 수 있는 유일한 사람인지 확인해야 합니다!
# chmod 600 /etc/dovecot/*.conf
# chown vmail /etc/dovecot/*.conf내부/안전하지 않은 Dovecot 구성은 이제 완료되었습니다! Dovecot 서비스를 재시작하세요:
# invoke-rc.d dovecot restart… 그리고 내부/웹메일 사용자는 이제 postman.internal.example.com에서 이메일을 확인할 수 있습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.