메일 서버 · 5 min read · Dec 25, 2025
Arch Linux에서 간단한 메일 서버 (Postfix + Dovecot)
Arch Linux에서 간단한 메일 서버 (Postfix + Dovecot)
저자: Jeffrey Gelens
버전: 1.3
날짜: 2009-04-12
소개
이 튜토리얼은 Arch Linux 머신 또는 VPS에서 Postfix와 Dovecot을 사용하여 완전한 메일 서버를 설치하는 방법을 설명합니다. 이 특정 튜토리얼은 제 256MB VPS를 기반으로 합니다. 모든 단계를 자세히 설명하지 않으므로 기본적인 리눅스 지식이 필요합니다.
기본 시스템
기본 이미지는 Arch Linux 2008.06입니다. 부팅 후 SSH 서버에서 루트 로그인을 비활성화하고 다음과 같이 새 사용자를 생성하는 것이 좋습니다:
adduser
usermod -a -G wheel,users,nobody,mail Arch Linux 미러를 속도에 따라 순위를 매기는 것은 선택 사항이지만, 설치 속도를 높일 수 있습니다:
pacman -Sy
pacman -S python
sed -ie'' 's/^#S/S/g' /etc/pacman.d/mirrorlist
rankmirrors -v /etc/pacman.d/mirrorlist | tee /etc/pacman.d/mirrorlist.new && mv /etc/pacman.d/mirrorlist.new /etc/pacman.d/mirrorlist이 설정에 필요한 필수 패키지를 설치합니다:
pacman -Syu
pacman -S sudo base-devel abs이메일 서버
기본 패키지를 설치했으므로 다음 단계는 이메일 서버를 설치하는 것입니다. SMTP 서버로 Postgrey를 설치할 것이며, 이는 스팸에 대한 최고의 도구입니다. 따라서 이 도구도 설치합시다. 그레이리스트는 현재 메시지를 스캔하지 않고 스팸을 차단하는 매우 효과적인 방법이므로 CPU 사이클을 낭비하지 않습니다. 제 서버에서는 약 95%의 모든 스팸을 차단하고 있으며, 나머지 5%는 Spamassassin이 처리합니다. 그레이리스트의 유일한 단점은 수신 이메일이 몇 분 지연된다는 것입니다.
pacman -S postfix dovecot spamassassin procmail
groupadd -g 5001 spamd
useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin -m spamd
chown spamd:spamd /var/lib/spamassassinSpamassassin
–max-children을 원하는 대로 편집합니다. Spamassassin은 많은 메모리를 사용하므로 사용자 수가 몇 명인 메일 서버의 경우 1개의 자식 프로세스면 충분합니다.
/etc/conf.d/spamd
SAHOME="/var/lib/spamassassin/"
SPAMD_OPTS="-c --max-children 1 --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log --pidfile /var/run/spamd.pid"인증서
먼저 Dovecot과 Postfix를 위한 자체 서명된 인증서를 생성해야 합니다. 비밀번호를 입력하라는 메시지가 표시되며, 아무 임의의 문자열이면 됩니다. 기억할 필요는 없습니다.
cd /etc/ssl/certs
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout mail.key -out mail.crt
openssl rsa -in mail.key -out mail.key
mv mail.key /etc/ssl/privateDovecot
Dovecot과 Postfix를 설정하여 이메일을 저장하는 Maildir 구조를 사용합니다. 이는 모든 사용자의 이메일을 데이터베이스가 아닌 홈 디렉토리에 저장합니다. 이 설정에는 괜찮지만, 사용자 수가 많을 경우 MySQL 또는 PostgreSQL을 사용하는 것이 좋습니다. Dovecot은 사용자가 IMAP 및 IMAPs(SSL)를 사용할 수 있도록 설정됩니다. 또한 Dovecot에는 별도의 SASL 서버를 설정할 필요가 없도록 내장된 SASL 인증 서버가 있습니다. 따라서 메모리를 절약할 수 있습니다.
/etc/dovecot/dovecot.conf
protocols = imap imaps
disable_plaintext_auth = yes
log_timestamp = "%b %d %H:%M:%S "
ssl = yes
ssl_cert_file = /etc/ssl/certs/mail.crt
ssl_key_file = /etc/ssl/private/mail.key
mail_location = maildir:~/Maildir
mail_access_groups = mail
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
protocol imap {
imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}
auth default {
mechanisms = plain login
passdb pam {
}
userdb passwd {
}
user = root
socket listen {
client {
path = /var/run/dovecot/auth-client
user = postfix
group = postfix
mode = 0660
}
}
}Postfix
다음은 Postfix이며, 구성 파일은 매우 복잡합니다. 다행히도 저는 모든 연구를 완료했으므로 거의 모든 것을 복사하여 붙여넣을 수 있습니다. 다음 설정은 여전히 변경해야 합니다:
myhostname: 메일 서버의 위치(예: mail.example.com).
myorigin: 이메일 주소의 @ 뒤에 오는 도메인(예: [email protected]).
virtual_alias_domains: myorigin과 동일합니다.
/etc/postfix/main.cf
# 경로
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
# 도메인 설정
myhostname = mail.example.com
myorigin = example.com
mydestination = $myhostname, localhost.$mydomain, localhost
# 타임아웃 설정 및 기타 제한
delay_warning_time = 4h
unknown_local_recipient_reject_code = 450
minimal_backoff_time = 300s
maximal_backoff_time = 1200s
maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d
smtp_helo_timeout = 60s
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 12
# SMTP 설정
smtpd_tls_cert_file=/etc/ssl/certs/mail.crt
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtpd_tls_loglevel = 1
smtpd_sasl_auth_enable = yes
#smtp_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:10030
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
smtpd_sasl_security_options = noanonymous
# SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
# 네트워크 설정
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8
relayhost =
# 이메일 및 메일박스 설정
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
home_mailbox = Maildir/
virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual
mailbox_size_limit = 0
# 기타
mailbox_command = /usr/bin/procmail
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
debug_peer_level = 2
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/man
sample_directory = /etc/postfix/sample
readme_directory = no
recipient_delimiter = +master.cf를 편집하여 Postfix가 이메일을 Postgrey(다음 장에서 설명할 예정)와 Spamassassin을 통해 필터링하도록 합니다.
/etc/postfix/master.cf
다음 줄을 교체합니다:
smtp inet n - n - - smtpd다음 두 줄로:
smtp inet n - n - - smtpd
-o content_filter=spamassassin그리고 파일 끝에 다음 세 줄을 추가합니다:
spamassassin unix - n n - - pipe
user=spamd argv=/usr/bin/perlbin/vendor/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}Spamassassin 규칙을 설정합니다. required_score를 약간 조정해야 할 수도 있습니다. 기본값인 6.31은 저에게는 괜찮습니다.
/etc/mail/spamassassin/local.cf
rewrite_header Subject ***SPAM***
required_score 6.31
report_safe 1
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1/etc/procmailrc
스팸을 자동으로 정크 폴더로 복사하려면 이 파일을 생성합니다:
DROPPRIVS=yes
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir/
:0:
* ^X-Spam-Status: Yes
.Junk/사용자 계정 생성
각 이메일 사용자에 대해 적절한 계정을 생성하고, 모든 작업을 수동으로 수행하고 싶지 않다면 자신의 스크립트를 생성합니다.
useradd -m -G mail -s /sbin/nologin
cd ~
umask 077
mkdir -p Maildir/{cur,new,tmp}
mkdir -p Maildir/.Drafts/{cur,new,tmp}
mkdir -p Maildir/.Sent/{cur,new,tmp}
mkdir -p Maildir/.Trash/{cur,new,tmp}
chmod 0700 Maildir/{cur,new,tmp}
chmod 0700 Maildir/.Drafts/{cur,new,tmp}
chmod 0700 Maildir/.Sent/{cur,new,tmp}
chmod 0700 Maildir/.Trash/{cur,new,tmp}
chown -R :users * 새 사용자의 이메일 주소가 가상 사용자 맵에 추가되었는지 확인합니다.
/etc/postfix/virtual
[email protected] jeffrey@localhost이 파일을 저장한 후 다음을 실행합니다:
postmap /etc/postfix/virtualPostgrey
Postgrey는 기본 pacman 저장소에 없으므로 AUR에서 다운로드합니다. 다음 명령을 일반 사용자로 실행하고 root로 실행하지 않도록 하세요.
cd ~
wget http://aur.archlinux.org/packages/yaourt/yaourt.tar.gz
tar xzvf yaourt.tar.gz
cd yaourt
makepkg -i
yaourt --noconfirm -S postgrey선택적으로 /etc/postfix/postgrey_whitelist_recipients 파일을 편집하여 신뢰하는 도메인 및 이메일 주소를 화이트리스트에 추가할 수 있습니다. 이는 이러한 주소가 그레이리스트로 인해 지연되지 않도록 하는 데 유용합니다.
서버 시작
드디어! 모든 작업이 완료되었습니다. 이제 모든 서버를 시작하고 모두 작동하기를 바랍니다.
/etc/rc.conf를 편집하고 나열된 데몬을 추가했는지 확인합니다:
DAEMONS=(spamd postgrey dovecot postfix)이렇게 하면 모든 데몬이 재부팅 시 자동으로 시작됩니다. 지금은 수동으로 시작합니다:
/etc/rc.d/spamd start
/etc/rc.d/postgrey start
/etc/rc.d/dovecot start
/etc/rc.d/postfix startmail.example.com을 좋아하는 이메일 클라이언트에 추가하고 사용자 계정 설정을 입력한 후, 선택적으로 SSL을 활성화하면 개인의 완전한 기능을 갖춘 메일 서버가 준비됩니다!
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.